Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Key Changes
Checkpoint Handling Fixes:
FileCheckpointStoreandMongoCheckpointStoreto enforce monotonic checkpoint advancement - checkpoints can no longer move backwards within a runReplicator.Flush()to rely on the checkpoint store's in-memory state rather than computing a checkpoint from the reader's positionReplicationRunhelper to generate a uniqueRunIdper replication execution for log correlationPartition Sequencing Improvements:
PartitionChannelto use global commit position (SourceLogPosition.EventPosition) for ordering instead of per-streamSequenceNumber, fixing false sequence errors when new streams start at event number 0IsMetadatacomputed property toBaseOriginalEventandBaseProposedEventto distinguish metadata/system events ($>,$@) from domain eventsIgnoreMetadataEventsForPartitioningconfiguration flag to optionally bypass sequence checks for metadata eventsDiagnostic Instrumentation:
ReplicationMessageId(GUID) to all event models for end-to-end correlation from reader → partitioner → Kafka writerDebugPartitionSequencesconfiguration flag to enable high-verbosity sequencing logsPartitionChannelwith detailed logging:Seq OKlogs when debug mode is enabledRunId, source (InMemory/File/Default), and previous/new values on flushGrpcEventReaderandTcpEventReaderConfiguration:
Replicator.DebugPartitionSequencessetting for enabling verbose diagnostic logsSink.IgnoreMetadataEventsForPartitioningsetting for metadata handling controlSinkPipeOptionsand logged at startup when enabledFiles Modified
src/Kurrent.Replicator/Replicator.cssrc/Kurrent.Replicator/FileCheckpointStore.cssrc/Kurrent.Replicator/Partitioning/PartitionChannel.cssrc/Kurrent.Replicator/Partitioning/HashPartitioner.cssrc/Kurrent.Replicator/Partitioning/ValuePartitioner.cssrc/Kurrent.Replicator/Sink/SinkPipe.cssrc/Kurrent.Replicator/Sink/SinkPipelineOptions.cssrc/Kurrent.Replicator.Shared/Contracts/OriginalEvent.cssrc/Kurrent.Replicator.Shared/Contracts/ProposedEvent.cssrc/Kurrent.Replicator.Shared/Observe/ReplicationRun.cs(new)src/Kurrent.Replicator.Shared/Observe/ReplicationDebugOptions.cs(new)src/Kurrent.Replicator.KurrentDb/GrpcEventReader.cssrc/Kurrent.Replicator.EventStore/TcpEventReader.cssrc/Kurrent.Replicator.Kafka/KafkaWriter.cssrc/Kurrent.Replicator.Mongo/MongoCheckpointStore.cssrc/replicator/Settings/ReplicatorSettings.cssrc/replicator/Startup.csTesting