@@ -133,89 +133,52 @@ let no_commands_after ~postgres_uri ~fork_state_hash ~fork_slot () =
133133 in
134134 Deferred. return [ check_result ]
135135
136- let verify_upgrade ~postgres_uri ~version () =
136+ let verify_upgrade ~postgres_uri ~expected_protocol_version
137+ ~expected_migration_version () =
137138 let open Deferred.Let_syntax in
138- let results = ref [] in
139139 let % bind pool = connect postgres_uri in
140140 let query_db = Mina_caqti. query pool in
141- let % bind res =
142- query_db ~f: (Sql.SchemaVerification. fetch_schema_row ~version )
143- in
144- let % bind missing_cols_zkapp_states =
145- query_db
146- ~f: (Sql.SchemaVerification. fetch_missing_cols ~table: " zkapp_states" )
147- in
148- let % bind missing_cols_zkapp_states_nullable =
149- query_db
150- ~f:
151- (Sql.SchemaVerification. fetch_missing_cols
152- ~table: " zkapp_states_nullable" )
153- in
154-
155- let % bind () =
156- match res with
157- | None ->
158- results :=
141+ let % map res = query_db ~f: Sql. fetch_latest_migration_history in
142+ match res with
143+ | Some (status , protocol_version , migration_version ) -> (
144+ let results = Queue. create () in
145+ if String. (status <> " applied" ) then
146+ Queue. enqueue results
159147 { id = " 4.S"
160- ; name = " Schema migration status"
148+ ; name = " Schema migration"
149+ ; result = Failure (sprintf " Latest migration has status %s" status)
150+ } ;
151+ if String. (protocol_version <> expected_protocol_version) then
152+ Queue. enqueue results
153+ { id = " 4.S"
154+ ; name = " Schema migration"
161155 ; result =
162156 Failure
163- (sprintf " No schema migration found for version %s" version)
164- }
165- :: ! results ;
166- Deferred. return ()
167- | Some status ->
168- let expected = " applied" in
169- let result =
170- if String. equal status expected then Success
171- else
172- Failure
173- (sprintf
174- " Expected schema migration with version %s to be \" %s\" \
175- however got status %s"
176- version expected status )
177- in
178- results :=
179- { id = " 4.S" ; name = " Schema migration status" ; result } :: ! results ;
180- Deferred. return ()
181- in
182-
183- let % bind () =
184- let result =
185- if Int. ( = ) missing_cols_zkapp_states 0 then Success
186- else
187- Failure
188- (sprintf
189- " Missing columns for zkapp_states detected during upgrade \
190- verification: %d"
191- missing_cols_zkapp_states )
192- in
193- results :=
194- { id = " 5.M" ; name = " Missing columns check [zkapp_states]" ; result }
195- :: ! results ;
196- Deferred. return ()
197- in
198-
199- let % bind () =
200- let result =
201- if Int. ( = ) missing_cols_zkapp_states_nullable 0 then Success
202- else
203- Failure
204- (sprintf
205- " Missing columns for zkapp_states_nullable detected during \
206- upgrade verification: %d"
207- missing_cols_zkapp_states_nullable )
208- in
209- results :=
210- { id = " 6.M"
211- ; name = " Missing columns check [zkapp_states_nullable]"
212- ; result
213- }
214- :: ! results ;
215- Deferred. return ()
216- in
217-
218- Deferred. return ! results
157+ (sprintf
158+ " Latest protool version mismatch: actual %s vs expected %s"
159+ protocol_version expected_protocol_version )
160+ } ;
161+ if String. (migration_version <> expected_migration_version) then
162+ Queue. enqueue results
163+ { id = " 4.S"
164+ ; name = " Schema migration"
165+ ; result =
166+ Failure
167+ (sprintf
168+ " Latest migration version mismatch: actual %s vs expected %s"
169+ migration_version expected_protocol_version )
170+ } ;
171+ match Queue. to_list results with
172+ | [] ->
173+ [ { id = " 4.S" ; name = " Schema migration" ; result = Success } ]
174+ | _ :: _ as results ->
175+ results )
176+ | None ->
177+ [ { id = " 4.S"
178+ ; name = " Schema migration"
179+ ; result = Failure " Can't find latest migration record"
180+ }
181+ ]
219182
220183let validate_fork ~postgres_uri ~fork_state_hash ~fork_slot () =
221184 let open Deferred.Let_syntax in
0 commit comments