diff --git a/src/GameCult.Caching.MessagePack/DirectoryMessagePackBackingStore.cs b/src/GameCult.Caching.MessagePack/DirectoryMessagePackBackingStore.cs index dff49c50..15f4423c 100644 --- a/src/GameCult.Caching.MessagePack/DirectoryMessagePackBackingStore.cs +++ b/src/GameCult.Caching.MessagePack/DirectoryMessagePackBackingStore.cs @@ -259,7 +259,7 @@ public sealed class DirectoryMessagePackBackingStore : CacheBackingStore .ToArray(); var usedSchemaIds = currentIndex.Values.Select(record => record.SchemaId).ToHashSet(StringComparer.Ordinal); var targetCatalog = catalogCandidates - .Where(entry => usedSchemaIds.Contains(entry.SchemaId)) + .Where(entry => usedSchemaIds.Contains(entry.SchemaId) || entry.CompatibleSchemaIds.Any(usedSchemaIds.Contains)) .OrderBy(entry => entry.SchemaName, StringComparer.Ordinal) .ToArray(); var keysToWrite = _dirtyKeys.Keys diff --git a/src/GameCult.Caching/CultCache.cs b/src/GameCult.Caching/CultCache.cs index f40d2d26..2a695857 100644 --- a/src/GameCult.Caching/CultCache.cs +++ b/src/GameCult.Caching/CultCache.cs @@ -3640,7 +3640,8 @@ namespace GameCult.Caching SchemaCatalog = catalog .GroupBy(entry => entry.SchemaId, StringComparer.Ordinal) .Select(group => group.First()) - .Where(entry => used.Contains(entry.SchemaId)) + // An entry stays while it publishes a schema id some record carries, as its own id or a compatible one. + .Where(entry => used.Contains(entry.SchemaId) || entry.CompatibleSchemaIds.Any(used.Contains)) .OrderBy(entry => entry.SchemaName, StringComparer.Ordinal) .ToArray(), Records = ordered