mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-21 17:55:30 +01:00
fix: repair execution status when it inconsistent (#17128)
Add migrations sql to repair the execution status when it does not consistent with task status. Closes: #17114 Signed-off-by: chlins <chenyuzh@vmware.com>
This commit is contained in:
parent
1a1ce634cc
commit
41d10d571c
28
make/migrations/postgresql/0082_2.5.3_schema.up.sql
Normal file
28
make/migrations/postgresql/0082_2.5.3_schema.up.sql
Normal file
@ -0,0 +1,28 @@
|
||||
/* repair execution status */
|
||||
DO $$
|
||||
DECLARE
|
||||
exec RECORD;
|
||||
status_group RECORD;
|
||||
status_count int;
|
||||
final_status varchar(32);
|
||||
BEGIN
|
||||
/* iterate all executions */
|
||||
FOR exec IN SELECT * FROM execution WHERE status='Running'
|
||||
LOOP
|
||||
/* identify incorrect execution status, group tasks belong it by status */
|
||||
status_count = 0;
|
||||
final_status = '';
|
||||
FOR status_group IN SELECT status FROM task WHERE execution_id=exec.id GROUP BY status
|
||||
/* loop here to ensure all the tasks belong to the execution are success */
|
||||
LOOP
|
||||
status_count = status_count + 1;
|
||||
final_status = status_group.status;
|
||||
END LOOP;
|
||||
/* update status and end_time when the tasks are all
|
||||
success but itself status is not success */
|
||||
IF status_count=1 AND final_status='Success' THEN
|
||||
UPDATE execution SET status='Success', revision=revision+1 WHERE id=exec.id;
|
||||
UPDATE execution SET end_time=(SELECT MAX(end_time) FROM task WHERE execution_id=exec.id) WHERE id=exec.id;
|
||||
END IF;
|
||||
END LOOP;
|
||||
END $$;
|
@ -22,3 +22,32 @@ CREATE INDEX IF NOT EXISTS idx_artifact_repository_name ON artifact (repository_
|
||||
CREATE INDEX IF NOT EXISTS idx_execution_vendor_type_vendor_id ON execution (vendor_type, vendor_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_execution_start_time ON execution(start_time);
|
||||
CREATE INDEX IF NOT EXISTS idx_audit_log_project_id_optime ON audit_log (project_id, op_time);
|
||||
|
||||
/* repair execution status */
|
||||
DO $$
|
||||
DECLARE
|
||||
exec RECORD;
|
||||
status_group RECORD;
|
||||
status_count int;
|
||||
final_status varchar(32);
|
||||
BEGIN
|
||||
/* iterate all executions */
|
||||
FOR exec IN SELECT * FROM execution WHERE status='Running'
|
||||
LOOP
|
||||
/* identify incorrect execution status, group tasks belong it by status */
|
||||
status_count = 0;
|
||||
final_status = '';
|
||||
FOR status_group IN SELECT status FROM task WHERE execution_id=exec.id GROUP BY status
|
||||
/* loop here to ensure all the tasks belong to the execution are success */
|
||||
LOOP
|
||||
status_count = status_count + 1;
|
||||
final_status = status_group.status;
|
||||
END LOOP;
|
||||
/* update status and end_time when the tasks are all
|
||||
success but itself status is not success */
|
||||
IF status_count=1 AND final_status='Success' THEN
|
||||
UPDATE execution SET status='Success', revision=revision+1 WHERE id=exec.id;
|
||||
UPDATE execution SET end_time=(SELECT MAX(end_time) FROM task WHERE execution_id=exec.id) WHERE id=exec.id;
|
||||
END IF;
|
||||
END LOOP;
|
||||
END $$;
|
Loading…
Reference in New Issue
Block a user