- rejects a remove or update request whose terminator is owned by a different
router, and drops unowned ids from batch removals, so a router can only
operate on its own terminators
- keeps the existing leader-side presence pre-filter in the batch handler and
applies the ownership filter after it
- adds unit tests for the ownership filter and the single-terminator check
- adds an end-to-end test that drives the fabric control channel from an
enrolled router against a second router's terminator, covering single remove,
batch remove, and re-weight, plus a control that a router can still remove its
own
- verifies the control-channel peer leaf against the controller's full trusted-CA pool
(identity.CA()) instead of only self-signed roots, honoring intermediate trust anchors
and multi-root bundles
- drops the client-auth extended-key-usage requirement so an externally managed PKI with
arbitrary or absent EKUs is not rejected
- validates every control-channel connection routed to the default (router)
acceptor, skipping only channel types that have a dedicated self-validating
acceptor (the raft mesh), rather than skipping every typed connection
- verifies the peer's leaf certificate and binds the router fingerprint check to
that verified leaf
- adds tests for the type-skipping rule and the certificate rejection paths
* When routers change (connect/disconnect), we re-check the mesh. We are passing in the routers to the channel and they can build up, which is unnecessary. We only need to signal once for all the routers that change since the last time we checked, that the mesh needs to be checked.
* We pass link changes through the run method, which is unnecessary since we pass it to a new goroutine. This inefficiency should be fixed.
* We're evaluating all faulted links for rerouting, even if they were still pending. Only reroute connected links.
* We're using time.After in each for loop, which can accumulate timers. Use a single Ticker instead.
Quiesce marks all terminators as failed and stores the previous state.
Dequiesce restores all terminators with failed state and stored previous
state to their previous state
Adds config to controller for heartbeat config
Add config to routers for heartbeat config
Adds configurable heartbeats to controller <-> controller connections
* Router cert handling fix
* Always start with empty bolt db, so raft journal can be applied
cleanly
* Allow looking up raft member ids, so you only need to provide addr
* Report metrics to all controllers. Fixesopenziti/fabric#525