Share DDC and Local DDC cannot sync

Here is our DDC Setting in BaseEngine.ini

[DerivedDataBackendGraph]

Root=(Type=Hierarchical, Inner=Local, Inner=Shared)

Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, UnusedFileAge=34, FoldersToClean=-1, Path=%ENGINEDIR%DerivedDataCache, EnvPathOverride=UE-LocalDataCachePath, EditorOverrideSetting=LocalDerivedDataCache)

Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, PromptIfMissing=true, UnusedFileAge=34, FoldersToClean=-1, Path=\\someshare\folder, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache, CommandLineOverride=SharedDataCachePath)

Then on machines with the same configuration, using the same resource repository to export data for the same platform, we found that almost all UDD files are identical in both Local DDC and Shared DDC, except for a few files that differ.
Additionally, the Local DDC contains some extra files that are not present in the Shared DDC.

Here are the differences between the following types.

  • Buckets\AnimationSequence

  • Buckets\LegacyNavCollision

  • Buckets\MaterialShaderMap

  • Buckets\MaterialTranslation

  • Buckets\BulkDataList

  • Buckets\LegacyCARD

  • Buckets\LegacyTEXTURE

Any thoughts on resolving these differences?

I may be wrong, but the industry-standard solution is to make the Shared cache read-only for all users and have a single, dedicated build machine populate it.

So, you would:

  1. Create a Dedicated Build Machine: Set up a machine that is the only machine responsible for building DDC.

  2. Make Shared Read-Only for Users: Change your Shared settings in BaseEngine.ini for all users to ReadOnly=true.

  3. Make Shared Writeable for the Build Machine: On the build machine only, set ReadOnly=false (or use a separate “push” step).

With that, I think, Users’ Local caches can’t “poison” the Shared cache because they don’t have write access.