diff options
author | Alex <alex@adnab.me> | 2024-03-26 14:24:58 +0000 |
---|---|---|
committer | Alex <alex@adnab.me> | 2024-03-26 14:24:58 +0000 |
commit | cdde0f19ee37848370d4a138d95c55bfaca820ed (patch) | |
tree | 54128ccf24e8598c52c2a5366ad0b509bf1c296e /src/util | |
parent | 7e0107c47db71e8da13990c9111ebde8cbf60d8f (diff) | |
parent | 74949c69cbf1a8222b6d10a02fcf5fe139ccb560 (diff) | |
download | garage-cdde0f19ee37848370d4a138d95c55bfaca820ed.tar.gz garage-cdde0f19ee37848370d4a138d95c55bfaca820ed.zip |
Merge pull request 'checksum algorithms' (#787) from s3-checksum into next-0.10
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/787
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/async_hash.rs | 61 | ||||
-rw-r--r-- | src/util/lib.rs | 1 |
2 files changed, 0 insertions, 62 deletions
diff --git a/src/util/async_hash.rs b/src/util/async_hash.rs deleted file mode 100644 index 5631ea6b..00000000 --- a/src/util/async_hash.rs +++ /dev/null @@ -1,61 +0,0 @@ -use bytes::Bytes; -use digest::Digest; - -use tokio::sync::mpsc; -use tokio::task::JoinHandle; - -use crate::data::*; - -/// Compute the sha256 of a slice, -/// spawning on a tokio thread for CPU-intensive processing -/// The argument has to be an owned Bytes, as it is moved out to a new thread. -pub async fn async_sha256sum(data: Bytes) -> Hash { - tokio::task::spawn_blocking(move || sha256sum(&data)) - .await - .unwrap() -} - -/// Compute the blake2sum of a slice, -/// spawning on a tokio thread for CPU-intensive processing. -/// The argument has to be an owned Bytes, as it is moved out to a new thread. -pub async fn async_blake2sum(data: Bytes) -> Hash { - tokio::task::spawn_blocking(move || blake2sum(&data)) - .await - .unwrap() -} - -// ---- - -pub struct AsyncHasher<D: Digest> { - sendblk: mpsc::Sender<Bytes>, - task: JoinHandle<digest::Output<D>>, -} - -impl<D: Digest> AsyncHasher<D> { - pub fn new() -> Self { - let (sendblk, mut recvblk) = mpsc::channel::<Bytes>(1); - let task = tokio::task::spawn_blocking(move || { - let mut digest = D::new(); - while let Some(blk) = recvblk.blocking_recv() { - digest.update(&blk[..]); - } - digest.finalize() - }); - Self { sendblk, task } - } - - pub async fn update(&self, b: Bytes) { - self.sendblk.send(b).await.unwrap(); - } - - pub async fn finalize(self) -> digest::Output<D> { - drop(self.sendblk); - self.task.await.unwrap() - } -} - -impl<D: Digest> Default for AsyncHasher<D> { - fn default() -> Self { - Self::new() - } -} diff --git a/src/util/lib.rs b/src/util/lib.rs index 7df77959..8b035ff0 100644 --- a/src/util/lib.rs +++ b/src/util/lib.rs @@ -3,7 +3,6 @@ #[macro_use] extern crate tracing; -pub mod async_hash; pub mod background; pub mod config; pub mod crdt; |