mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-08-04 13:23:28 +00:00
Follow-up to the 2026-07-17 live docker-update exercise where a DiskUsage roundtrip against a colima daemon parked 6+ minutes even though dockerCallWithRetry wraps every call in a 20s context.WithTimeout. Investigation result: context deadline propagation through moby client v0.5.0 (request.go, API-version negotiation) and the otelhttp transport wrapper is intact. Reproducing with a deliberately hung unix-socket daemon aborts DiskUsage at the deadline in both hang shapes (pre-header and mid-body), so there is no client-library bug to fix or file upstream; the production stall's root cause remains environmental (deadline timer never fired process-side). Containment and diagnosis: - buildReport now runs under dockerCollectCycleTimeout (5m) so a wedged cycle can never stall the module indefinitely, plus an independent watchdog timer that logs an error with a full goroutine dump if the cycle outlives even that deadline - capturing exactly the evidence that was missing from the original incident. - hung_daemon_deadline_test.go pins that a context deadline aborts the real moby client against a hung unix-socket daemon (pre-header and mid-body stalls), guarding future moby/otelhttp upgrades. The incident note referenced a dockerCollectCycleTimeout watchdog as already added; it did not exist on any branch - this commit is that containment, landed for real. Contract-Neutral: dockeragent collect-cycle watchdog containment: timeout plumbing only, no collection-semantics or contract-surface delta |
||
|---|---|---|
| .. | ||
| agent.go | ||
| agent_collect_test.go | ||
| agent_concurrency_test.go | ||
| agent_cpu_test.go | ||
| agent_flow_test.go | ||
| agent_flushbuffer_test.go | ||
| agent_http_test.go | ||
| agent_image_digest_test.go | ||
| agent_integration_test.go | ||
| agent_internal_test.go | ||
| agent_log_test.go | ||
| agent_report_coverage_test.go | ||
| cleanup.go | ||
| cleanup_coverage_test.go | ||
| collect.go | ||
| container_update.go | ||
| container_update_test.go | ||
| container_update_typed.go | ||
| deps.go | ||
| deps_coverage_test.go | ||
| docker_client.go | ||
| env_mask_test.go | ||
| hardening.go | ||
| hardening_test.go | ||
| http_limits.go | ||
| hung_daemon_deadline_test.go | ||
| image_ref_test.go | ||
| registry.go | ||
| registry_coverage_test.go | ||
| registry_http_test.go | ||
| registry_manifest_test.go | ||
| registry_test.go | ||
| runtime_coverage_test.go | ||
| self_update.go | ||
| self_update_test.go | ||
| signature.go | ||
| signature_test.go | ||
| swarm.go | ||
| swarm_coverage_test.go | ||
| swarm_test.go | ||
| system.go | ||
| system_coverage_test.go | ||
| systemd_test.go | ||
| test_helpers_test.go | ||
| update_all.go | ||
| version.go | ||