@@ -88,7 +88,10 @@ impl SplitReader for KinesisSplitReader {
88
88
} ,
89
89
start_position => start_position. to_owned ( ) ,
90
90
} ;
91
- if start_position != KinesisOffset :: SequenceNumber && properties. seq_offset . is_some ( ) {
91
+
92
+ if !matches ! ( start_position, KinesisOffset :: SequenceNumber ( _) )
93
+ && properties. seq_offset . is_some ( )
94
+ {
92
95
return Err (
93
96
anyhow ! ( "scan.startup.mode need to be set to 'sequence_number' if you want to start with a specific sequence number" )
94
97
) ;
@@ -280,6 +283,41 @@ mod tests {
280
283
use crate :: common:: KinesisCommon ;
281
284
use crate :: source:: kinesis:: split:: KinesisSplit ;
282
285
286
+ #[ tokio:: test]
287
+ async fn test_reject_redundant_seq_props ( ) {
288
+ let properties = KinesisProperties {
289
+ common : KinesisCommon {
290
+ assume_role_arn : None ,
291
+ credentials_access_key : None ,
292
+ credentials_secret_access_key : None ,
293
+ stream_name : "kinesis_debug" . to_string ( ) ,
294
+ stream_region : "cn-northwest-1" . to_string ( ) ,
295
+ endpoint : None ,
296
+ session_token : None ,
297
+ assume_role_external_id : None ,
298
+ } ,
299
+
300
+ scan_startup_mode : None ,
301
+ seq_offset : Some (
302
+ // redundant seq number
303
+ "49629139817504901062972448413535783695568426186596941842" . to_string ( ) ,
304
+ ) ,
305
+ } ;
306
+ let client = KinesisSplitReader :: new (
307
+ properties,
308
+ vec ! [ SplitImpl :: Kinesis ( KinesisSplit {
309
+ shard_id: "shardId-000000000001" . to_string( ) . into( ) ,
310
+ start_position: KinesisOffset :: Earliest ,
311
+ end_position: KinesisOffset :: None ,
312
+ } ) ] ,
313
+ Default :: default ( ) ,
314
+ Default :: default ( ) ,
315
+ None ,
316
+ )
317
+ . await ;
318
+ assert ! ( client. is_err( ) ) ;
319
+ }
320
+
283
321
#[ tokio:: test]
284
322
#[ ignore]
285
323
async fn test_single_thread_kinesis_reader ( ) -> Result < ( ) > {
0 commit comments