ProjectPackagingSettingsがbUseZenStore=Trueの時、-cookincremental で一度クックエラーが起きると復帰できない

ProjectPackagingSettingsがbUseZenStore=Trueの時、-cookincremental で一度クックエラーが起きると復帰できません

-cookincremental を一旦外してクックしなおすと復帰します

<br/>

前提条件)

DefaultGame.iniの設定が以下の状態

[/Script/UnrealEd.ProjectPackagingSettings]

bUseZenStore=True

でBuildCookRun時に-cookincremental を利用して差分クックしています

<br/>

例)

1、BPのC++クラスをsubmitし忘れた状態でBuildCookRunをかけたところベースクラスがないといわれて当然クックエラーになる

2、その後C++クラスをsubmitして再度BuildCookRunをかける

3、ベースクラスがあるはずなのにエラーが出続ける

4、-cookincremental のオプションをなくした状態でBuildCookRunするとエラーが収まる

<br/>

という状態です

zenServerにクックエラー時の状態が保存されてしまい、差分クック時に再クックされていないような挙動をします

<br/>

既知の問題でしょうか?

[Attachment Removed]

お世話になっております。

当方で「例」の内容を厳密に再現する環境を確保できておらず、再現確認に至っておりませんが、この例に関していえば //UE5/Main CL51679479 で修正された既知の問題に近いと考えております。

大変お手数ですが、上記のCLを適用の上、問題が解消されるかどうか一度ご確認いただけませんでしょうか。

なお、ZenStore + Incremental Cook の一般的な動作としては、 Incremental Cook で一度クックエラーを起こしたとしても、それを修正する作業を行えば、次の Incremental Cookでクックエラーは解消されるはずです。ただし、その理想通りの動作を実現できない個別の事象(特定の手順における不具合)があり、個々に修正を進めているという状況です。

以上、よろしくお願いいたします。

[Attachment Removed]

了解いたしました!パッチを当てて様子を見ます

[Attachment Removed]

返信のご確認をありがとうございます。

前述のCLを適用しても問題が起こるようであれば(もしくは明らかに問題が解消されたようであれば)、またご連絡ください。

一旦お返事待ちとさせていただきます。

以上、よろしくお願いいたします。​

[Attachment Removed]

大変失礼いたしました、頂いたclですがこれのみパッチを当てた場合ビルドエラーとなるため検証ができていない状況です

[Attachment Removed]

大変申し訳ありません!

CL全体をご案内してしまいましたが、今回に関しては、BlueprintDependencies.cpp:756-758に下記の通りピンポイントでパッチしていただければ十分でした。

if(!BP->ParentClass || 
	!BP->GeneratedClass ||
-	!BP->GeneratedClass->IsChildOf(UObject::StaticClass()))
+	!BP->GeneratedClass->IsChildOf(UObject::StaticClass()) ||
+	(BP->Status == BS_Error || BP->Status == BS_Unknown))
{
	// blueprints without classes - malformed or some
	// kind of utility blueprint, ignore them
	return UE::Cook::FCookDependency::Function(
		UE_COOK_DEPENDENCY_FUNCTION_CALL(NotCacheable), FCbFieldIterator());
}

上記変更を適用の上、改めて問題が抑制されるか否か様子を見ていていただければと存じます。

以上、よろしくお願いいたします。

[Attachment Removed]

ありがとうございます!ビルドは通りましたのでエラー再現してみます

[Attachment Removed]

1、BPのC++クラスをsubmitし忘れた状態でBuildCookRunをかけたところベースクラスがないといわれて当然クックエラーになる

2、その後C++クラスをsubmitして再度BuildCookRunをかける

3、ベースクラスがあるはずなのにエラーが出続る

までは変わらずで、その後の挙動がやや変わりました

・submitをundoするとエラーが出なくなる

になりました(パッチを充てる前はundoしてもエラーが続いていました)

この状態の修正方法は-cookincremental のオプションをなくした状態でBuildCookRunする で変わらずでした

[Attachment Removed]

お世話になっております。

ご確認ありがとうございます。

前回ご案内したパッチの適用では修正できなかったとのこと、承知いたしました。

こちらはエンジンの不具合と考えられるため、バグトラッカーに起票させていただこうと思います。

報告に添付するため、お手数ですが、Incremental Cook 時に発生する「ベースクラスがない」エラーの正確な文言を、可能な範囲でお教えいただけますと幸いです。プロジェクト固有の名称等は適宜マスキングしていただいて構いません。

また、Incremental Cook で問題が生じ、状態解消のために一度だけ Full Cook をかけたい状況への対処法として、

Engine/Source/Editor/UnrealEd/Private/Cooker/CookIncrementalVersion.cpp

の冒頭にある下記の GUID 定数を、どこか 1 桁でも書き換える、というものがありますので、ご参考までに共有いたします。

 // before(5.7 現状)
 FGuid CookIncrementalVersion( 0x9F3A7C12, 0x4B8E2F90,
                0xC1D47A6B, 0x6E9B0FD3 );
 
 // after の例(最後の桁を 2 → 3 に変えるだけで十分です)
 FGuid CookIncrementalVersion( 0x9F3A7C13, 0x4B8E2F90,
                0xC1D47A6B, 0x6E9B0FD3 );

ビルドし直して次回 cook を実行いただくと、incremental cache が全パッケージで無効化され、-cookincremental の有無にかかわらず、一度だけ強制的に full cook がかかります。やや力技ではありますが、こうしたやり方で、停止した CI に応急措置をかけるやり方は、弊社内部でも使用されております。

(//UE5/Main の当該ファイルの History をご覧いただくと、“Bump” というコメントつきで、この GUID を変更している経緯がご確認いただけると思います)

以上、よろしくお願いいたします。

[Attachment Removed]

エラーは以下のとおりです!

(GUIDの件、了解いたしました)

LogLinker: Warning: [AssetLog] D:\TestProject\Data\TestCook\UE5\TestProject\Plugins\GameFeatures\TestProjectActionCore\Content\Character\JenkinsTestActor.uasset: CreateExport: Failed to load Class /Script/TestProjectCharacterCoreRuntime.ChaCharacterPreviewCharacterTest as Parent for BlueprintGeneratedClass /TestProjectActionCore/Character/JenkinsTestActor.JenkinsTestActor_C - both will fail to load
LogLinker: Warning: Unable to load Default__JenkinsTestActor_C with outer Package /TestProjectActionCore/Character/JenkinsTestActor because its class (JenkinsTestActor_C) does not exist

[Attachment Removed]

お世話になっております。

大変遅くなりました。

ご提供いただいた情報をもとに社内のバグトラッカーに起票を行いました。

対応を協議のうえ、可能であれば後日 Public Issue でも公開させていただきたいと思いますが、現在は社内のみのチケットとなっております。

(そのため、なにか進展があればご連絡させていただきます)

ご不便をおかけしますが、対応完了までお時間を頂戴できますと幸いです。

また、EPSチケット管理の関係上、大変恐縮ですが、本件を一旦Closeにさせていただき、進展があった際に再Openしてご連絡・・・という形をとらせていただければと思いますが、問題ございませんでしょうか。

以上、よろしくお願いいたします。

[Attachment Removed]

了解いたしました!Closeで大丈夫です

[Attachment Removed]

ご回答ありがとうございます。

それではお言葉に甘えまして、一旦Closeさせていただきます。

引き続き、よろしくお願いいたします。

[Attachment Removed]