Verified cross-version file updates, block-integrity audits and sparse recovery for existing clients.
///|
test {
let bytes = b"abc"
let object = @moonfetchledger.ObjectSpec::new(
"https://example.test/a",
3L,
"\"v1\"",
@moonfetchledger.digest(bytes),
)
let indexer = @moonfetchledger.StorageIndexer::new(object, chunk_size=3)
indexer.push(bytes)
let reference = indexer.block_reference()
let recovered = reference.session()
assert_eq(recovered.confirmed_bytes(), 0L)
assert_true(recovered.reconcile_block({ start: 0L, end: 3L, }, Some(bytes)))
recovered.finish_recovery()
recovered.verify_complete(_ => bytes)
}///|
test {
let object = @moonfetchledger.ObjectSpec::new(
"https://example.test/a",
3L,
"\"v1\"",
@moonfetchledger.digest(b"abc"),
)
let manifest = object.to_manifest()
let restored = @moonfetchledger.ObjectSpec::from_manifest(manifest)
assert_eq(restored, object)
assert_eq(restored.to_manifest(), manifest)
}///|
test {
let bytes = b"abc"
let object = @moonfetchledger.ObjectSpec::new(
"https://example.test/a",
3L,
"\"v1\"",
@moonfetchledger.digest(bytes),
)
let session = @moonfetchledger.Session::new(object, chunk_size=3)
let lease = session.reserve_missing().unwrap()
let prepared = session.prepare_chunk(
lease,
bytes,
status=206,
etag=object.etag,
range=lease.range,
total=3L,
)
session.commit_written(prepared, bytes)
assert_true(session.unconfirmed_ranges().is_empty())
session.verify_complete(_ => bytes)
assert_eq(session.confirmed_bytes(), 3L)
}///|
test {
let bytes = b"abc"
let object = @moonfetchledger.ObjectSpec::new(
"https://example.test/a",
3L,
"\"v1\"",
@moonfetchledger.digest(bytes),
)
let indexer = @moonfetchledger.StorageIndexer::new(object, chunk_size=3)
assert_eq(indexer.next_range(), Some({ start: 0L, end: 3L, }))
indexer.push(bytes)
let session = indexer.finish()
assert_eq(session.confirmed_bytes(), 3L)
assert_true(session.unconfirmed_ranges().is_empty())
}pub suberror LedgerError {
InvalidSpec(String)
InvalidCheckpoint(String)
InvalidManifest(String)
StaleLease
InvalidResponse(String)
ReadbackMismatch(Int64)
RecoveryRequired
Incomplete(Int64)
DigestMismatch(String)
} derive(Debug)fn BlockReference::from_bytes(bytes : Bytes, expected_sha256 : String, expected : ObjectSpec) -> BlockReference raise LedgerErrorpub struct DeltaIndexer {
// private fields
}fn DeltaReference::from_bytes(bytes : Bytes, expected_sha256 : String) -> DeltaReference raise LedgerErrorfn DeltaReference::prepare_reuse(self : DeltaReference, target : Session, lease : Lease, bytes : Bytes) -> PreparedChunk raise LedgerErrorfn ObjectSpec::new(resource : String, length : Int64, etag : String, sha256 : String) -> ObjectSpec raise LedgerErrorpub struct PauseSignal {
// private fields
}pub struct SeedPlan {
scanned_bytes : Int64
reused_bytes : Int64
hashed_bytes : Int64
// private fields
}pub struct SeedPool {
// private fields
}pub struct SeedPoolPlan {
scanned_bytes : Int64
reused_bytes : Int64
hashed_bytes : Int64
// private fields
}pub struct SeedScanner {
// private fields
}fn SeedScanner::push_bounded(self : SeedScanner, bytes : Bytes, max_hash_bytes~ : Int64) -> ScanStep raise LedgerErrorfn Session::commit_written(self : Session, prepared : PreparedChunk, readback : Bytes) -> Unit raise LedgerErrorfn Session::prepare_chunk(self : Session, lease : Lease, bytes : Bytes, status~ : Int, etag~ : String, range~ : ByteRange, total~ : Int64, content_encoding? : String) -> PreparedChunk raise LedgerErrorfn Session::reconcile_block(self : Session, range : ByteRange, readback : Bytes?) -> Bool raise LedgerErrorpub struct StorageIndexer {
// private fields
}fn StorageIndexer::prepare_repair(self : StorageIndexer, target : Session, lease : Lease, bytes : Bytes) -> PreparedChunk raise LedgerErrorpub struct Verifier {
// private fields
}fn digest(bytes : Bytes) -> StringInstall
Download zipVerified cross-version file updates, block-integrity audits and sparse recovery for existing clients.