@@ -30,6 +30,7 @@ public class ReaderSubscriptionBase {
30
30
private DateTime _lastCheckpointTime = DateTime . MinValue ;
31
31
private bool _enableContentTypeValidation ;
32
32
private ILogger _logger ;
33
+ private CheckpointTag _lastCheckpointTag ;
33
34
34
35
protected ReaderSubscriptionBase (
35
36
IPublisher publisher ,
@@ -65,6 +66,7 @@ protected ReaderSubscriptionBase(
65
66
_positionTagger = readerStrategy . PositionTagger ;
66
67
_positionTracker = new PositionTracker ( _positionTagger ) ;
67
68
_positionTracker . UpdateByCheckpointTagInitial ( @from ) ;
69
+ _lastCheckpointTag = _positionTracker . LastTag ;
68
70
_enableContentTypeValidation = enableContentTypeValidation ;
69
71
_logger = Serilog . Log . ForContext < ReaderSubscriptionBase > ( ) ;
70
72
}
@@ -125,7 +127,8 @@ protected void ProcessOne(ReaderSubscriptionMessage.CommittedEventDistributed me
125
127
_eventsSinceLastCheckpointSuggestedOrStart ++ ;
126
128
if ( _checkpointProcessedEventsThreshold > 0
127
129
&& timeDifference > _checkpointAfter
128
- && _eventsSinceLastCheckpointSuggestedOrStart >= _checkpointProcessedEventsThreshold )
130
+ && _eventsSinceLastCheckpointSuggestedOrStart >= _checkpointProcessedEventsThreshold
131
+ && _lastCheckpointTag != _positionTracker . LastTag )
129
132
SuggestCheckpoint ( message ) ;
130
133
if ( _stopAfterNEvents > 0 && _eventsSinceLastCheckpointSuggestedOrStart >= _stopAfterNEvents )
131
134
NEventsReached ( ) ;
@@ -134,7 +137,8 @@ protected void ProcessOne(ReaderSubscriptionMessage.CommittedEventDistributed me
134
137
&& timeDifference > _checkpointAfter
135
138
&& ( _lastPassedOrCheckpointedEventPosition != null
136
139
&& message . Data . Position . PreparePosition - _lastPassedOrCheckpointedEventPosition . Value
137
- > _checkpointUnhandledBytesThreshold ) )
140
+ > _checkpointUnhandledBytesThreshold )
141
+ && _lastCheckpointTag != _positionTracker . LastTag )
138
142
SuggestCheckpoint ( message ) ;
139
143
else if ( progressChanged )
140
144
PublishProgress ( roundedProgress ) ;
@@ -178,6 +182,7 @@ private void PublishStartingAt(long startingLastCommitPosition) {
178
182
179
183
private void SuggestCheckpoint ( ReaderSubscriptionMessage . CommittedEventDistributed message ) {
180
184
_lastPassedOrCheckpointedEventPosition = message . Data . Position . PreparePosition ;
185
+ _lastCheckpointTag = _positionTracker . LastTag ;
181
186
_publisher . Publish (
182
187
new EventReaderSubscriptionMessage . CheckpointSuggested (
183
188
_subscriptionId , _positionTracker . LastTag , message . Progress ,
0 commit comments