Repository navigation
Fix long-running memory retention and stalled delivery - #29
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Long-lived Beacon processes could retain historical device identities and metric labels, slow down once durable queues filled, or stall during connector shutdown and MQTT acknowledgments. This change bounds those lifetimes and keeps unconfirmed MQTT delivery pending for retry.
Regression coverage exercises interrupted shutdown, stalled brokers, guarded TLS/WebSocket transports, costly filters, 10,000 device identities, persistent inventory failures, and 2,100 deleted metric identities. The vessel gate now uses a saturated retention window and requires evidence of pruning. Operator docs describe the new limits and metric lifecycle.
Validation:
go test ./... -timeout 300sgo test -race ./... -timeout 300s, plus focused race tests after the final MQTT callback cleanup changego vet ./...,go build ./..., andgolangci-lint run ./...(zero issues)npm test(all 7 browser tests)govulncheck ./...(no affected vulnerabilities) andgosec -quiet -exclude-generated -exclude-dir=.claude ./...bash -n scripts/vessel-release-gate.shandgit diff --checkThe Linux CGO-disabled build and vessel RSS/FD/recovery gate run in CI; the local workspace is macOS. MQTT remains at least once: a timed-out acknowledgment can cause a duplicate after broker acceptance. Filters that exceed the new budgets report evaluation errors, and deleting/recreating an entity resets its metric totals.