private async ValueTask <ProjectionTargetMetadataCacheEntry> GetMetadataAsync(ProjectionTargetDescriptor <TProjectionId> target, CancellationToken cancellation) { if (!_targetMetadataCache.TryGetValue(target, out var entry)) { var entryId = ProjectionTargetMetadata.GenerateId(target.TargetId.ToString(), target.TargetType.GetUnqualifiedTypeName()); var metadata = await _database.GetAsync <ProjectionTargetMetadata>(p => p.Id == entryId, cancellation).FirstOrDefault(); var originalMetadata = metadata; var touched = false; if (metadata == null) { metadata = new ProjectionTargetMetadata { TargetId = target.TargetId, TargetType = target.TargetType.GetUnqualifiedTypeName() }; touched = true; } entry = new ProjectionTargetMetadataCacheEntry(originalMetadata, metadata, touched); _targetMetadataCache.Add(target, entry); } return(entry); }
public ProjectionTargetMetadataCacheEntry(ProjectionTargetMetadata originalMetadata, ProjectionTargetMetadata metadata, bool touched) { if (originalMetadata == null && metadata == null) { touched = false; } OriginalMetadata = originalMetadata; Metadata = metadata; Touched = touched; }
private bool MatchesByRevision(ProjectionTargetMetadata original, ProjectionTargetMetadata comparand) { if (original is null) { return(comparand is null); } if (comparand is null) { return(false); } return(original.MetadataRevision == comparand.MetadataRevision); }
private async ValueTask <ProjectionTargetMetadataCacheEntry> GetMetadataAsync(ProjectionTargetDescriptor target, CancellationToken cancellation) { if (!_targetMetadataCache.TryGetValue(target, out var entry)) { var entryId = ProjectionTargetMetadata.GenerateId(target.TargetId, target.TargetType.GetUnqualifiedTypeName()); var metadata = await _database.GetAsync <ProjectionTargetMetadata>(p => p.Id == entryId, cancellation).FirstOrDefault(); entry = new ProjectionTargetMetadataCacheEntry(metadata, metadata, touched: false); if (metadata != null) { _targetMetadataCache.Add(target, entry); } } return(entry); }
public void Deconstruct(out ProjectionTargetMetadata originalMetadata, out ProjectionTargetMetadata metadata) { originalMetadata = OriginalMetadata; metadata = Metadata; }