chore: Start Phase 3 Crash Recovery Test execution (A+B parallel)
Phase 3: Crash Recovery Rehearsal (parallel with Phase 1) Added: - tests/PHASE_3_EXECUTION_LOG.md: Real-time execution tracking * 4 crash recovery scenarios logged * Pass/fail criteria defined * Evidence collection planned - tests/PHASE_3_TEST_PROCEDURES.md: Detailed test procedures * Scenario 1: Outbox message loss recovery * Scenario 2: PostgreSQL connection drop recovery * Scenario 3: Hangfire distributed lock timeout (DEBT-015) * Scenario 4: Inbox message processing failure * Step-by-step procedures for each * Evidence capture and verification criteria Execution Strategy (AGENTS.md v16.0): - Parallel execution: 4 scenarios simultaneously - Estimated duration: 15-20 minutes - Prerequisites verified: Host running, SSH tunnel open, Job 893 active - Target: Complete testing before Phase 1 finishes (50-90 days) Current Status: ✅ Phase 1: Job 893 running (22:04 KST) ✅ Phase 1 monitoring: Automated (5-min checks) ✅ Phase 3: READY TO EXECUTE (now) ⏳ Phase 2: Queued (Phase 1 results needed) ⏳ Phase 4: Queued (Phase 2-3 results needed) Next: Execute Phase 3 scenarios (START NOW OR CONFIRM) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
# Phase 3: Crash Recovery Test Execution Log
|
||||
|
||||
**Start Date:** 2026-08-03 22:35 KST
|
||||
**Status:** 🚀 **IN PROGRESS**
|
||||
**Parallel with:** Phase 1 (Job 893 running)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 **Test Scenario 1: Outbox Message Loss**
|
||||
|
||||
### Setup
|
||||
- **Objective:** Verify ShadowRunCompletedConsumer recovery from lost outbox messages
|
||||
- **Method:** Simulate message drop in Outbox table
|
||||
- **Environment:** Host running, Job 893 active
|
||||
|
||||
### Execution
|
||||
```
|
||||
Step 1: Trigger message loss scenario
|
||||
□ Identify current outbox message
|
||||
□ Simulate deletion/loss
|
||||
□ Verify detection
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 2: Monitor recovery
|
||||
□ Watch ShadowRunCompletedConsumer logs
|
||||
□ Check retry mechanism activation
|
||||
□ Verify message re-processing
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 3: Validation
|
||||
□ No state corruption observed
|
||||
□ Message eventually processed
|
||||
□ Logs contain recovery trace
|
||||
Status: ⏳ QUEUED
|
||||
```
|
||||
|
||||
### Result
|
||||
```
|
||||
Status: ⏳ PENDING
|
||||
Evidence: [logs will be captured]
|
||||
Outcome: [ ] PASS [ ] FAIL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 **Test Scenario 2: PostgreSQL Connection Drop**
|
||||
|
||||
### Setup
|
||||
- **Objective:** Verify graceful recovery from database disconnection
|
||||
- **Method:** Simulate connection timeout/reset
|
||||
- **Environment:** SSH tunnel maintained
|
||||
|
||||
### Execution
|
||||
```
|
||||
Step 1: Trigger connection drop
|
||||
□ Monitor connection pool
|
||||
□ Simulate network disconnect
|
||||
□ Trigger reconnection
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 2: Monitor recovery
|
||||
□ Watch connection retry logic
|
||||
□ Check reconnection attempt
|
||||
□ Verify query resumption
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 3: Validation
|
||||
□ No data loss
|
||||
□ No duplicate processing
|
||||
□ Transaction consistency maintained
|
||||
Status: ⏳ QUEUED
|
||||
```
|
||||
|
||||
### Result
|
||||
```
|
||||
Status: ⏳ PENDING
|
||||
Evidence: [logs will be captured]
|
||||
Outcome: [ ] PASS [ ] FAIL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 **Test Scenario 3: Hangfire Lock Timeout**
|
||||
|
||||
### Setup
|
||||
- **Objective:** Verify lock timeout recovery (DEBT-015)
|
||||
- **Method:** Simulate distributed lock contention
|
||||
- **Environment:** Multiple worker simulation
|
||||
|
||||
### Execution
|
||||
```
|
||||
Step 1: Trigger lock timeout
|
||||
□ Create lock contention
|
||||
□ Trigger timeout condition
|
||||
□ Monitor fallback activation
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 2: Monitor recovery
|
||||
□ Verify DEBT-015 fallback mechanism
|
||||
□ Check job continues without blocking
|
||||
□ Verify other workers unaffected
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 3: Validation
|
||||
□ No deadlock observed
|
||||
□ Graceful degradation
|
||||
□ Recovery automatic
|
||||
Status: ⏳ QUEUED
|
||||
```
|
||||
|
||||
### Result
|
||||
```
|
||||
Status: ⏳ PENDING
|
||||
Evidence: [logs will be captured]
|
||||
Outcome: [ ] PASS [ ] FAIL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 **Test Scenario 4: Inbox Message Processing Failure**
|
||||
|
||||
### Setup
|
||||
- **Objective:** Verify consumer resilience to processing failures
|
||||
- **Method:** Simulate deserialization/processing error
|
||||
- **Environment:** ApprovalQueueConsumer or AuditLogConsumer
|
||||
|
||||
### Execution
|
||||
```
|
||||
Step 1: Trigger processing failure
|
||||
□ Inject malformed message
|
||||
□ Trigger deserialization error
|
||||
□ Monitor error handling
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 2: Monitor recovery
|
||||
□ Verify error caught by consumer
|
||||
□ Check DLQ (Dead Letter Queue) movement
|
||||
□ Monitor alert generation
|
||||
Status: ⏳ QUEUED
|
||||
|
||||
Step 3: Validation
|
||||
□ No data loss
|
||||
□ Failure logged with context
|
||||
□ Main pipeline unaffected
|
||||
Status: ⏳ QUEUED
|
||||
```
|
||||
|
||||
### Result
|
||||
```
|
||||
Status: ⏳ PENDING
|
||||
Evidence: [logs will be captured]
|
||||
Outcome: [ ] PASS [ ] FAIL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 **Test Summary**
|
||||
|
||||
| Scenario | Status | Duration | Notes |
|
||||
|----------|--------|----------|-------|
|
||||
| Outbox Message Loss | ⏳ QUEUED | TBD | Recovery detection test |
|
||||
| PostgreSQL Drop | ⏳ QUEUED | TBD | Connection retry test |
|
||||
| Hangfire Lock Timeout | ⏳ QUEUED | TBD | DEBT-015 fallback test |
|
||||
| Inbox Failure | ⏳ QUEUED | TBD | Consumer resilience test |
|
||||
|
||||
**Overall Status:** 🚀 **EXECUTION STARTING**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **Next Steps**
|
||||
|
||||
1. ✅ **Environment verified** (2026-08-03 22:35 KST)
|
||||
2. ⏳ **Scenario 1: Outbox Message Loss** (START NOW)
|
||||
3. ⏳ **Scenario 2: PostgreSQL Drop** (PARALLEL)
|
||||
4. ⏳ **Scenario 3: Hangfire Lock Timeout** (PARALLEL)
|
||||
5. ⏳ **Scenario 4: Inbox Failure** (PARALLEL)
|
||||
6. ⏳ **Evidence compilation** (AFTER ALL SCENARIOS)
|
||||
|
||||
---
|
||||
|
||||
## 📋 **Parallel Execution (A + B)**
|
||||
|
||||
```
|
||||
PHASE 1 (Background):
|
||||
└─ Job 893: Running (50-90 days)
|
||||
└─ Monitor every 5 min (automatic)
|
||||
|
||||
PHASE 3 (Active Now):
|
||||
├─ Scenario 1: Outbox Message Loss
|
||||
├─ Scenario 2: PostgreSQL Drop
|
||||
├─ Scenario 3: Hangfire Lock Timeout
|
||||
└─ Scenario 4: Inbox Failure
|
||||
└─ 4 tests running in parallel
|
||||
└─ Duration: 1-2 hours estimated
|
||||
└─ Evidence captured per scenario
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Status:** 🚀 **READY TO BEGIN SCENARIO TESTING**
|
||||
|
||||
Reference in New Issue
Block a user