diff options
| author | tv <tv@krebsco.de> | 2026-10-26 20:45:38 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-26 20:45:38 +0100 |
| commit | 0cdf32d29212a705f6099880291ae6c611c56883 (patch) | |
| tree | 9f714237ecbbca041c88dcf1d6b2ac91cdee0971 /src/remake | |
| parent | 2c0799823ad0ec86d12600940ffb06f9d02ed339 (diff) | |
introduce bounded blob downloads
Diffstat (limited to 'src/remake')
| -rw-r--r-- | src/remake/content.rs | 2 | ||||
| -rw-r--r-- | src/remake/mod.rs | 11 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/remake/content.rs b/src/remake/content.rs index f3e549e..d036b87 100644 --- a/src/remake/content.rs +++ b/src/remake/content.rs @@ -66,7 +66,7 @@ pub(super) async fn ensure<H: Host>( } async fn fetch<H: Host>(host: &H, hash: [u8; 32], reference: &ContentRef) -> Option<Arc<Vec<u8>>> { - match host.fetch_content(hash).await { + match host.fetch_content(hash, reference.size).await { Ok(bytes) if bytes.len() as u64 == reference.size => { info!(content = %reference.blake3, bytes = bytes.len(), "Downloaded remake content"); let bytes = Arc::new(bytes); diff --git a/src/remake/mod.rs b/src/remake/mod.rs index 1906223..e6222a3 100644 --- a/src/remake/mod.rs +++ b/src/remake/mod.rs @@ -87,10 +87,13 @@ pub(crate) trait Host: Clone + Send + Sync + 'static { hash: automerge::ChangeHash, ) -> impl Future<Output = anyhow::Result<automerge::Change>> + Send; - /// Downloads content by its BLAKE3 hash from peers on the local epoch, checked - /// against it. - fn fetch_content(&self, hash: [u8; 32]) - -> impl Future<Output = anyhow::Result<Vec<u8>>> + Send; + /// Downloads content of `size` bytes by its BLAKE3 hash from peers on the local + /// epoch, checked against it. + fn fetch_content( + &self, + hash: [u8; 32], + size: u64, + ) -> impl Future<Output = anyhow::Result<Vec<u8>>> + Send; /// Starts sync with every peer (e.g. after holding it back). fn request_sync(&self); |
