@@ -7323,6 +7323,51 @@ func TestJetStreamClusterConsumerHealthCheckMustNotRecreate(t *testing.T) {
7323
7323
checkNodeIsClosed (ca )
7324
7324
}
7325
7325
7326
+ func TestJetStreamClusterRespectConsumerStartSeq (t * testing.T ) {
7327
+ c := createJetStreamClusterExplicit (t , "R3S" , 3 )
7328
+ defer c .shutdown ()
7329
+
7330
+ nc , js := jsClientConnect (t , c .randomServer ())
7331
+ defer nc .Close ()
7332
+
7333
+ // Create replicated stream.
7334
+ _ , err := js .AddStream (& nats.StreamConfig {
7335
+ Name : "TEST" ,
7336
+ Subjects : []string {"foo" },
7337
+ Replicas : 3 ,
7338
+ })
7339
+ require_NoError (t , err )
7340
+
7341
+ // We could have published messages into the stream that have not yet been applied on the follower.
7342
+ // If we create a consumer with a starting sequence in the future, we must respect it.
7343
+ ci , err := js .AddConsumer ("TEST" , & nats.ConsumerConfig {
7344
+ DeliverPolicy : nats .DeliverByStartSequencePolicy ,
7345
+ OptStartSeq : 20 ,
7346
+ })
7347
+ require_NoError (t , err )
7348
+ require_Equal (t , ci .Delivered .Stream , 19 )
7349
+
7350
+ // Same thing if the first sequence is not 0.
7351
+ err = js .PurgeStream ("TEST" , & nats.StreamPurgeRequest {Sequence : 10 })
7352
+ require_NoError (t , err )
7353
+
7354
+ ci , err = js .AddConsumer ("TEST" , & nats.ConsumerConfig {
7355
+ DeliverPolicy : nats .DeliverByStartSequencePolicy ,
7356
+ OptStartSeq : 20 ,
7357
+ })
7358
+ require_NoError (t , err )
7359
+ require_Equal (t , ci .Delivered .Stream , 19 )
7360
+
7361
+ // Only if we're requested to start at a sequence that's not available anymore
7362
+ // can we safely move it up. That data is gone already, so can't do anything else.
7363
+ ci , err = js .AddConsumer ("TEST" , & nats.ConsumerConfig {
7364
+ DeliverPolicy : nats .DeliverByStartSequencePolicy ,
7365
+ OptStartSeq : 5 ,
7366
+ })
7367
+ require_NoError (t , err )
7368
+ require_Equal (t , ci .Delivered .Stream , 9 )
7369
+ }
7370
+
7326
7371
//
7327
7372
// DO NOT ADD NEW TESTS IN THIS FILE (unless to balance test times)
7328
7373
// Add at the end of jetstream_cluster_<n>_test.go, with <n> being the highest value.
0 commit comments