diff options
author | Alex Auvolat <alex@adnab.me> | 2022-07-18 17:18:47 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-07-29 12:24:44 +0200 |
commit | 1b2e1296eb99630e969e585ede0424072adc2d0c (patch) | |
tree | e16b953e1f53e57c6efd11e688e955fa36cbb186 /src/block/block.rs | |
parent | a184f0d0b5f1d84524f7ba7302a4919567acec56 (diff) | |
download | garage-1b2e1296eb99630e969e585ede0424072adc2d0c.tar.gz garage-1b2e1296eb99630e969e585ede0424072adc2d0c.zip |
Compute hashes on dedicated threads
Diffstat (limited to 'src/block/block.rs')
-rw-r--r-- | src/block/block.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/block/block.rs b/src/block/block.rs index 4d3fbcb8..f17bd2c0 100644 --- a/src/block/block.rs +++ b/src/block/block.rs @@ -1,3 +1,4 @@ +use bytes::Bytes; use serde::{Deserialize, Serialize}; use zstd::stream::{decode_all as zstd_decode, Encoder}; @@ -61,13 +62,17 @@ impl DataBlock { } } - pub fn from_buffer(data: Vec<u8>, level: Option<i32>) -> DataBlock { - if let Some(level) = level { - if let Ok(data) = zstd_encode(&data[..], level) { - return DataBlock::Compressed(data); + pub async fn from_buffer(data: Bytes, level: Option<i32>) -> DataBlock { + tokio::task::spawn_blocking(move || { + if let Some(level) = level { + if let Ok(data) = zstd_encode(&data[..], level) { + return DataBlock::Compressed(data); + } } - } - DataBlock::Plain(data) + DataBlock::Plain(data.to_vec()) // TODO: remove to_vec here + }) + .await + .unwrap() } } |