Skip to content

feat: implement native RavenDB-backed control queue for Wolverine#3285

Merged
jeremydmiller merged 2 commits into
JasperFx:mainfrom
danielwinkler:feature/ravendb-control-queue
Jul 5, 2026
Merged

feat: implement native RavenDB-backed control queue for Wolverine#3285
jeremydmiller merged 2 commits into
JasperFx:mainfrom
danielwinkler:feature/ravendb-control-queue

Conversation

@danielwinkler

Copy link
Copy Markdown
Contributor

No description provided.

@mysticmind

Copy link
Copy Markdown
Member

Acknowledge your PR, we will review the same sooner.

@jeremydmiller

Copy link
Copy Markdown
Member

@danielwinkler Hey, I'm going to pull this in, but also add some extra tests. We've got some compliance tests leadership. And I might try to turn this into a full blown transport too because why now?

@jeremydmiller
jeremydmiller merged commit 046d3c3 into JasperFx:main Jul 5, 2026
26 checks passed
knotekbr pushed a commit to knotekbr/wolverine that referenced this pull request Jul 6, 2026
…venDb control transport

Adds two compliance suites exercising the native RavenDB control queue added in
JasperFx#3285, and promotes it to a first-class "ravendb://" transport so it can pass the
standard TransportCompliance battery.

Framework changes (Wolverine.RavenDb):
- Rename the control-transport scheme "ravencontrol" -> "ravendb".
- Register the RavenDbControlTransport eagerly in UseRavenDbPersistence so the
  "ravendb://" scheme resolves for publishing rules configured at bootstrap
  (previously it registered lazily in RavenDbMessageStore.Initialize, so a
  config-time PublishAllMessages().To("ravendb://...") threw "Unknown Transport
  scheme"). The IDocumentStore is resolved lazily in the transport's
  InitializeAsync. The control endpoint only becomes a live listener when the
  message store promotes it to the NodeControlEndpoint under Balanced durability,
  so Solo hosts never poll — no behavior change for Solo.

Compliance harness (Wolverine.ComplianceTests):
- TransportComplianceFixture gains an overridable Mode (default Solo) so a
  control-plane transport that only wires its NodeControlEndpoint under Balanced
  can run the standard suite. Purely additive; every existing fixture stays Solo.

Tests:
- control_transport_compliance: full TransportCompliance<T> over a Balanced
  two-node fixture sharing one embedded store — 22/22, no skips. Cluster cadence
  tightened in-fixture (CheckAssignmentPeriod/ScheduledJobPollingTime) so the
  leader-assigned scheduled-job agent is assigned promptly (the 30s default made
  schedule_send flap).
- control_queue_leadership_election_compliance: full LeadershipElectionCompliance
  over ravendb:// instead of UseTcpForControlEndpoint() — 13/13, covering
  fan-out, send-to-node, and leader failover on the native control queue.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jul 9, 2026
This was referenced Jul 14, 2026
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.

3 participants