Phase 4: Atomic operations and stress testing (bd-114, bd-110)
Completes daemon architecture implementation: Features: - Batch/transaction API (OpBatch) for multi-step atomic operations - Request timeout and cancellation support (30s default, configurable) - Comprehensive stress tests (4-10 concurrent agents, 800-1000 ops) - Performance benchmarks (daemon 2x faster than direct mode) Results: - Zero ID collisions across 1000+ concurrent creates - All acceptance criteria validated for bd-110 - Create: 2.4ms (daemon) vs 4.7ms (direct) - Update/List: similar 2x improvement Tests Added: - TestStressConcurrentAgents (8 agents, 800 creates) - TestStressBatchOperations (4 agents, 400 batch ops) - TestStressMixedOperations (6 agents, mixed read/write) - TestStressNoUniqueConstraintViolations (10 agents, 1000 creates) - BenchmarkDaemonCreate/Update/List/Latency - Fixed flaky TestConcurrentRequests (shared client issue) Files: - internal/rpc/protocol.go - Added OpBatch, BatchArgs, BatchResponse - internal/rpc/server.go - Implemented handleBatch with stop-on-failure - internal/rpc/client.go - Added SetTimeout and Batch methods - internal/rpc/stress_test.go - All stress tests - internal/rpc/bench_test.go - Performance benchmarks - DAEMON_STRESS_TEST.md - Complete documentation Closes bd-114, bd-110 Amp-Thread-ID: https://ampcode.com/threads/T-1c07c140-0420-49fe-add1-b0b83b1bdff5 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -209,7 +209,7 @@ func TestSocketCleanup(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConcurrentRequests(t *testing.T) {
|
||||
_, client, cleanup := setupTestServer(t)
|
||||
server, _, cleanup := setupTestServer(t)
|
||||
defer cleanup()
|
||||
|
||||
done := make(chan bool)
|
||||
@@ -217,6 +217,14 @@ func TestConcurrentRequests(t *testing.T) {
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
go func(n int) {
|
||||
client, err := TryConnect(server.socketPath)
|
||||
if err != nil {
|
||||
errors <- err
|
||||
done <- true
|
||||
return
|
||||
}
|
||||
defer client.Close()
|
||||
|
||||
args := &CreateArgs{
|
||||
Title: "Concurrent Issue",
|
||||
IssueType: "task",
|
||||
|
||||
Reference in New Issue
Block a user