Repository navigation
1.2.1
π Fixes
- Node no longer becomes unresponsive (HTTP 502) after a prolonged Manager outage.
ManagerRegistrationHostedServiceused to block Node startup with an unbounded, blocking retry loop when the Manager was unreachable;ManagerHealthCheckopened a fresh, timeout-lessHttpClienton every poll, which piled up hung connections over a long outage and degraded the Node's own responsiveness. Registration is now a non-blockingBackgroundService, and the health check uses a pooled client with a 5s timeout. - Manager registration (
PUT /api/nodes) now checks the response status code instead of treating any response as success. - Client no longer hangs (up to 100s per call) when the Node is degraded.
IsFeatureEnabledAsyncrequests to the Node are now bounded by a configurablerequestTimeout(default 3s), independent of the underlyingHttpClient's own timeout.
β¨ Improvements
- Client circuit breaker. After a failed/timed-out request to the Node,
FeatureManagerstops contacting it again forcircuitBreakDuration(default 30s) and serves cached state immediately instead β so a prolonged Node/Manager outage no longer costs every single feature check the full request timeout. Configurable viaFeatureSwitcherBasicClientConfiguration. - Explicit, tunable HTTP timeouts instead of the .NET default of 100s across the board:
- Node β Manager registration: 15s (named
"Manager"client) - Node β Manager health check: 5s (named
"ManagerHealthCheck"client) - Client β Node: configurable
requestTimeout, default 3s
- Node β Manager registration: 15s (named
π‘οΈ Hardening
- Preventive fix for SQLite write contention on Node (no incident had occurred β addressed proactively since this is a production system). Connections now run in WAL mode and use a 10s write-lock timeout, so concurrent feature reads/writes no longer risk an unhandled
SqliteException(SQLITE_BUSY) under contention.
Upgrade notes
- No manual steps required. All new timeouts and the circuit breaker ship with sane defaults and apply automatically; override
requestTimeout/circuitBreakDurationonFeatureSwitcherBasicClientConfigurationonly if you need different values. - No breaking changes to the Manager or Node HTTP APIs, or to the Client's public constructors β new parameters are optional and additive.
Full Changelog: v1.2.0...v1.2.1