Skip to content

refactor: move flush scheduler into ClusterEventPublisher with ClusterEventEmitter interface#3326

Merged
superhx merged 1 commit into
1.7from
refactor/cluster-event-emitter
Apr 20, 2026
Merged

refactor: move flush scheduler into ClusterEventPublisher with ClusterEventEmitter interface#3326
superhx merged 1 commit into
1.7from
refactor/cluster-event-emitter

Conversation

@superhx
Copy link
Copy Markdown
Collaborator

@superhx superhx commented Apr 20, 2026

Summary

Move the periodic flush scheduler from individual accumulators into ClusterEventPublisher as a centralized mechanism. Accumulators now implement ClusterEventEmitter and register themselves with the publisher.

Changes

  • ClusterEventEmitter (new): @FunctionalInterface with void emit(IClusterEventPublisher)
  • ClusterEventPublisher: owns a static daemon scheduled executor (30s interval) that invokes all registered emitters. setup()/shutdown() only manage the producer and emitter list.
  • RequestErrorAccumulator: implements ClusterEventEmitter, no longer owns its own scheduler. RPS calculation uses real elapsed wall-clock time.
  • BrokerServer.scala: registers RequestErrorAccumulator as an emitter; no longer calls close() on it separately.

…rEventEmitter interface

- Add ClusterEventEmitter functional interface with emit(IClusterEventPublisher)
- ClusterEventPublisher owns a static scheduled flush loop (30s interval)
- Accumulators register via registerEmitter()/removeEmitter()
- RequestErrorAccumulator implements ClusterEventEmitter, no longer owns scheduler
- RPS calculation uses real elapsed time instead of hardcoded interval
- BrokerServer registers RequestErrorAccumulator as emitter on startup
@superhx superhx merged commit 3f6241a into 1.7 Apr 20, 2026
6 checks passed
@superhx superhx deleted the refactor/cluster-event-emitter branch April 20, 2026 07:35
superhx added a commit that referenced this pull request Apr 22, 2026
…rEventEmitter interface (#3326)

Move the periodic flush scheduler from individual accumulators into
`ClusterEventPublisher` as a centralized mechanism. Accumulators now
implement `ClusterEventEmitter` and register themselves with the
publisher.

- **`ClusterEventEmitter`** (new): `@FunctionalInterface` with `void
emit(IClusterEventPublisher)`
- **`ClusterEventPublisher`**: owns a static daemon scheduled executor
(30s interval) that invokes all registered emitters.
`setup()`/`shutdown()` only manage the producer and emitter list.
- **`RequestErrorAccumulator`**: implements `ClusterEventEmitter`, no
longer owns its own scheduler. RPS calculation uses real elapsed
wall-clock time.
- **`BrokerServer.scala`**: registers `RequestErrorAccumulator` as an
emitter; no longer calls `close()` on it separately.

Signed-off-by: Robin Han <hanxvdovehx@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants