@@ -698,7 +698,8 @@ async fn handle_sqlite_get_pages(
698698 conn : & Conn ,
699699 request : protocol:: SqliteGetPagesRequest ,
700700) -> Result < protocol:: SqliteGetPagesResponse > {
701- validate_sqlite_actor ( ctx, conn, & request. actor_id ) . await ?;
701+ validate_sqlite_actor_for_request ( ctx, conn, & request. actor_id , request. expected_generation )
702+ . await ?;
702703
703704 let actor_db = actor_db ( ctx, conn, request. actor_id . clone ( ) ) . await ?;
704705 let result = actor_db
@@ -733,7 +734,8 @@ async fn handle_sqlite_commit(
733734 request : protocol:: SqliteCommitRequest ,
734735) -> Result < protocol:: SqliteCommitResponse > {
735736 let decode_request_start = Instant :: now ( ) ;
736- validate_sqlite_actor ( ctx, conn, & request. actor_id ) . await ?;
737+ validate_sqlite_actor_for_request ( ctx, conn, & request. actor_id , request. expected_generation )
738+ . await ?;
737739 let decode_request_duration = decode_request_start. elapsed ( ) ;
738740 crate :: metrics:: SQLITE_COMMIT_ENVOY_DISPATCH_DURATION
739741 . observe ( decode_request_duration. as_secs_f64 ( ) ) ;
@@ -862,6 +864,19 @@ async fn validate_sqlite_actor(ctx: &StandaloneCtx, conn: &Conn, actor_id: &str)
862864 Ok ( ( ) )
863865}
864866
867+ async fn validate_sqlite_actor_for_request (
868+ ctx : & StandaloneCtx ,
869+ conn : & Conn ,
870+ actor_id : & str ,
871+ expected_generation : Option < u64 > ,
872+ ) -> Result < ( ) > {
873+ if let Some ( generation) = expected_generation {
874+ validate_remote_sqlite_generation ( ctx, conn, actor_id, generation) . await
875+ } else {
876+ validate_sqlite_actor ( ctx, conn, actor_id) . await
877+ }
878+ }
879+
865880async fn validate_remote_sqlite_generation (
866881 ctx : & StandaloneCtx ,
867882 conn : & Conn ,
@@ -1125,11 +1140,10 @@ fn depot_error(err: &anyhow::Error) -> Option<&SqliteStorageError> {
11251140
11261141fn is_startup_database_miss (
11271142 err : & anyhow:: Error ,
1128- expected_generation : Option < u64 > ,
1143+ _expected_generation : Option < u64 > ,
11291144 expected_head_txid : Option < u64 > ,
11301145) -> bool {
1131- expected_generation. is_none ( )
1132- && expected_head_txid. is_none ( )
1146+ expected_head_txid. is_none ( )
11331147 && matches ! ( depot_error( err) , Some ( SqliteStorageError :: DatabaseNotFound ) )
11341148}
11351149
0 commit comments