Skip to content

downstreamadapter,config,api: wire event collector batch config#4663

Merged
ti-chi-bot[bot] merged 20 commits intomasterfrom
pr3-normal-batch-wiring
Apr 17, 2026
Merged

downstreamadapter,config,api: wire event collector batch config#4663
ti-chi-bot[bot] merged 20 commits intomasterfrom
pr3-normal-batch-wiring

Conversation

@3AceShowHand
Copy link
Copy Markdown
Collaborator

@3AceShowHand 3AceShowHand commented Mar 31, 2026

What problem does this PR solve?

Issue Number: close #4777

What is changed and how it works?

This PR wires event collector batch config through the API, config, dispatcher manager, and event collector paths.

  • add event_collector_batch_count and event_collector_batch_bytes to the v2 replica config and internal replica config
  • preserve unset versus explicit 0 by keeping these fields as *int in runtime ChangefeedConfig
  • resolve batch count and batch bytes from sink defaults in dispatcher manager, and apply explicit changefeed overrides when configured
  • pass the resolved batch config through dispatcher shared state into event collector dynstream area settings
  • add tests for API conversion, config propagation, validation, precedence, and event collector batching behavior

Check List

Tests

  • Unit test
    • go test ./api/v2 -run 'TestReplicaConfigConversionBatchFields$'
    • go test ./pkg/config -run 'Test(ChangeFeedInfoToChangefeedConfigBatchFields|ReplicaConfigValidateBatchConfig)$'
    • go test ./downstreamadapter/dispatchermanager -run 'TestDispatcherManagerBatchConfig$'

Questions

Will it cause performance regression or break compatibility?

No compatibility change for existing users when these fields are unset, because the default path still uses sink derived settings. When configured, the behavior changes only for the target changefeed.

Do you need to update user documentation, design documentation or monitoring documentation?

No.

Release note

None

Summary by CodeRabbit

Release Notes

  • New Features

    • Added configurable event collector batching with optional parameters for batch count and batch bytes limits.
    • Enables fine-tuning of event collection behavior through replica and changefeed configuration.
  • Tests

    • Added comprehensive test coverage for batch configuration validation, conversion, and application.

@ti-chi-bot ti-chi-bot Bot added do-not-merge/needs-linked-issue release-note Denotes a PR that will be considered when it comes time to generate release notes. labels Mar 31, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 31, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR introduces configurable event collector batch settings (EventCollectorBatchCount and EventCollectorBatchBytes) that propagate from replica/changefeed configuration through dispatcher and event collector layers to the dynamic stream initialization, enabling runtime control over batching behavior.

Changes

Cohort / File(s) Summary
API Model
api/v2/model.go, api/v2/model_test.go
Added EventCollectorBatchCount and EventCollectorBatchBytes optional pointer fields to ReplicaConfig struct with bidirectional conversion logic between API and internal config models; test coverage verifies round-trip preservation including nil and zero-value handling.
Dispatcher Interface & Configuration
downstreamadapter/dispatcher/basic_dispatcher.go, basic_dispatcher_info.go
Extended DispatcherService interface with GetEventCollectorBatchConfig() method; updated SharedInfo to accept and store batch count/bytes; implemented accessor on BasicDispatcher to expose these values.
Dispatcher Tests
downstreamadapter/dispatcher/basic_dispatcher_active_active_test.go, event_dispatcher_test.go, redo_dispatcher_test.go, downstreamadapter/dispatchermanager/dispatcher_manager_test.go
Updated test fixture construction of SharedInfo to pass batch config parameters (typically 0 values for test setup); no logic changes to test assertions or control flow.
Dispatcher Manager
downstreamadapter/dispatchermanager/dispatcher_manager.go, dispatcher_manager_batch_test.go
Added getEventCollectorBatchCountAndBytes helper that derives batch limits from sink with config-based overrides; comprehensive test coverage verifies precedence rules (config overrides sink defaults when non-nil).
Event Collector
downstreamadapter/eventcollector/event_collector.go, event_collector_test.go
Updated PrepareAddDispatcher to pass batch config to NewAreaSettingsWithMaxPendingSizeAndBatchConfig; refactored error handling to invoke stat.run() before returning; extended mock dispatcher with batch observability and added two new test cases verifying batch aggregation by count and bytes.
Config Package
pkg/config/changefeed.go, changefeed_test.go, replica_config.go, replica_config_test.go
Added EventCollectorBatchCount and EventCollectorBatchBytes fields to ChangefeedConfig and ReplicaConfig; ToChangefeedConfig() copies these from replica config; validation logic rejects negative values while allowing 0 to disable batching; comprehensive test cases verify field handling and validation.
Dynstream Utilities
utils/dynstream/area_batch_config_registry.go, area_batch_config_registry_test.go, event_queue_batcher_test.go
Added clarifying comments on non-thread-safe mutators; moved existing batch config normalization test from area_batch_config_registry_test.go to event_queue_batcher_test.go with updated copyright year.

Sequence Diagram

sequenceDiagram
    actor Config as ReplicaConfig/<br/>ChangefeedConfig
    participant DM as DispatcherManager
    participant SI as SharedInfo
    participant EC as EventCollector
    participant DS as DynStream

    Config->>DM: Pass batch count/bytes config<br/>(or nil for defaults)
    activate DM
    DM->>DM: getEventCollectorBatchCountAndBytes()<br/>sink defaults + config overrides
    DM->>SI: NewSharedInfo(..., batchCount, batchBytes)
    deactivate DM
    
    EC->>SI: target.GetEventCollectorBatchConfig()
    activate EC
    SI-->>EC: Return batchCount, batchBytes
    EC->>DS: NewAreaSettingsWithMaxPendingSizeAndBatchConfig<br/>(batchCount, batchBytes)
    deactivate EC
    activate DS
    DS-->>EC: Configured area with batch settings
    deactivate DS
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • pingcap/ticdc#4656: Adds BatchCount() and BatchBytes() methods to the Sink interface, which are directly consumed by the dispatcher manager's batch config resolution logic in this PR.
  • pingcap/ticdc#4674: Introduces the dynstream area batch config and NewAreaSettingsWithMaxPendingSizeAndBatchConfig API that this PR integrates to apply batch limits to event streams.

Suggested labels

lgtm, approved

Suggested reviewers

  • flowbehappy
  • asddongmen
  • hongyunyan
  • wk989898

Poem

🐰 Batches now configured, streaming flows true,
Count and bytes cascade through and through,
From config to dispatcher, collector takes flight,
Dynamic batch settings make batching just right!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 32.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: wiring event collector batch configuration through multiple components (downstreamadapter, config, api).
Description check ✅ Passed The description includes all required template sections: issue number (close #4777), what changed and how it works, test coverage details, compatibility assessment, and release note status.
Linked Issues check ✅ Passed The PR fully addresses issue #4777 by implementing configuration of event collector dynamic stream batching through API, config, and dispatcher manager changes with comprehensive test coverage.
Out of Scope Changes check ✅ Passed All changes are directly scoped to wiring event collector batch config as described in issue #4777; no unrelated changes detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pr3-normal-batch-wiring

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ti-chi-bot ti-chi-bot Bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Mar 31, 2026
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces per-area batch configuration for the event collector's dynamic stream, allowing for optimized batching performance. It adds batch count and byte limit fields to the API, changefeed, and replica configurations, and updates the sink interfaces to provide default batching values. The dynstream utility has been refactored to support these overrides through a new registry and batcher implementation. Feedback identifies a potential memory leak in stream.go due to the removal of event buffer zeroing and points out a validation error in replica_config.go that incorrectly prevents users from disabling the byte-based batching limit with a zero value.

Comment thread utils/dynstream/stream.go
Comment thread pkg/config/replica_config.go Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
utils/dynstream/stream.go (1)

238-243: ⚠️ Potential issue | 🔴 Critical

Build failure: cleanUpEventBuf is declared but never used.

The pipeline reports a compilation error because cleanUpEventBuf is declared but the calls to it were removed. Either remove the unused declaration or restore the cleanup calls.

🐛 Proposed fix: remove the unused declaration
 	var (
 		eventQueueEmpty = false
 		eventBuf        []T
-		zeroT           T
-		cleanUpEventBuf = func() {
-			for i := range eventBuf {
-				eventBuf[i] = zeroT
-			}
-			eventBuf = nil
-		}
 		path     *pathInfo[A, P, T, D, H]
 		nBytes   int
 		duration time.Duration
 	)

Alternatively, if the cleanup is intentionally needed to avoid memory leaks (releasing references to events for GC), the cleanUpEventBuf() calls should be restored after processing events.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@utils/dynstream/stream.go` around lines 238 - 243, The helper closure
cleanUpEventBuf is declared but never used, causing a compile error; either
delete the unused declaration or reintroduce calls to it where events are
finished processing to release references for GC. If you choose deletion, remove
the cleanUpEventBuf variable and its body (the loop zeroing eventBuf and setting
it to nil); if cleanup is required, locate where events are consumed (places
handling eventBuf in the processing loop) and call cleanUpEventBuf() after
processing to zero entries and nil out eventBuf; reference the symbols
cleanUpEventBuf, eventBuf and zeroT when making the change.
🧹 Nitpick comments (1)
utils/dynstream/stream.go (1)

254-256: Remove duplicate/stale comment block.

This comment block duplicates the intent already stated at lines 233-247. The "todo" comment appears to be leftover from refactoring.

🧹 Proposed cleanup
-	// Variables below will be used in the Loop below.
-	// Declared here to avoid repeated allocation.
-	// todo: shall we preallocate the event buff and path here ?
 	// 1. Drain the eventChan to pendingQueue.
 	// 2. Pop events from the eventQueue and handle them.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@utils/dynstream/stream.go` around lines 254 - 256, Remove the duplicate/stale
comment block that starts with "Variables below will be used in the Loop below."
(the TODO about preallocating event buff and path) since the same intent is
already documented earlier; locate the block near the variable declarations used
by the Loop in stream.go (the comment immediately preceding the variables for
event buffer/path) and delete it to avoid redundant/outdated comments.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@utils/dynstream/stream.go`:
- Around line 238-243: The helper closure cleanUpEventBuf is declared but never
used, causing a compile error; either delete the unused declaration or
reintroduce calls to it where events are finished processing to release
references for GC. If you choose deletion, remove the cleanUpEventBuf variable
and its body (the loop zeroing eventBuf and setting it to nil); if cleanup is
required, locate where events are consumed (places handling eventBuf in the
processing loop) and call cleanUpEventBuf() after processing to zero entries and
nil out eventBuf; reference the symbols cleanUpEventBuf, eventBuf and zeroT when
making the change.

---

Nitpick comments:
In `@utils/dynstream/stream.go`:
- Around line 254-256: Remove the duplicate/stale comment block that starts with
"Variables below will be used in the Loop below." (the TODO about preallocating
event buff and path) since the same intent is already documented earlier; locate
the block near the variable declarations used by the Loop in stream.go (the
comment immediately preceding the variables for event buffer/path) and delete it
to avoid redundant/outdated comments.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 521f050c-d68b-47f7-a6bb-770085d97b5b

📥 Commits

Reviewing files that changed from the base of the PR and between 4c62245 and 3be551f.

📒 Files selected for processing (21)
  • api/v2/model.go
  • api/v2/model_test.go
  • downstreamadapter/dispatcher/basic_dispatcher.go
  • downstreamadapter/dispatcher/basic_dispatcher_active_active_test.go
  • downstreamadapter/dispatcher/basic_dispatcher_info.go
  • downstreamadapter/dispatcher/event_dispatcher.go
  • downstreamadapter/dispatcher/event_dispatcher_test.go
  • downstreamadapter/dispatcher/redo_dispatcher.go
  • downstreamadapter/dispatcher/redo_dispatcher_test.go
  • downstreamadapter/dispatchermanager/dispatcher_manager.go
  • downstreamadapter/dispatchermanager/dispatcher_manager_batch_test.go
  • downstreamadapter/dispatchermanager/dispatcher_manager_test.go
  • downstreamadapter/eventcollector/event_collector.go
  • downstreamadapter/eventcollector/event_collector_test.go
  • pkg/config/changefeed.go
  • pkg/config/changefeed_test.go
  • pkg/config/replica_config.go
  • pkg/config/replica_config_test.go
  • utils/dynstream/area_batch_config_registry.go
  • utils/dynstream/area_batch_config_registry_test.go
  • utils/dynstream/stream.go

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/config/replica_config.go`:
- Around line 368-374: Update the misleading comment above the validation for
EventCollectorBatchCount and EventCollectorBatchBytes to accurately describe
behavior: explain that setting these fields to 0 does not disable batching but
instead causes the code to fall back to sink defaults (dispatcher_manager.go
only overrides when > 0) and that newBatchConfig in utils/dynstream/batcher.go
normalizes non-positive counts to 1, so 0 will not disable batching; reference
the config fields EventCollectorBatchCount and EventCollectorBatchBytes and the
relevant behavior in dispatcher_manager.go and
utils/dynstream/batcher.go/newBatchConfig.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 13d05519-91e4-4d90-ad55-3a1379ec4284

📥 Commits

Reviewing files that changed from the base of the PR and between 3be551f and 0c88c51.

📒 Files selected for processing (3)
  • downstreamadapter/dispatchermanager/dispatcher_manager_batch_test.go
  • pkg/config/replica_config.go
  • utils/dynstream/stream.go
✅ Files skipped from review due to trivial changes (2)
  • utils/dynstream/stream.go
  • downstreamadapter/dispatchermanager/dispatcher_manager_batch_test.go

Comment thread pkg/config/replica_config.go
@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand 3AceShowHand changed the title Pr3 normal batch wiring downstreamadapter,config,api: wire event collector batch config Apr 9, 2026
@ti-chi-bot ti-chi-bot Bot added release-note-none Denotes a PR that doesn't merit a release note. and removed do-not-merge/needs-linked-issue release-note Denotes a PR that will be considered when it comes time to generate release notes. labels Apr 9, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@utils/dynstream/interfaces_test.go`:
- Line 26: The test currently compares settings.batchConfig to newBatchConfig(0,
-1) which reuses the same helper as the code under test; replace that
implementation-coupled assertion by asserting explicit normalized fields for
settings.batchConfig (e.g., check MaxBatchSize, BatchTimeout, and any other
exported fields) or construct an expected batchConfig struct literal with
concrete values and compare that to settings.batchConfig so the test will catch
normalization regressions; update the assertion(s) around settings.batchConfig
and remove the call to newBatchConfig in the expectation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 134dad65-ff57-42ee-86f8-abbc971b55d7

📥 Commits

Reviewing files that changed from the base of the PR and between 972c84f and be4e14e.

📒 Files selected for processing (7)
  • api/v2/model_test.go
  • downstreamadapter/dispatchermanager/dispatcher_manager_batch_test.go
  • downstreamadapter/eventcollector/event_collector_test.go
  • pkg/config/changefeed_test.go
  • pkg/config/replica_config_test.go
  • utils/dynstream/area_batch_config_registry_test.go
  • utils/dynstream/interfaces_test.go
✅ Files skipped from review due to trivial changes (3)
  • pkg/config/replica_config_test.go
  • pkg/config/changefeed_test.go
  • api/v2/model_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • utils/dynstream/area_batch_config_registry_test.go
  • downstreamadapter/dispatchermanager/dispatcher_manager_batch_test.go

Comment thread utils/dynstream/interfaces_test.go Outdated
settings := NewAreaSettingsWithMaxPendingSizeAndBatchConfig(
64*1024*1024, 0, "test", 0, -1,
)
require.Equal(t, newBatchConfig(0, -1), settings.batchConfig)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Assertion is implementation-coupled and may miss normalization regressions.

Line 26 builds the expected value with newBatchConfig(0, -1), which is the same helper used inside the constructor under test. This makes the test less effective at catching behavior regressions. Assert explicit normalized fields instead.

Suggested fix
 func TestNewAreaSettingsWithMaxPendingSizeAndBatchConfigNormalizesBatchConfig(t *testing.T) {
 	settings := NewAreaSettingsWithMaxPendingSizeAndBatchConfig(
 		64*1024*1024, 0, "test", 0, -1,
 	)
-	require.Equal(t, newBatchConfig(0, -1), settings.batchConfig)
+	require.Equal(t, batchConfig{
+		softCount: 1,
+		hardCount: countCapMultiple,
+		hardBytes: 0,
+	}, settings.batchConfig)
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
require.Equal(t, newBatchConfig(0, -1), settings.batchConfig)
func TestNewAreaSettingsWithMaxPendingSizeAndBatchConfigNormalizesBatchConfig(t *testing.T) {
settings := NewAreaSettingsWithMaxPendingSizeAndBatchConfig(
64*1024*1024, 0, "test", 0, -1,
)
require.Equal(t, batchConfig{
softCount: 1,
hardCount: countCapMultiple,
hardBytes: 0,
}, settings.batchConfig)
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@utils/dynstream/interfaces_test.go` at line 26, The test currently compares
settings.batchConfig to newBatchConfig(0, -1) which reuses the same helper as
the code under test; replace that implementation-coupled assertion by asserting
explicit normalized fields for settings.batchConfig (e.g., check MaxBatchSize,
BatchTimeout, and any other exported fields) or construct an expected
batchConfig struct literal with concrete values and compare that to
settings.batchConfig so the test will catch normalization regressions; update
the assertion(s) around settings.batchConfig and remove the call to
newBatchConfig in the expectation.

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

4 similar comments
@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/test all

@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/retest

1 similar comment
@3AceShowHand
Copy link
Copy Markdown
Collaborator Author

/retest

@ti-chi-bot ti-chi-bot Bot added the needs-1-more-lgtm Indicates a PR needs 1 more LGTM. label Apr 16, 2026
Comment thread pkg/config/changefeed.go
Filter *FilterConfig `toml:"filter" json:"filter"`
MemoryQuota uint64 `toml:"memory-quota" json:"memory-quota"`
ForceReplicate bool `json:"force_replicate" default:"false"`
Filter *FilterConfig `toml:"filter" json:"filter"`
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this field need toml?

Comment thread pkg/config/changefeed.go
ForceReplicate bool `json:"force_replicate" default:"false"`
Filter *FilterConfig `toml:"filter" json:"filter"`
MemoryQuota uint64 `toml:"memory-quota" json:"memory-quota"`
EventCollectorBatchCount *int `json:"event_collector_batch_count"`
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it need the default value?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No,level it to be nil, and then it can be derived from the sink configuration in the runtime.

@ti-chi-bot ti-chi-bot Bot added lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Apr 17, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Apr 17, 2026

[LGTM Timeline notifier]

Timeline:

  • 2026-04-16 09:21:18.674170239 +0000 UTC m=+1639283.879530286: ☑️ agreed by asddongmen.
  • 2026-04-17 03:40:28.063263988 +0000 UTC m=+1705233.268624045: ☑️ agreed by wk989898.

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Apr 17, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: asddongmen, flowbehappy, wk989898

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ti-chi-bot ti-chi-bot Bot added the approved label Apr 17, 2026
@ti-chi-bot ti-chi-bot Bot merged commit 8673b60 into master Apr 17, 2026
32 of 36 checks passed
@ti-chi-bot ti-chi-bot Bot deleted the pr3-normal-batch-wiring branch April 17, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved lgtm release-note-none Denotes a PR that doesn't merit a release note. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

event collector support config the dynamic stream batch

4 participants