fix(db): bound automation log truth-chain lookups
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schema_version": "awoooi_host_cpu_pressure_drain_readback_v1",
|
||||
"generated_at": "2026-07-01T08:50:00+08:00",
|
||||
"status": "partial_188_bounded_source_fix_ready_110_control_path_blocked",
|
||||
"generated_at": "2026-07-01T08:59:00+08:00",
|
||||
"status": "partial_188_cpu_recovered_with_temporary_db_circuit_breaker_110_control_path_blocked",
|
||||
"scope": {
|
||||
"hosts": ["188", "110"],
|
||||
"incident_family": "post_reboot_host_cpu_pressure",
|
||||
@@ -39,10 +39,18 @@
|
||||
{
|
||||
"host": "188",
|
||||
"target_selector": "awoooi PostgreSQL role sessions from 192.168.0.120 running old awooop_conversation_event OR lookup",
|
||||
"action": "set max_parallel_workers_per_gather=0, statement_timeout=1500ms, and enable_seqscan=off for role; cancel active old OR queries and terminate 192.168.0.120 app DB sessions so new sessions inherit the bound",
|
||||
"action": "set max_parallel_workers_per_gather=0, statement_timeout=750ms, enable_seqscan=off, and CONNECTION LIMIT 2 for role; cancel active queries and terminate 192.168.0.120 app DB sessions so new sessions inherit the bound",
|
||||
"reason": "the live 120 API was still repeatedly issuing the pre-fix OR query and spawning parallel workers after index apply",
|
||||
"rollback": "ALTER ROLE awoooi RESET max_parallel_workers_per_gather; ALTER ROLE awoooi RESET statement_timeout; ALTER ROLE awoooi RESET enable_seqscan; then let the app reconnect after source split deploys",
|
||||
"post_apply_readback": "rolconfig shows max_parallel_workers_per_gather=0, statement_timeout=1500ms, enable_seqscan=off; local parallel workers for the old query stayed 0 and k3s-postgres-recovery dropped to 173.33 percent"
|
||||
"rollback": "ALTER ROLE awoooi RESET max_parallel_workers_per_gather; ALTER ROLE awoooi RESET statement_timeout; ALTER ROLE awoooi RESET enable_seqscan; ALTER ROLE awoooi CONNECTION LIMIT -1; then let the app reconnect after source split deploys",
|
||||
"post_apply_readback": "rolconfig shows max_parallel_workers_per_gather=0, statement_timeout=750ms, enable_seqscan=off, rolconnlimit=2; old OR, automation_operation_log, and local parallel worker counts dropped to 0; k3s-postgres-recovery dropped to 0.98 percent"
|
||||
},
|
||||
{
|
||||
"host": "188",
|
||||
"target_selector": "automation_operation_log truth-chain hot path indexes",
|
||||
"action": "CREATE INDEX CONCURRENTLY IF NOT EXISTS for incident_id::text, input::text trigram, and output::text trigram",
|
||||
"reason": "truth-chain shifted CPU pressure from conversation_event to automation_operation_log after the first circuit breaker",
|
||||
"rollback": "DROP INDEX CONCURRENTLY IF EXISTS idx_automation_operation_log_output_text_trgm; DROP INDEX CONCURRENTLY IF EXISTS idx_automation_operation_log_input_text_trgm; DROP INDEX CONCURRENTLY IF EXISTS idx_automation_operation_log_incident_text;",
|
||||
"post_apply_readback": "all three indexes read back indisvalid=true and indisready=true"
|
||||
}
|
||||
],
|
||||
"source_fixes": [
|
||||
@@ -65,6 +73,11 @@
|
||||
"path": "apps/api/migrations/awooop_conversation_event_content_preview_trgm_2026-07-01.sql",
|
||||
"change": "add bounded pg_trgm / btree_gin indexes for content_preview fallback lookup",
|
||||
"evidence": "live verifier read back both trigram indexes as valid and ready"
|
||||
},
|
||||
{
|
||||
"path": "apps/api/migrations/automation_operation_log_truth_chain_hot_path_indexes_2026-07-01.sql",
|
||||
"change": "add automation_operation_log expression/trigram indexes for truth-chain incident/input/output lookups",
|
||||
"evidence": "live verifier read back incident_text, input_text_trgm, and output_text_trgm indexes as valid and ready"
|
||||
}
|
||||
],
|
||||
"readback": {
|
||||
@@ -84,11 +97,13 @@
|
||||
"docker_stats_textfile_k3s_postgres_recovery_cores": "0.406900"
|
||||
},
|
||||
"post_bounded_db_mitigation_signals": {
|
||||
"awoooi_role_config": "max_parallel_workers_per_gather=0, statement_timeout=1500ms, enable_seqscan=off",
|
||||
"active_old_or_queries": "3",
|
||||
"awoooi_role_connection_limit": "2",
|
||||
"awoooi_role_config": "max_parallel_workers_per_gather=0, statement_timeout=750ms, enable_seqscan=off",
|
||||
"active_old_or_queries": "0",
|
||||
"active_automation_operation_log_queries": "0",
|
||||
"local_parallel_workers_for_old_or_query": "0",
|
||||
"k3s_postgres_recovery_docker_stats_percent": "173.33",
|
||||
"host_load_average": "4.50, 5.79, 7.52",
|
||||
"k3s_postgres_recovery_docker_stats_percent": "0.98",
|
||||
"host_load_average": "3.48, 4.43, 6.10",
|
||||
"remaining_root_cause": "120 live API still runs the pre-fix OR query until the source split is deployed"
|
||||
},
|
||||
"deployment_readback": {
|
||||
@@ -101,9 +116,9 @@
|
||||
"host_110": {
|
||||
"signals": {
|
||||
"load5_initial": "39.14",
|
||||
"load5_latest": "20.14",
|
||||
"load5_per_core_latest": "1.9",
|
||||
"node_procs_running_latest": "39",
|
||||
"load5_latest": "14.57",
|
||||
"load5_per_core_latest": "1.2275",
|
||||
"node_procs_running_latest": "366",
|
||||
"gitea_container_cpu_cores": "3.4019",
|
||||
"ssh_control_path": "timeout",
|
||||
"systemd_dbus_symptom": "systemd-logind pending replies exhausted; systemctl list/show timeout",
|
||||
@@ -123,13 +138,14 @@
|
||||
"pytest": [
|
||||
"scripts/ops/tests/test_systemd_units_textfile_exporter.py: 2 passed",
|
||||
"scripts/ops/tests/test_systemd_units_textfile_exporter.py + ops/runner/test_cd_controlled_runtime_profile.py: 34 passed",
|
||||
"truth-chain source split + content-preview migration focused suite: 7 passed"
|
||||
"truth-chain source split + content-preview migration focused suite: 7 passed",
|
||||
"conversation_event + automation_operation_log hot-path migration tests: 6 passed"
|
||||
],
|
||||
"diff_check": "passed"
|
||||
},
|
||||
"next_actions": [
|
||||
"commit and push the truth-chain source split so 120 stops issuing the old OR query",
|
||||
"after deploy convergence, reset the temporary awoooi role max_parallel_workers_per_gather override",
|
||||
"after deploy convergence, reset the temporary awoooi role max_parallel_workers_per_gather, statement_timeout, enable_seqscan, and connection limit overrides",
|
||||
"apply the systemd exporter source fix to 110 once SSH/control path is available",
|
||||
"continue 110 Gitea queue / awoooi-host controlled lane recovery without generic runner restore"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user