Troubleshooting
This page is the operator-facing runbook for common DSM integration failures. Start with the symptom you see, then use diagnostics and observability together.
Universal Triage Flow
Symptom: Lease Thrashing
Typical signs:
- ownership changes too often
renewRejectCountgrowsacquireRejectCountanduncertainAcquireCountgrow- downstream sees fencing rejections
Failure shape: worker-a acquires the shard, renewal fails, worker-b acquires it, and worker-a keeps retrying with stale ownership assumptions.
What to check:
leaseCollections()for renew and acquire rejection counters- whether
renew-skewis too small relative to scheduling jitter - whether
termis too short for the runtime environment - whether downstream processing ignores fencing and keeps acting as a stale owner
Likely causes:
- renewals scheduled too late
- overloaded node misses renewal window
- duplicate workers competing for the same keys
- environment pauses causing expiry churn
Fix direction:
- increase lease term if operationally appropriate
- keep renewals comfortably inside the renew-skew window
- verify only one worker should target the key at a time
- inspect
recordLeaseRenew,recordLeaseAcquire, andrecordFencingRejectmetrics
Symptom: Wrong Or Missing Locator
Typical signs:
- one node has entries but peers do not
- expected collection does not appear in
collections() - data appears isolated even though the runtime is running
Failure shape: node-a writes shared/gateway/route-hints while node-b reads shared/worker/route-hints. The entry key may match, but the locator does not, so the two nodes are not sharing the same collection state.
What to check:
collections()on every affected node- locator triplet:
tenantId/applicationId/collectionId schemaId- collection consistency tier
Likely causes:
- typo in one locator segment
- one service registered under a different application domain
- Spring Boot property mismatch between environments
- one side changed
schemaIdor consistency tier incompatibly
Fix direction:
- make the locator identical on all intended peers
- keep
schemaIdaligned for compatible payloads - centralize registration to avoid drift between modules
Symptom: Spring Bean Validation Failure At Startup
Typical signs:
- application fails during Spring Boot startup
- error mentions missing codec bean, missing entity factory, duplicate locator, or wrong consistency tier
Failure shape: Spring binds dsm.* properties, validates collection definitions, resolves supporting beans, and then builds DsmRuntime. Validation failures happen before the runtime is usable.
What to check:
- required common fields are present:
tenant-id,application-id,collection-id, andschema-id - either
codec-beanis set orentity-typecan derive a record codec consistency-tiermatchestype- lease collections set
lease.entity-factory-bean - CRDT collections set
state-codec-bean,initial-state-bean, andmerger-bean - explicit
bean-namevalues are unique
Likely causes:
- bean name typo
- missing supporting bean definition
- copied register config reused for lease or CRDT without required nested fields
- duplicate locator definitions in one application
Fix direction:
- compare the failing config to Spring Properties
- compare the target workload to the matching cookbook page
- keep one centralized configuration source for all collection definitions
Symptom: clusterId Or serviceId Mismatch
Typical signs:
- node sees no peers or fewer peers than expected
recordServiceIdMismatchrises- peers appear present on the network but do not join the same DSM fabric
Failure shape: node-a and node-b may share the same network and clusterId, but if one uses gateway-service and the other uses worker-service, membership or replication traffic is rejected or ignored.
What to check:
clusterView().clusterId()andclusterView().serviceId()on healthy and unhealthy nodes- deployment-time environment variables or property overrides
- metrics for
recordServiceIdMismatchand cluster admission denial
Likely causes:
- wrong environment profile
- copied service config from another service family
- one node deployed with stale configuration
Fix direction:
- keep
clusterIdstable per environment and cluster - keep
serviceIdstable per service family - validate both values during deployment rollout, not after startup
Symptom: Security Or Replay Rejections
Typical signs:
recordAuthFailureorrecordReplayRejectiongrows- replication traffic is dropped or rejected
What to check:
- cluster secret alignment
- nonce window and clock drift settings
min-acceptable-key-version- payload encryption mode across all peers
- whether one deployment rolled with a different signing configuration
- sender ban metrics for repeated verification failures
Fix direction:
- align security settings across the cluster
- verify time synchronization assumptions
- roll encryption and key-version changes intentionally
- inspect the security integration test pattern before changing runtime behavior
Symptom: Schema Fingerprint Mismatch
Typical signs:
recordSchemaFingerprintMismatchrises- a node accepts local writes but ignores remote register upserts
- data appears stuck after a rolling deployment
What to check:
- entity record class deployed on each node
schema-idvalues- whether the record fields or generic signatures changed
- deployment order and rollback state
Fix direction:
- align entity binaries across peers
- change
schema-idwhen payload semantics are incompatible - use a planned compatibility migration rather than relying on ignored upserts
Symptom: QUORUM Lease Rejections
Typical signs:
- lease acquire, renew, or transfer fails with
membership-unstable - lease operations fail with
quorum-unavailable - cluster membership is changing during ownership handoff
What to check:
- visible cluster size and recent membership events
lease.quorum-stability-rounds- whether suspicion or failure transitions are flapping
- whether the workload truly requires QUORUM mode
Fix direction:
- wait for membership to settle before ownership changes
- tune membership stability rounds conservatively
- inspect cluster discovery and network churn
Symptom: Relay Or Federation Repair Failure
Typical signs:
- federation binding status is
DEGRADEDorDISCONNECTED recordFederationRepairreportsfailedor repeatedbootstrap_fallback- anti-entropy repair skips a relay peer marked
FAILED
What to check:
- relay health status
- federation target
(clusterId, serviceId, locator) - whether the collection tier supports the expected federation behavior
- whether register-only repair expectations are being applied to lease or CRDT bindings
Fix direction:
- restore relay health before expecting catch-up
- verify custom
FederationRelaytransport semantics - remember that federated leases are read-only remote observations
Symptom: Queue Growth Or Backpressure
Typical signs:
reportQueueDepthgrows steadilyrecordBackpressureDecisionincreases- updates appear delayed under load
What to check:
- which locator is showing queue growth
- whether the workload matches the selected collection type and QoS profile
- whether traffic volume is much higher than expected for control-plane usage
Fix direction:
- reduce unexpected write amplification
- confirm you are not using DSM as a bulk data plane
- inspect transport and downstream processing lag