-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
kvserver/rangefeed: wip #132882
base: master
Are you sure you want to change the base?
kvserver/rangefeed: wip #132882
Commits on Oct 17, 2024
-
kvserver/rangefeed: remove context from kvpb.RangeFeedEventSink
Previously, `node.MuxRangefeed` created a child context for each rangefeed request, storing it in the stream interface to allow the node level to be able to shut down registration goroutines. This patch simplifies the approach by passing the stream context directly to `p.Register`, eliminating the need to store context in `streamSink` or return context via the interface. So this patch also removes context from `kvpb.RangeFeedEventSink`. Epic: none Release note: none
Configuration menu - View commit details
-
Copy full SHA for 3189832 - Browse repository at this point
Copy the full SHA 3189832View commit details -
kvserver/rangefeed: move helper functions to registry_helpers_test
This patch moves helper functions to registry_helpers_test. Part of: cockroachdb#129814 Release note: none
Configuration menu - View commit details
-
Copy full SHA for ebc7d4a - Browse repository at this point
Copy the full SHA ebc7d4aView commit details -
kvserver/rangefeed: refactor registry_helpers_test to facilitate futu…
…re tests This patch refactors helper functions in registry_helpers_test. Part of: cockroachdb#129814 Release note: none # Conflicts: # pkg/kv/kvserver/rangefeed/registry_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/registry_test_helper.go
Configuration menu - View commit details
-
Copy full SHA for 20836cc - Browse repository at this point
Copy the full SHA 20836ccView commit details -
kvserver/rangefeed: process unregister requests asyncronously
After the output loop completes, 2 cleanup steps are performed: 1) The registration is removed from the processors registry 2) The process is potentially stopped and removed from the replica. Before this change, both of these happened syncronously after the output loop finished. With this change, step (1) happens asyncronously. To facilitate this, an overflow mechanism is provided. This overflow mechanism potentially allocates. Note that we expect that the number of requests is relatively small and should be O(rangefeeds_on_range) so hopefully this mechanism won't be used often. Step (2) is now handled by the processor itself. After processing an unregister request, if the set of registrations falls to zero, we enqueue a Stop event for ourselves. Then, when processing the Stop, we unregister ourselves from the replica. Note that this may look like a small semantics change since the previous unregister callback called Stop() which processes all events. However, note that a Stopped event is processed after all other events, so any events in the queue at the point of processing the unregistration that enqueued the stop will be processed. The motivation for this change is to eventually allow cleanup step (1) to be run as part of registration.disconnect(), which needs to be non-blocking. This is desired for a future change in which there is not a dedicated goroutine to perform this cleanup. Epic: none Release note: None
Configuration menu - View commit details
-
Copy full SHA for 3de8f21 - Browse repository at this point
Copy the full SHA 3de8f21View commit details -
kvserver/rangefeed: add unbuffered registration
This patch adds unbufferedRegistration. UnbufferedRegistration is like BufferedRangefeed but uses BufferedStream to buffer live raft updates instead of a using buf channel and having a dedicated per-range per-registration goroutine to volley events to underlying grpc stream. Instead, there is only one BufferedStream for each incoming node.MuxRangefeed rpc call. BufferedStream is responsible for buffering and sending its updates to the underlying grpc stream in a dedicated goroutine O(node). Note that BufferedStreamSender is still left unimplemented. This commit doesn't add any tests for it yet. More tests will be added in future commits of this PR. Part of: cockroachdb#129814 Release note: none # Conflicts: # pkg/kv/kvserver/rangefeed/scheduled_processor.go # Conflicts: # pkg/kv/kvserver/rangefeed/scheduled_processor.go
Configuration menu - View commit details
-
Copy full SHA for 216c173 - Browse repository at this point
Copy the full SHA 216c173View commit details -
kvserver/rangefeed: add event queue
This patch adds a new data structure eventQueue which is like a queue but uses a fixed size for the chunked linked list. Each chunk has a fixed size of 4096 elements. This implementation uses sync.Pool to reduce the number of allocations. pushBack, popFront, len run in constant time. removeAll runs in linear time with respect to the number of elements in the queue. This structure is not safe for concurrent use. This is for future commits to include the queue in the BufferedSender to buffer events at the node level. Part of: cockroachdb#129813 Release note: none
Configuration menu - View commit details
-
Copy full SHA for 16dccc2 - Browse repository at this point
Copy the full SHA 16dccc2View commit details
Commits on Oct 18, 2024
-
kvserver/rangefeed: add node level buffered sender
This patch is the last step for reducing long-running O(ranges) goroutines in kvserver/rangefeed. It changes the BufferedSender to use a queue to buffer events before forwarding them to underlying grpc stream. Closed: cockroachdb#129813 Release note: A new cluster setting `kv.rangefeed.buffered_stream_sender.enabled` can now be used to allow rangefeed to use buffered sender for all rangefeed feeds instead of buffering events separately per client per range. # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender.go # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender.go # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender.go
Configuration menu - View commit details
-
Copy full SHA for df35095 - Browse repository at this point
Copy the full SHA df35095View commit details -
kvserver/rangefeed: add newRetryErrBufferCapacityExceeded
This patch refactors the error for kvpb.RangeFeedRetryError_REASON_SLOW_CONSUMER into newRetryErrBufferCapacityExceeded. Part of: cockroachdb#126560 Release note: none
Configuration menu - View commit details
-
Copy full SHA for c02c9cb - Browse repository at this point
Copy the full SHA c02c9cbView commit details -
kvserver/rangefeed: add capacity to node level buffered sender
This patch adds capacity to node level buffered sender which will shut down all registrations if the node level buffer had overflowed. Part of: cockroachdb#129813 Release note: none TODO: add a larger test at the kvclient side to make sure error returned here is treated as a restart signal # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender.go # pkg/kv/kvserver/rangefeed/buffered_sender_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender_test.go
Configuration menu - View commit details
-
Copy full SHA for ee1adf8 - Browse repository at this point
Copy the full SHA ee1adf8View commit details -
to be squashed separated out for easier code review
# Conflicts: # pkg/kv/kvserver/rangefeed/registry_test_helper.go
Configuration menu - View commit details
-
Copy full SHA for e6811af - Browse repository at this point
Copy the full SHA e6811afView commit details -
to be squashed separated out for easier code review
# Conflicts: # pkg/kv/kvserver/rangefeed/processor_test.go # pkg/kv/kvserver/rangefeed/registry_helpers_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/processor_helpers_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/processor_test.go
Configuration menu - View commit details
-
Copy full SHA for 7e78d97 - Browse repository at this point
Copy the full SHA 7e78d97View commit details -
Configuration menu - View commit details
-
Copy full SHA for a806b9f - Browse repository at this point
Copy the full SHA a806b9fView commit details -
kvserver/rangefeed: add unbuffered registration tests
This patch adds more test cases for unbufferedRegistration. Closed: cockroachdb#126560 Release note: none # Conflicts: # pkg/kv/kvserver/rangefeed/registry_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/registry_test.go
Configuration menu - View commit details
-
Copy full SHA for ef430f2 - Browse repository at this point
Copy the full SHA ef430f2View commit details -
to be squashed separated out for easier code reviews
# Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender_test.go # pkg/kv/kvserver/rangefeed/unbuffered_registration_test.go # Conflicts: # pkg/kv/kvserver/rangefeed/buffered_sender_test.go
Configuration menu - View commit details
-
Copy full SHA for e17bbda - Browse repository at this point
Copy the full SHA e17bbdaView commit details -
Configuration menu - View commit details
-
Copy full SHA for 7fc4d84 - Browse repository at this point
Copy the full SHA 7fc4d84View commit details