mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 23:41:48 +01:00
Implements comprehensive client-side improvements for production reliability:
1. Context Support with Deadlines:
- Added callWithContext() for context-aware RPC calls
- Respects context deadlines and cancellation
- Prevents goroutine pileup under network issues
2. Exponential Backoff with Jitter:
- Automatic retry with exponential backoff (100ms → 10s)
- ±10% jitter to prevent thundering herd
- Max 3 retries for transient failures
- Smart retry decision based on error classification
3. Error Classification:
- ProxyError type with classification (Transport, Auth, SSH, Sensor, Timeout)
- Retryable vs non-retryable error identification
- Better error messages for debugging
- Structured error handling throughout
4. Improved Connection Handling:
- DialContext for cancellable connections
- Proper deadline propagation
- Clean separation of single-attempt vs retry logic
- Legacy call() method preserved for backwards compatibility
Security Notes:
- SSH fallback already blocked in containers (temperature.go:69-77)
- Per-client token auth not needed after method-level authz (commit d55112ac4)
- ID-mapped root blocked from privileged methods
Performance:
- No retry on non-retryable errors (auth, sensor failures)
- Context cancellation short-circuits retry loops
- Jitter prevents synchronized retry storms
Addresses Codex findings #4 and #5 from security audit.