diff --git a/src/GameCult.Mesh/CultMeshSnapshots.cs b/src/GameCult.Mesh/CultMeshSnapshots.cs index 1a2f21a2..82828fbd 100644 --- a/src/GameCult.Mesh/CultMeshSnapshots.cs +++ b/src/GameCult.Mesh/CultMeshSnapshots.cs @@ -291,7 +291,7 @@ namespace GameCult.Mesh var descriptor = CultDocumentRegistry.Shared.GetRequired(); return CultMesh.FetchSnapshotDocumentsAsync( Endpoint, - CreateRequest(schemaIds ?? new[] { descriptor.SchemaId }, recordKeys), + CreateRequest(ResolveDefaultSchemaFilter(schemaIds, recordKeys, descriptor), recordKeys), DocumentRegistry); } @@ -308,7 +308,7 @@ namespace GameCult.Mesh var descriptor = CultDocumentRegistry.Shared.GetRequired(); var result = await SyncSnapshotAsync( node, - schemaIds ?? new[] { descriptor.SchemaId }, + ResolveDefaultSchemaFilter(schemaIds, recordKeys, descriptor), recordKeys, flush) .ConfigureAwait(false); @@ -448,6 +448,19 @@ namespace GameCult.Mesh return request; } + private static IReadOnlyList? ResolveDefaultSchemaFilter( + IReadOnlyList? schemaIds, + IReadOnlyList? recordKeys, + CultDocumentDescriptor descriptor) + { + if (schemaIds != null) + return schemaIds; + + return recordKeys is { Count: > 0 } + ? null + : new[] { descriptor.SchemaId }; + } + private static CultMeshSnapshotRequestOptions CloneSnapshotRequestOptions(CultMeshSnapshotRequestOptions? source) { if (source == null) diff --git a/tests/GameCult.Mesh.Tests/CultMeshStreamingTests.cs b/tests/GameCult.Mesh.Tests/CultMeshStreamingTests.cs index 5b507649..c146e7d4 100644 --- a/tests/GameCult.Mesh.Tests/CultMeshStreamingTests.cs +++ b/tests/GameCult.Mesh.Tests/CultMeshStreamingTests.cs @@ -2486,10 +2486,7 @@ public sealed class CultMeshStreamingTests syncedCatalogAlias.Text.Should().Be("snapshot-endpoint-catalog-synced"); requests.Should().HaveCount(6); requests.Should().OnlyContain(request => - request.SchemaIds!.SequenceEqual(new[] - { - CultDocumentRegistry.Shared.GetRequired().SchemaId - }) && + request.SchemaIds == null && request.RecordKeys!.SequenceEqual(new[] { key.Value }) && request.ShardId == "primary" && request.ShardEpoch == 9 &&