GH GambleHub

Conflict Detection and Resolution

1) What is considered a conflict

A conflict is a situation where two or more change sources claim incompatible states of the same entity, resource, or invariant.

Syntactic: overlapping changes to one file/key (merge conflict in Git, patch collision in Kustomize).
Semantic: a document correct according to the scheme violates the business invariant (debit amount ≠ credit, limit exceeded).
Operational/temporal: write/read races, duplicate events, cause-effect discrepancy.
Domain: competing operations on the resource (double ticket sale, overbook goods).

The task: to detect the conflict as early as possible, explain its cause and safely choose one of the actions: auto recovery, retray, merger, compensation, escalation.

2) Detection mechanisms

2. 1 Versioning and state comparison

ETag/If-Match in REST, rowversion/xmin in DB - lost update detection.
3-way merge (base, ours, theirs) - highlighting incompatible edits.
Checksum/Hash by field/document - cheap comparison.

2. 2 Time and causal labels

Lamport clock: total order "approximate in time."

Vector/Version clocks: competitive detection (AB) vs causality (A → B).
Version vectors on cues/parties - divergence detection.

2. 3 Invariants and Constraints

Schemes and validators (JSON Schema/OpenAPI) - syntactic validity.
Invariants: uniqueness, non-negativity, balance, ACL rules.
Integrity checks: FK/UNIQUE/EXCLUDE indexes, partial constraints.
Domain asserts in code/policies (OPA/Kyverno/Conftest).

2. 4 Detection in event streams

Idempotency Key/Dedup Store (e.g. Redis/DB with TTL): rejection of takes.
Transactional/Exactly-once in streaming: transactional id, producer epoch, consummer-offset.
Sequence gap detection: gaps, repetitions (n, n + 1, n + 1).

2. 5 Observability and alarm

Error/Collision/Retray Prometrics.

Detailed causes (labels: type = semanticsyntactic, entity, shard).
Traces - Associate conflicts with specific transactions/patches.

3) Resolution strategies

3. 1 Fully automatic (safe by definition)

CRDT (Conflict-free Replicated Data Types): G-Counter, PN-Counter, OR-Set, LWW-Register, Map/Graph CRDT.

Ensuring convergence without coordination; the choice of loss/retention semantics is important.
Commutative operations: applied in any order (increments, log appendages).
Idempotent handlers: repetition does not change the result (upsert by key, put-if-absent).
Optimistic merging of structures: 'deep merge + policy' with deterministic order.

3. 2 Semi-automatic (with policy)

3-way merge + array rules ('replace' append 'uniqueBy (key) | patchBy (key)').
LWW (Last-Write-Wins): simple but risk of loss of causal correctness.

The priorities of the sources are "interactive input> config from file> defaults."

Business rules: "if the limit is exceeded - partial confirmation/compensation."

3. 3 Coordination

OCC/MVCC (optimistic blocking/multi-version): version reconciliation, retray.
Pessimistic locks: 'SELECT... FOR UPDATE ', distributed locks (Redlock/DB-lock/etcd).
Consensus (Raft/Paxos): one leader decides order; there are fewer conflicts, the price is latency.

3. 4 Person-in-loop (HITL)

UI for Manual Merges/Arbitrations (especially Content, Tariffs, Catalogs).

Preview of diffa, explanation of policy, buttons: "accept ours/theirs," "merge fields," "create compensation."

4) Patterns by layers of architecture

4. 1 API/REST/gRPC

Optimistic concurrency: 'If-Match: <etag>', 409/412 in case of conflict → client retracts taking into account fresh ETag.
Idempotency-Key in POST (payments/orders).
Semantic 409: Communicate the reason and proposed actions.

4. 2 Data warehouses

RDBMS: MVCC (snapshot isolation), unique indexes, partial indexes.
KV/Doc stores: versions/revisions (rev), compare-and-swap (CAS).
Multi-master replication: Use/CRDT or write to leader only for critical entities.

4. 3 Queues/Streaming

Exactly-once (practically - "effectively once"): transactional producer + atomic write-to-sink.
Dedup on the console: storing the last N id, upsert/merge logic.
Outbox/Inbox pattern: consistent event publishing.

4. 4 Configurations and IaC

3-way merge in GitOps, policy-gates (OPA/Kyverno) prior to use.

Kustomize/Helm: deterministic merge strategies and prohibition of "unknown keys."

Terraform: plan-diff as a "drift vs wanted" conflict signal.

5) Algorithms and examples

5. 1 3-way merge (simplified)

text resolve(base, ours, theirs):
diff1 = delta(base, ours)
diff2 = delta(base, theirs)
if independent(diff1, diff2): return apply(base, diff1 ⊕ diff2)
if conflictsOnlyInArrays: return arrayPolicyMerge(...)
else:
return CONFLICT with hunks

5. 2 OCC for REST resource

http
Client reads
GET /accounts/42 -> ETag: "v17", body: {balance: 100}

Trying to write off
PUT /accounts/42
If-Match: "v17"
{balance: 50}

If someone has managed before
HTTP/1. 1 412 Precondition Failed
{error: "version_mismatch", currentEtag: "v18"}

The client rereads, applies the delta to the current state, and repeats.

5. 3 Semantic conflict (invariant)

pseudo on Debit(accountId, amount):
current = read(accountId)
if current. balance - amount < 0:
return REJECT ("insufficient _ funds") # write early detection (accountId, version = current. version+1, balance=current. balance - amount)

5. 4 CRDT: OR-Set (sketch)

Elements are added with a unique tag, deletion - for specific tag.
The "add vs remove" conflict is resolved by using the remove tags to remove only visible add tags.

6) Resolution policy: how to formalize

Describe in architectural doctrine:

1. Priority chain.

2. Strategies by data type: scalars/objects/arrays/multimedia.

3. Causal model: do you use versions, Lamport, vector clocks.

4. Loss semantics: what can be lost in LWW, where consensus is needed.

5. Time windows: TTL for deduplication, idempotency windows.

6. Escalation: when auto-resolution is prohibited, requirements for UI/approval.

7. Compensations: SAGA strategies "cancel/compensate" for reassembling invariants.

7) Metrics and SLO

conflicts_total{type} is the frequency by type.
conflicts_resolved_auto_ratio - share of auto-permits.
mean_time_to_resolution is the average time to settlement.
lost_update_incidents - Incidents of lost updates.
idempotency_hit_rate - the proportion of Idempotency keys that worked.
divergence_depth is the depth of the replica divergence (version vectors).

SLO example: "≥ 99% of syntactic conflicts are resolved automatically in ≤ 5 seconds, semantic conflicts in ≤ 15 minutes with HITL."

8) Practical scenarios

8. 1 Payments

Key: Idempotency-Key, OCC on balance, SAGA for reversible steps.
Conflict: double write-off → dedup + balance sheet version check → partial compensation.

8. 2 Inventory/Tickets

Options: pessimistic slot/seat blocking; optimistic reservation with expiring TTL; compare-and-reserve queue.

8. 3 Content/catalogs

3-way merge + HITL: editor selects total; Auto rules for "safe" fields (SEO tags that do not affect the price)

8. 4 GitOps/Kubernetes

Render and validation before application; reject on unknown keys; prohibition "--force" without review.
Drift detection and policy-enforced rollback.

9) Anti-patterns

LWW everywhere: simplicity at the cost of causality loss.
Hidden retrays without idempotency: avalanche-like duplicates.
No explicit array policy - silent loss of configuration points.
Global mutexes on top of networks: SPOF and long locks.
"Blind" compensations without cause audit: repeated conflicts.

10) Implementation checklist

  • Define domain conflict types and invariants.
  • Select the versioning mechanism (ETag/xmin/vector clock).
  • Enable idempotency in critical POST/commands.
  • Set the merge policy by data type (scalars/arrays/objects).
  • Enable schema validators and pre-commit domain checks.
  • Configure collision and alert metrics.
  • For critical entities - leader/consensus, or CRDT.
  • Work out HITL flow and UX (diff, comments, audit log).
  • Document SLOs and compensation procedures (SAGAs).

11) FAQ

Q: When to choose CRDT and when to choose consensus?
A: CRDT is suitable when eventual consistency is acceptable and high availability/local entries are important. Consensus - for data with rigid invariants and strict order of operations (cash balances, access rights).

Q: Is LWW enough?
A: For caches, metrics, and secondary indexes - often yes. For user data and money, almost always not.

Q: How do I select a deduplication window?
A: Focus on the maximum expected re-delivery delay + network jitter, add a margin of 3-5 × item 99.

Q: Should you always do HITL?
A: No. Leave HITL for dispute/value conflicts automate and log the rest.

12) Totals

Effective conflict detection and resolution is a combination of versioning, causal labels, invariants, and clear policy complemented by appropriate algorithms (CRDT/OT/OCC/MVCC/consensus) and observability. Systems where conflict is a "normal" situation remain accessible and predictable; systems where conflict is an "exception" break down at the worst possible time. Select a model, formalize rules, and measure the result.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.