Conversation
Add `Swarm-Soc-Fields` header to allow clients to request specific SOC fields (address, recoveredpubkey, identifier, signature, wrappedaddress, span, payload) in GSOC WebSocket messages. Add `Swarm-Cache-Wrapped-Chunk` header to enable caching of wrapped chunks on the node. Update GSOC handler to pass full SOC object instead of just payload, enabling access to all chunk properties. Adjust WebSocket buffer sizes to accommodate maximum SOC fields message size.
Add tests for `Swarm-Soc-Fields` header to verify requesting specific SOC fields (identifier, wrappedAddress, payload) and full wrapped chunk data (span + payload). Add test for `Swarm-Cache-Wrapped-Chunk` header to verify wrapped chunks are cached and retrievable. Update test helpers to support custom headers and return storer instance. Update gsoc handler signature to accept full SOC object instead of payload bytes.
gsoc.Handle spawned a goroutine per subscriber handler, so message delivery order to a subscriber was not guaranteed. Call handlers synchronously in registration order instead.
nugaon
force-pushed
the
feat/gsoc-grained-api
branch
from
September 15, 2026 08:31
f8f40ac to
8c0ba37
Compare
nugaon
marked this pull request as ready for review
September 15, 2026 14:11
nugaon
requested review from
acud,
aloknerurkar,
martinconic and
sbackend123
September 15, 2026 14:11
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.
merging #5497 and #5593 PRs into one.
I took out the slow client handling part because the incoming updates frequency are unpredictable.
The feature is still notifying the user in case of piled up messages with warning log.
after the 1st master merge you can see the new code.
The following changes were made by Claude Sonnet 5 while chasing down the CI failures on this branch:
pkg/api/gsoc.go: replaced the fixed-size buffered channel + non-blockingdefault-drop ("slow consumer") logic with an unbounded FIFO queue (gsocQueue). The olddefaultbranch could silently drop a GSOC update on any goroutine-scheduling jitter (not just a genuinely slow client) and, after an earlier refactor, could also permanently hangHandle()— called synchronously by push/pull-sync — since nothing ever unblocked it for a client that never sends a close frame. The queue guarantees in-order delivery with no cap and no dropped messages, while a truly dead connection still times out via the existing per-message write deadline.pkg/api/gsoc.go: movedSubscribe()to run synchronously ingsocWsHandler, before the connection is handed off to its own goroutine, closing a window where a GSOC update could arrive before the handler was registered and be silently missed.pkg/api/gsoc_test.go: updatedTestGsocWebsocketSlowConsumerto assert the new unbounded-queue behavior (the full backlog is delivered, in order, once the consumer catches up, instead of being disconnected), and added a synchronization fix specific to this test's in-memorynet.Pipetransport —Dial()returning is not a happens-before guarantee that the server has reachedSubscribe(), so the test now waits before sending and confirms with a throwaway round-trip before building the unread backlog it asserts on.pkg/api/gsoc_test.go: removed the now-unnecessary fixed sleep between updates inTestGsocWebsocketMessageOrdering— ordering is guaranteed by the fix above rather than by pacing.🤖 Generated with Claude Code