Initial commit: ClawSync v0.1.0
8-crate pure-Rust workspace for revision-aware HDF5 sync. ## Crates - clawhdf5-onion: ClawOnion VFD — page-level versioned HDF5 storage, binary format, writer/reader, branch DAG, GC, snapshots, provenance - clawsync-core: BLAKE3, xxHash3, FastCDC (+ SIMD NEON), zstd/lz4 - clawsync-onion: IBLT sketch, Merkle tree differ, packet differ/merger, ClawSyncManifest, SyncSelector - clawsync-hdf5: dataset-level manifest, differ, patcher, wire payload reconstruction (apply_received_payloads) - clawsync-transport: TCP, QUIC (quinn 0.11/TLS 1.3), SyncPeer abstraction, length-prefixed rkyv wire protocol (21 SyncMessage variants) - clawsync-agent: OnionMemory, SyncScheduler, TcpSyncBackend, PeerCapabilities negotiation - clawsync-fs: CDC-based delta sync for any file type; FsSyncClient/Server, W=16 pipelining, atomic writes - clawsync-cli: push/pull/serve/hdf5-sync/serve-hdf5/sync/serve-fs + all local management commands; --quic on all network commands ## Key features - IBLT pre-flight: O(revision count) vs rsync's O(file size) - W=16 sliding-window push: 13–15x speedup over stop-and-wait at WAN RTT - Dataset-granular HDF5 sync: only modified datasets transferred - CDC delta for any file type: insertion-stable chunk boundaries - Full revision DAG: branch, merge, rollback, export, snapshot, GC - QUIC transport: TLS 1.3, per-message streams via quinn 0.11 ## Tests ~573 passing (default features); ~589 with --features simd-cdc ## Performance (Apple Silicon) - Reconstruct rev=100: 68 µs (target ≤ 1 ms) - BLAKE3 Rayon 1 MB: 10.3 GiB/s (target ≥ 5 GB/s) - GC 500 revisions: 20.6 µs (target ≤ 2 s) - W=16 vs W=1 at 5 ms RTT: 14.8x speedup - No-op pre-flight at 16 MB: 4 ms vs rsync 35 ms (7.8x) Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# clawsync-onion
|
||||
|
||||
ClawSync onion-aware revision diff, layer packaging, and manifest protocol.
|
||||
|
||||
## Overview
|
||||
|
||||
`clawsync-onion` sits between the onion storage layer (`clawhdf5-onion`) and the
|
||||
transport layer (`clawsync-transport`). It knows how to:
|
||||
|
||||
1. Compute which revisions a remote node is missing (`diff_revisions`)
|
||||
2. Package those revisions as `OnionLayerPacket` wire messages
|
||||
3. Apply incoming packets to a local `OnionFile` (`merge_packets`)
|
||||
4. Build and parse `ClawSyncManifest` for pre-flight negotiation
|
||||
|
||||
## Key Types
|
||||
|
||||
### `diff_revisions(local, remote_head) -> Vec<OnionLayerPacket>`
|
||||
|
||||
Given a local `OnionFile` and the remote's HEAD revision number, returns the
|
||||
minimal set of packets needed to bring the remote up to date — in ascending
|
||||
revision order, ready to send.
|
||||
|
||||
### `merge_packets(onion, packets, flush) -> MergeStats`
|
||||
|
||||
Applies incoming packets to a local `OnionFile`. Verifies BLAKE3 integrity for
|
||||
each packet, skips already-present revisions (idempotent), and optionally flushes.
|
||||
|
||||
### `ClawSyncManifest`
|
||||
|
||||
Compact summary of an `OnionFile` exchanged during sync negotiation. Contains
|
||||
revision count, HEAD revision, per-revision BLAKE3 hashes, and a set for O(1)
|
||||
revision lookup.
|
||||
|
||||
### `OnionLayerPacket`
|
||||
|
||||
Wire representation of a single revision: revision number, branch ID, parent
|
||||
revision, BLAKE3 root, and a list of `OnionPage` (h5_offset + page bytes).
|
||||
Serialized with rkyv for zero-copy deserialization.
|
||||
|
||||
## License
|
||||
|
||||
MIT — see repository root.
|
||||
Reference in New Issue
Block a user