@@ -461,6 +461,7 @@ mod tests {
461461 job_id : JobId :: new ( "J" ) ,
462462 generation : Generation ( 1 ) ,
463463 updated_at : from_micros ( 123 ) ,
464+ ignore_state : false ,
464465 } ,
465466 false ,
466467 )
@@ -516,6 +517,7 @@ mod tests {
516517 job_id : JobId :: new ( "J" ) ,
517518 generation : Generation ( 2 ) ,
518519 updated_at : from_micros ( 456 ) ,
520+ ignore_state : false ,
519521 } ,
520522 false ,
521523 )
@@ -547,6 +549,62 @@ mod tests {
547549 assert_eq ! ( written_manifest, expected_manifest) ;
548550 }
549551
552+ #[ tokio:: test]
553+ async fn initialize_generation_can_ignore_previous_checkpoint ( ) {
554+ let store = MemoryProtocolStore :: default ( ) ;
555+ let paths = ProtocolPaths :: new ( PipelineId :: new ( "P" ) , JobId :: new ( "J" ) ) ;
556+ write_current_generation ( & store, & paths, Generation ( 2 ) ) . await ;
557+
558+ let checkpoint_ref = paths. checkpoint_manifest ( Generation ( 1 ) , Epoch ( 1 ) ) ;
559+ let checkpoint = checkpoint_for_generation ( Generation ( 1 ) , 1 , None , false ) ;
560+ write_canonical_checkpoint ( & store, & paths, & checkpoint_ref, & checkpoint) . await ;
561+ let previous_manifest =
562+ generation_manifest_for_generation ( Generation ( 1 ) , None , Some ( checkpoint_ref) ) ;
563+ put_json (
564+ & store,
565+ & paths. generation_manifest ( Generation ( 1 ) ) ,
566+ & previous_manifest,
567+ )
568+ . await
569+ . unwrap ( ) ;
570+
571+ let initialization = initialize_generation (
572+ & store,
573+ InitializeGenerationRequest {
574+ pipeline_id : PipelineId :: new ( "P" ) ,
575+ job_id : JobId :: new ( "J" ) ,
576+ generation : Generation ( 2 ) ,
577+ updated_at : from_micros ( 456 ) ,
578+ ignore_state : true ,
579+ } ,
580+ false ,
581+ )
582+ . await
583+ . unwrap ( ) ;
584+
585+ let expected_manifest = GenerationManifest :: new (
586+ PipelineId :: new ( "P" ) ,
587+ JobId :: new ( "J" ) ,
588+ Generation ( 2 ) ,
589+ None ,
590+ 456 ,
591+ ) ;
592+ assert_eq ! (
593+ initialization,
594+ GenerationInitialization :: Initialized {
595+ generation_manifest: expected_manifest. clone( ) ,
596+ recovery: GenerationRecovery :: NoCheckpoint ,
597+ }
598+ ) ;
599+
600+ let written_manifest: GenerationManifest =
601+ read_json ( & store, & paths. generation_manifest ( Generation ( 2 ) ) )
602+ . await
603+ . unwrap ( )
604+ . expect ( "new generation manifest should be written" ) ;
605+ assert_eq ! ( written_manifest, expected_manifest) ;
606+ }
607+
550608 #[ tokio:: test]
551609 async fn initialize_generation_restores_previous_checkpoint_requiring_commit_replay ( ) {
552610 let store = MemoryProtocolStore :: default ( ) ;
@@ -573,6 +631,7 @@ mod tests {
573631 job_id : JobId :: new ( "J" ) ,
574632 generation : Generation ( 2 ) ,
575633 updated_at : from_micros ( 456 ) ,
634+ ignore_state : false ,
576635 } ,
577636 false ,
578637 )
@@ -621,6 +680,7 @@ mod tests {
621680 job_id : JobId :: new ( "J" ) ,
622681 generation : Generation ( 3 ) ,
623682 updated_at : from_micros ( 789 ) ,
683+ ignore_state : false ,
624684 } ,
625685 false ,
626686 )
@@ -668,6 +728,7 @@ mod tests {
668728 job_id : JobId :: new ( "J" ) ,
669729 generation : Generation ( 2 ) ,
670730 updated_at : from_micros ( 456 ) ,
731+ ignore_state : false ,
671732 } ,
672733 false ,
673734 )
@@ -724,6 +785,7 @@ mod tests {
724785 job_id : JobId :: new ( "J" ) ,
725786 generation : Generation ( 3 ) ,
726787 updated_at : from_micros ( 456 ) ,
788+ ignore_state : false ,
727789 } ,
728790 false ,
729791 )
@@ -789,6 +851,7 @@ mod tests {
789851 job_id : JobId :: new ( "J" ) ,
790852 generation : Generation ( 3 ) ,
791853 updated_at : from_micros ( 456 ) ,
854+ ignore_state : false ,
792855 } ,
793856 false ,
794857 )
@@ -826,6 +889,7 @@ mod tests {
826889 job_id : JobId :: new ( "J" ) ,
827890 generation : Generation ( 2 ) ,
828891 updated_at : from_micros ( 456 ) ,
892+ ignore_state : false ,
829893 } ,
830894 false ,
831895 )
0 commit comments