Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
a48a100
chore: return inserted event payload id directly from the insertion
benjamin-stacks Dec 22, 2025
41717b4
refactor: use a dedicated struct for the event http request data
benjamin-stacks Dec 29, 2025
0d62bd4
feat: store timestamp when saving pending payloads to event observer db
benjamin-stacks Dec 29, 2025
2566c43
Merge branch 'develop' into feat/non-blocking-event-delivery
benjamin-stacks Dec 29, 2025
c922ba3
Merge branch 'develop' into feat/non-blocking-event-delivery
benjamin-stacks Jan 5, 2026
ecb215e
feat: non-blocking event delivery
benjamin-stacks Jan 6, 2026
72437b2
fix: add a way to block until all events are delivered, to fix a test
benjamin-stacks Jan 7, 2026
f368e56
fix: ensure `process_pending_payloads` is really only called at startup
benjamin-stacks Jan 8, 2026
d5fa2fc
fix all the integration test issues with asynchronous event dispatching
benjamin-stacks Jan 8, 2026
1b4d5f4
use the same event dispatcher for neon and nakamoto
benjamin-stacks Jan 9, 2026
16d9387
give event dispatcher threads distinct names, and at some debug logging
benjamin-stacks Jan 9, 2026
b2ca7d7
Merge branch 'develop' into refactor/event-dispatcher-tweaks
benjamin-stacks Jan 9, 2026
b856441
Merge branch 'refactor/event-dispatcher-tweaks' into feat/non-blockin…
benjamin-stacks Jan 9, 2026
dcf3092
chore: add a migration versioning table the event dispatcher DB
benjamin-stacks Jan 14, 2026
0f28412
Merge remote-tracking branch 'origin-benjamin/develop' into refactor/…
benjamin-stacks Jan 14, 2026
2a26166
Merge branch 'refactor/event-dispatcher-tweaks' into feat/non-blockin…
benjamin-stacks Jan 14, 2026
c4897da
refactor: remove error boilerplate by using `thiserror`
benjamin-stacks Jan 14, 2026
02dfa1a
remove unused import
benjamin-stacks Jan 14, 2026
749bbb3
chore: give the DB version constants a shared prefix for clarity
benjamin-stacks Jan 14, 2026
a9e21f1
Merge branch 'refactor/event-dispatcher-tweaks' into feat/non-blockin…
benjamin-stacks Jan 15, 2026
5322cfa
feat: allow specifying the queue size for the event dispatcher
benjamin-stacks Jan 15, 2026
05cd02c
allow configuring event dispatcher blocking behavior in `config.toml`
benjamin-stacks Jan 16, 2026
94984ab
chore: update changelog
benjamin-stacks Jan 16, 2026
ff7d455
chore: add/bump copyright note in all files that this PR touches
benjamin-stacks Jan 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ and this project adheres to the versioning scheme outlined in the [README.md](RE

- In the `/v3/transaction/{txid}` RPC endpoint, added `block_height` and `is_canonical` to the response.
- Improved block validation in `stacks-inspect`.
- Allow non-blocking event dispatching. This is off by default, but can be enabled in the node configuration.

### Changed

Expand Down
14 changes: 14 additions & 0 deletions docs/event-dispatcher.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ disable_retries = false # Optional: If true, failed deliveries w

The `stacks-node` will then execute HTTP POST requests with JSON payloads to the configured `endpoint` for the subscribed events.

By default, when sending a payload the event dispatcher will block node operation until it has received a successful response from your observer. Your event observer should therefore be quick to respond, and offload any expensive computation to an asynchronous background task. Alternatively, you can configure the events to be delivered in a non-blocking fashion like this:

```toml
[node]
...
event_dispatcher_blocking = false
# By default, up to 1,000 requests can be held in a queue before the event dispatcher will start blocking
# again. If you expect bigger bursts than that, you can further tweak this value.
#
# event_dispatcher_queue_size = 1_000
```

Note that this is only meant to deal with bursts of events. If your event observer is continuously slower than the stream of incoming events, it will fall behind more and more, and the dispatcher will eventually start blocking again to catch up.

## Important Notes

* **`/new_microblocks` Endpoint Limitation:** Event delivery via the `/new_microblocks` endpoint (and by extension, events sourced from microblocks delivered to `/new_block`) is **only supported until epoch 2.5**. After this epoch, observers will no longer receive events on this path for new microblocks.
Expand Down
Loading