unagirabbit's blog

気づいたことをメモしています

Unity Accelerator アップロードが完了するまで待つ

Unity Accelerator アップロード完了まで待つ

Editorのクリーン起動をしたりReimportを行ってもキャッシュサーバーのキャッシュは少しずつしか増えない。
Acceleratorには強制アップロードのような機能は現時点でないため完了を待つしかない。
ログを見てもエラー内容の説明がないため原因もわからずです。

{
    "level": "debug",
    "ts": "2023-02-03T10:28:42.446Z",
    "msg": "handled getRequest",
    "agent_id": "unitytechnologies-accelerator1_id",
    "agent_name": "unitytechnologies-accelerator1",
    "component": "pbservice",
    "subprocess_id": 6,
    "conn_id": 11,
    "remote": "hoge",
    "segment_id": 11952,
    "namespace": "defaultmetadata",
    "key": "df4c38c695e1dbbf0361f5687a17e055",
    "status": "key not found",
    "status_code": 3,
    "size": 0,
    "blob_hash": 0
  },

フォーラムでアップロードの完了を待つ方法が紹介されていました。
batchmodequitをせずにバックグラウンドタスク(アップロード)の完了を待ちます。

forum.unity.com

public static async void RunAndQuit()
{
    try {
        await UniTask.Delay(1000);
        var delayCount = 0;
        while (Progress.running) {
            delayCount++;
            if (delayCount % 5 == 0) {
                Debug.Log($"Waiting background tasks ... ({Progress.GetCount()} tasks)");
            }
            await UniTask.Delay(1000);
        }
        Debug.Log($"{nameof(CacheUploadWaitRunner)}.Run() is complete. ({EditorUserBuildSettings.activeBuildTarget})");

    } catch(Exception e) {
        Debug.LogException(e);
        EditorApplication.Exit(-1);
        return;
    }
    EditorApplication.Exit(0);
}

あまりキャッシュされてないサーバーへのアップロードには5時間半もかかりました。
通常2時間半ほどインポートに時間を要していたプロジェクトでは、
それ以降インポートが30分~40分ほどになりました。

インポート中のログ

...
Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver
Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver
waiting background tasks ... (1 tasks)
Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver
Artifact(artifact id=hoge, static dependencies=fuga, content hash=puyo) uploaded to cacheserver
...

すべてを一度ではアップロードできないようなので、
Libraryフォルダー削除~起動~プラットフォーム切り替え~を行うパイプラインを組んで毎日ビルドしています。