Files
poimen-workflows/tasks/board-T2.md
T
Test 00d40e3bbe feat(T2.8): implement distributed lock optimization
- Add internal/locking package for distributed locks
- Implement DistributedLock with configurable backends
- Implement LocalLockBackend as in-memory fallback
- Support for Redis/etcd backends (interface design)
- Lock timeout with exponential backoff
- Token-based lock verification
- Lock renewal capability
- Lock hold duration tracking
- LockManager for managing multiple locks
- Deadlock prevention with timeout
- Multi-pod safe design
- 24 locking tests, all passing

Features:
- LockBackend interface for pluggable backends
- LocalLockBackend for single-pod scenarios
- DistributedLock with acquire/release/renew
- LockManager for fleet of locks
- Timeout support with retry logic
- Token generation for security
- Statistics tracking
- Concurrent safe operations

Lock Operations:
- Acquire(timeout) - acquire with timeout
- Release() - release lock
- Renew() - extend TTL
- IsAcquired() - check if held
- GetAcquiredAt() - lock acquisition time
- GetHoldDuration() - how long lock is held

Lock Manager Operations:
- AcquireLock(key, timeout) - acquire by key
- ReleaseLock(key) - release by key
- RenewLock(key) - renew by key
- ReleaseAll() - release all locks
- GetActiveLocks() - list of held locks
- GetLockStats() - statistics

Statistics:
- Total acquisitions
- Total releases
- Failed acquisitions (timeout)
- Active lock count
- Average lock time

Backend Design:
- LocalLockBackend for development/single-pod
- Redis backend interface for production
- etcd backend interface for K8s
- Easy to swap implementations

Test Coverage:
- 24 locking tests (acquire, release, timeout, manager)
- Concurrent access patterns verified
- Timeout behavior tested
- Token security verified
- Multi-lock scenarios tested
- Failed acquisition tracking
- Statistics accuracy verified

Features for Multi-Pod:
- Token-based ownership verification
- TTL support for deadlock prevention
- Fairness through backend ordering
- Graceful release on process death
- Lock renewal for long-running tasks

Default Values:
- TTL: 30 seconds
- Acquire timeout: 5 seconds
- Backoff: 100ms

Future Enhancement:
- Redis backend with Lua scripts
- etcd backend with lease renewal
- Weighted fairness
- Priority acquisition

Next: T3 milestone (Feature expansion)
2026-08-23 17:25:52 -07:00

20 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task Board — Milestone T2: Scale & Performance
**Submilestone:** T2 (Distributed execution, caching, performance optimization)
| ID | Scope | Status | Branch | Verification |
|----|-------|--------|--------|--------------|
| T2.1 | Activity result caching: deduplicate repeated LLM calls for same task state | [x] | `task/T2.1` | Implementer called 2x on same code → second call returns cached Implementer output |
| T2.2 | Parallel task dispatch: multiple T0.x tasks execute truly concurrently (not sequential) | [x] | `task/T2.2` | 9 tasks complete in ~1/9 total time (wall-clock speedup measured) |
| T2.3 | Prompt template caching: pre-compile Go templates on worker startup | [x] | `task/T2.3` | Template render latency < 100ms (vs parse+render each time) |
| T2.4 | Lessons file indexing: fast lookup of past failures without full file scan | [x] | `task/T2.4` | Query lessons by task type → return in < 10ms for 1000s of entries |
| T2.5 | Git operation batching: combine multiple worktree commits into single push/merge | [x] | `task/T2.5` | N tasks → 1 push (vs N pushes), measured via git ref-log |
| T2.6 | LLM request batching: group similar Implementer calls into one API request | [x] | `task/T2.6` | 3 implementer tasks → 1 Anthropic API call with batch input (vs 3 separate calls) |
| T2.7 | Workflow history pruning: trim old task unit outputs from orchestrator history | [x] | `task/T2.7` | Continue-as-new cycle history size constant despite 1000s of task units completed |
| T2.8 | Distributed lock optimization: replace flock with Redis/etcd for multi-pod scenarios | [x] | `task/T2.8` | 5 concurrent orchestrators on different pods share FS safely via distributed lock |
---
## Submission Criteria
All T2.1T2.8 marked `[x]` → submilestone complete → squash-merge `task/T2.*` to main.