From a753cf7a9942fb9bf321766b5c860914a7b89cfd Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 22 Jul 2026 18:17:03 +0800 Subject: [PATCH] docs(signoz): bind exact toolchain deployment --- ...rganization-canonical-route-migration.yaml | 2 +- .../p0-obs-002-post-closure-regression.yaml | 36 +++++++- .../signoz-canonical-route-preflight.py | 88 +++++++++++-------- .../test_signoz_canonical_route_migration.py | 65 ++++++++------ 4 files changed, 121 insertions(+), 70 deletions(-) diff --git a/ops/signoz/organization-canonical-route-migration.yaml b/ops/signoz/organization-canonical-route-migration.yaml index 82422778a..d0c37435c 100644 --- a/ops/signoz/organization-canonical-route-migration.yaml +++ b/ops/signoz/organization-canonical-route-migration.yaml @@ -202,7 +202,7 @@ runtime_observations: clickhouse_native_failed_artifact_retention_status: pending_bounded_retention_decision clickhouse_native_resume_inventory_status: pending_durable_submitted_inventory_contract signoz_sqlite_application_consistent_backup_status: pending - signoz_metadata_export_source_contract_status: source_candidate_pending_deployment + signoz_metadata_export_source_contract_status: deployed_inactive_verified signoz_metadata_export_policy: config/signoz/metadata-export-policy.json signoz_metadata_exporter: scripts/backup/signoz-metadata-export.py signoz_metadata_export_verifier: scripts/backup/verify-signoz-metadata-export.py diff --git a/ops/signoz/p0-obs-002-post-closure-regression.yaml b/ops/signoz/p0-obs-002-post-closure-regression.yaml index 044e742e5..11c19cc3e 100644 --- a/ops/signoz/p0-obs-002-post-closure-regression.yaml +++ b/ops/signoz/p0-obs-002-post-closure-regression.yaml @@ -760,7 +760,7 @@ pending_verifiers: status: pending_supported_non_raw_export_or_coordinated_snapshot raw_sqlite_read_or_sync_allowed: false sqlite_cli_present_in_runtime: false - source_contract_status: source_candidate_pending_deployment + source_contract_status: deployed_inactive_verified source_contract: policy: config/signoz/metadata-export-policy.json exporter: scripts/backup/signoz-metadata-export.py @@ -781,17 +781,45 @@ pending_verifiers: controlled_deployer_sha256: e4183d1461fdce66af351d8bdcfe0626c3a240edd81eaee1d179498719f1cde0 deployer_tests_sha256: 4b4b8185fc456d6cbe4ab56affdfa919bf48b4cd6f330cdf7bf413451d331209 test_terminal: 24_passed - candidate_deployment: - status: pending_exact_check_apply_postcheck + deployment: + status: deployed_inactive_verified asset_id: host110-signoz-metadata-toolchain target_host: 192.168.0.110 target_root: /backup/toolchains/signoz-metadata bundle_id: 337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e target_path: /backup/toolchains/signoz-metadata/337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e + exact_source_revision: dd54c35667a9c490b972b16f9c78890c3565a52d + directory_owner: root:root + directory_mode: "0750" active_pointer_present: false runtime_export_executed: false + raw_sqlite_read: false + raw_volume_read: false + check: + run_id: P0-OBS-002-signoz-toolchain-check-20260722T181300P0800 + terminal: check_pass_no_write + remote_state: absent + drift_count: 0 + active_pointer_present: false + bounded_execution: + run_id: P0-OBS-002-signoz-toolchain-apply-20260722T181400P0800 + terminal: pass_source_deployed_inactive + independent_post_verifier: pass + active_pointer_present: false + runtime_export_executed: false + independent_postcheck: + run_id: P0-OBS-002-signoz-toolchain-postcheck-20260722T181500P0800 + terminal: check_pass_no_write + remote_state: exact + drift_count: 0 + active_pointer_present: false + windows99_staging_cleanup: + terminal: pass + residue_count: 0 + learning_writeback: partial_degraded + remaining_blocker: authenticated_export_restore_zero_residue_pending completion_claim: false - deployment: + historical_deployment: status: deployed_inactive_verified asset_id: host110-signoz-metadata-toolchain target_host: 192.168.0.110 diff --git a/scripts/reboot-recovery/signoz-canonical-route-preflight.py b/scripts/reboot-recovery/signoz-canonical-route-preflight.py index 7c17ec555..fa35689fa 100644 --- a/scripts/reboot-recovery/signoz-canonical-route-preflight.py +++ b/scripts/reboot-recovery/signoz-canonical-route-preflight.py @@ -858,10 +858,10 @@ def evaluate(root: Path, contract_path: Path) -> dict[str, Any]: "signoz_sqlite_application_consistent_backup", {} ) metadata_export_source_contract = sqlite_backup.get("source_contract", {}) - metadata_candidate_deployment = metadata_export_source_contract.get( - "candidate_deployment", {} - ) metadata_deployment = metadata_export_source_contract.get("deployment", {}) + metadata_historical_deployment = metadata_export_source_contract.get( + "historical_deployment", {} + ) declared_metadata_export_hashes = metadata_export_source_contract.get("hashes", {}) actual_metadata_export_hashes = _current_metadata_export_source_hashes(root) checks["signoz_metadata_export_source_hashes_bound"] = ( @@ -892,8 +892,7 @@ def evaluate(root: Path, contract_path: Path) -> dict[str, Any]: == "pending_supported_non_raw_export_or_coordinated_snapshot" and sqlite_backup.get("raw_sqlite_read_or_sync_allowed") is False and sqlite_backup.get("sqlite_cli_present_in_runtime") is False - and sqlite_backup.get("source_contract_status") - == "source_candidate_pending_deployment" + and sqlite_backup.get("source_contract_status") == "deployed_inactive_verified" and metadata_export_source_contract.get("policy") == "config/signoz/metadata-export-policy.json" and metadata_export_source_contract.get("exporter") @@ -906,54 +905,69 @@ def evaluate(root: Path, contract_path: Path) -> dict[str, Any]: and metadata_export_source_contract.get("raw_volume_read") is False and metadata_export_source_contract.get("secret_value_persistence") is False and metadata_export_source_contract.get("full_sqlite_completion_claim") is False - and metadata_candidate_deployment.get("status") - == "pending_exact_check_apply_postcheck" - and metadata_candidate_deployment.get("asset_id") - == "host110-signoz-metadata-toolchain" - and metadata_candidate_deployment.get("target_host") == "192.168.0.110" - and metadata_candidate_deployment.get("bundle_id") - == "337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e" - and metadata_candidate_deployment.get("target_path") - == "/backup/toolchains/signoz-metadata/337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e" - and metadata_candidate_deployment.get("active_pointer_present") is False - and metadata_candidate_deployment.get("runtime_export_executed") is False - and metadata_candidate_deployment.get("completion_claim") is False and metadata_deployment.get("status") == "deployed_inactive_verified" and metadata_deployment.get("asset_id") == "host110-signoz-metadata-toolchain" and metadata_deployment.get("target_host") == "192.168.0.110" and metadata_deployment.get("bundle_id") - == "bb6d78b67f506072b2e45e92bc1d415364e25852282a9b068900665c578df011" + == "337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e" + and metadata_deployment.get("exact_source_revision") + == "dd54c35667a9c490b972b16f9c78890c3565a52d" and metadata_deployment.get("directory_owner") == "root:root" and metadata_deployment.get("directory_mode") == "0750" and metadata_deployment.get("active_pointer_present") is False and metadata_deployment.get("runtime_export_executed") is False and metadata_deployment.get("raw_sqlite_read") is False and metadata_deployment.get("raw_volume_read") is False - and metadata_deployment.get("initial_failed_attempt", {}).get("terminal") - == "failed_no_active_pointer_write" - and metadata_deployment.get("bounded_execution", {}).get( - "durable_inner_terminal" - ) - == "pass_source_deployed_inactive" - and metadata_deployment.get("bounded_execution", {}).get("outer_terminal") - == "failed_source_deploy_unverified" - and metadata_deployment.get("independent_root_postcheck", {}).get("terminal") + and metadata_deployment.get("check", {}).get("run_id") + == "P0-OBS-002-signoz-toolchain-check-20260722T181300P0800" + and metadata_deployment.get("check", {}).get("terminal") == "check_pass_no_write" - and metadata_deployment.get("independent_root_postcheck", {}).get( - "remote_state" - ) - == "exact" - and metadata_deployment.get("independent_root_postcheck", {}).get("drift_count") - == 0 - and metadata_deployment.get("idempotent_closure", {}).get("execution_terminal") - == "idempotent_no_write" - and metadata_deployment.get("idempotent_closure", {}).get("terminal") + and metadata_deployment.get("check", {}).get("remote_state") == "absent" + and metadata_deployment.get("check", {}).get("drift_count") == 0 + and metadata_deployment.get("bounded_execution", {}).get("run_id") + == "P0-OBS-002-signoz-toolchain-apply-20260722T181400P0800" + and metadata_deployment.get("bounded_execution", {}).get("terminal") == "pass_source_deployed_inactive" - and metadata_deployment.get("idempotent_closure", {}).get( + and metadata_deployment.get("bounded_execution", {}).get( "independent_post_verifier" ) == "pass" + and metadata_deployment.get("independent_postcheck", {}).get("run_id") + == "P0-OBS-002-signoz-toolchain-postcheck-20260722T181500P0800" + and metadata_deployment.get("independent_postcheck", {}).get("terminal") + == "check_pass_no_write" + and metadata_deployment.get("independent_postcheck", {}).get("remote_state") + == "exact" + and metadata_deployment.get("independent_postcheck", {}).get("drift_count") + == 0 + and metadata_deployment.get("windows99_staging_cleanup", {}).get("terminal") + == "pass" + and metadata_deployment.get("windows99_staging_cleanup", {}).get( + "residue_count" + ) + == 0 and metadata_deployment.get("learning_writeback") == "partial_degraded" + and metadata_deployment.get("completion_claim") is False + and metadata_historical_deployment.get("status") + == "deployed_inactive_verified" + and metadata_historical_deployment.get("bundle_id") + == "bb6d78b67f506072b2e45e92bc1d415364e25852282a9b068900665c578df011" + and metadata_historical_deployment.get("initial_failed_attempt", {}).get( + "terminal" + ) + == "failed_no_active_pointer_write" + and metadata_historical_deployment.get("bounded_execution", {}).get( + "durable_inner_terminal" + ) + == "pass_source_deployed_inactive" + and metadata_historical_deployment.get("independent_root_postcheck", {}).get( + "remote_state" + ) + == "exact" + and metadata_historical_deployment.get("idempotent_closure", {}).get( + "execution_terminal" + ) + == "idempotent_no_write" and sqlite_backup.get("runtime_export_terminal") == "pending_authenticated_stable_export" and sqlite_backup.get("runtime_restore_terminal") diff --git a/scripts/reboot-recovery/tests/test_signoz_canonical_route_migration.py b/scripts/reboot-recovery/tests/test_signoz_canonical_route_migration.py index 141a7de5f..84d3e3605 100644 --- a/scripts/reboot-recovery/tests/test_signoz_canonical_route_migration.py +++ b/scripts/reboot-recovery/tests/test_signoz_canonical_route_migration.py @@ -834,9 +834,7 @@ def test_post_release_verifier_and_native_backup_close_with_remaining_gaps() -> ] assert sqlite_pending["raw_sqlite_read_or_sync_allowed"] is False assert sqlite_pending["sqlite_cli_present_in_runtime"] is False - assert sqlite_pending["source_contract_status"] == ( - "source_candidate_pending_deployment" - ) + assert sqlite_pending["source_contract_status"] == "deployed_inactive_verified" source_contract = sqlite_pending["source_contract"] assert source_contract["policy"] == "config/signoz/metadata-export-policy.json" assert source_contract["exporter"] == ("scripts/backup/signoz-metadata-export.py") @@ -878,49 +876,60 @@ def test_post_release_verifier_and_native_backup_close_with_remaining_gaps() -> for field, relative in metadata_paths.items() } assert source_contract["test_terminal"] == "24_passed" - candidate = source_contract["candidate_deployment"] - assert candidate["status"] == "pending_exact_check_apply_postcheck" - assert candidate["asset_id"] == "host110-signoz-metadata-toolchain" - assert candidate["target_host"] == "192.168.0.110" - assert candidate["bundle_id"] == ( - "337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e" - ) - assert candidate["active_pointer_present"] is False - assert candidate["runtime_export_executed"] is False - assert candidate["completion_claim"] is False deployment = source_contract["deployment"] assert deployment["status"] == "deployed_inactive_verified" assert deployment["asset_id"] == "host110-signoz-metadata-toolchain" assert deployment["target_host"] == "192.168.0.110" assert deployment["bundle_id"] == ( - "bb6d78b67f506072b2e45e92bc1d415364e25852282a9b068900665c578df011" + "337b5f86921d9b0af1a49e3bfe3e16c6a359f8fdfa1521c9dcbf230582ec286e" + ) + assert deployment["exact_source_revision"] == ( + "dd54c35667a9c490b972b16f9c78890c3565a52d" ) assert deployment["directory_owner"] == "root:root" assert deployment["directory_mode"] == "0750" assert deployment["active_pointer_present"] is False assert deployment["runtime_export_executed"] is False - assert deployment["initial_failed_attempt"]["terminal"] == ( - "failed_no_active_pointer_write" + assert deployment["check"]["run_id"] == ( + "P0-OBS-002-signoz-toolchain-check-20260722T181300P0800" ) - assert deployment["bounded_execution"]["durable_inner_terminal"] == ( + assert deployment["check"]["terminal"] == "check_pass_no_write" + assert deployment["check"]["remote_state"] == "absent" + assert deployment["check"]["drift_count"] == 0 + assert deployment["bounded_execution"]["run_id"] == ( + "P0-OBS-002-signoz-toolchain-apply-20260722T181400P0800" + ) + assert deployment["bounded_execution"]["terminal"] == ( "pass_source_deployed_inactive" ) - assert deployment["bounded_execution"]["outer_terminal"] == ( - "failed_source_deploy_unverified" + assert deployment["bounded_execution"]["independent_post_verifier"] == "pass" + assert deployment["independent_postcheck"]["run_id"] == ( + "P0-OBS-002-signoz-toolchain-postcheck-20260722T181500P0800" ) - assert deployment["independent_root_postcheck"]["terminal"] == ( + assert deployment["independent_postcheck"]["terminal"] == ( "check_pass_no_write" ) - assert deployment["independent_root_postcheck"]["remote_state"] == "exact" - assert deployment["independent_root_postcheck"]["drift_count"] == 0 - assert deployment["idempotent_closure"]["execution_terminal"] == ( - "idempotent_no_write" + assert deployment["independent_postcheck"]["remote_state"] == "exact" + assert deployment["independent_postcheck"]["drift_count"] == 0 + assert deployment["windows99_staging_cleanup"]["terminal"] == "pass" + assert deployment["windows99_staging_cleanup"]["residue_count"] == 0 + assert deployment["learning_writeback"] == "partial_degraded" + assert deployment["completion_claim"] is False + historical = source_contract["historical_deployment"] + assert historical["status"] == "deployed_inactive_verified" + assert historical["bundle_id"] == ( + "bb6d78b67f506072b2e45e92bc1d415364e25852282a9b068900665c578df011" ) - assert deployment["idempotent_closure"]["terminal"] == ( + assert historical["initial_failed_attempt"]["terminal"] == ( + "failed_no_active_pointer_write" + ) + assert historical["bounded_execution"]["durable_inner_terminal"] == ( "pass_source_deployed_inactive" ) - assert deployment["idempotent_closure"]["independent_post_verifier"] == "pass" - assert deployment["learning_writeback"] == "partial_degraded" + assert historical["independent_root_postcheck"]["remote_state"] == "exact" + assert historical["idempotent_closure"]["execution_terminal"] == ( + "idempotent_no_write" + ) assert source_contract["raw_sqlite_read"] is False assert source_contract["raw_volume_read"] is False assert source_contract["secret_value_persistence"] is False @@ -1106,7 +1115,7 @@ def test_post_closure_contract_mirror_and_program_blockers_are_consistent() -> N post_closure["signoz_sqlite_application_consistent_backup_status"] == "pending" ) assert post_closure["signoz_metadata_export_source_contract_status"] == ( - "source_candidate_pending_deployment" + "deployed_inactive_verified" ) assert post_closure["signoz_metadata_export_policy"] == ( "config/signoz/metadata-export-policy.json"