Set reconciliation
Use `rcds`, `iblt`, or `full` from the same CLI and GenSync-compatible API.
Go toolkit and CLI for reconciliation
Based on the Allerton 2019 RCDS paper, this Go project explores content-dependent shingling, set reconciliation, and exact file sync workflows for distributed data.
Quick start
Start a one-shot server with a local set, then connect a client with a different set. Both sides finish with the same reconciled values and byte counters.
make build
./bin/rcds server --algorithm full \
--items server-only,shared \
--output server.out
./bin/rcds client --algorithm full \
--items client-only,shared \
--output client.out
Capabilities
Use `rcds`, `iblt`, or `full` from the same CLI and GenSync-compatible API.
Reuses chunks the client already has and verifies the final SHA-256 checksum.
Length-prefixed payloads, bounded reads, full writes, and one-shot server workflows.
Unit, integration, and e2e tests exercise the CLI, algorithms, and file workflow.
How it flows
RCDS_GO separates the reconciliation decision from payload movement. The set algorithms discover differences; the file path exchanges manifests and missing chunks before writing the verified result.
Documentation
Research lineage
Song and Trachtenberg's paper reduces string reconciliation to set reconciliation by recursively partitioning strings into content-dependent shingles. This repository makes that lineage explicit while separating research-grade RCDS metadata from the production readiness of the current CLI and transport.