Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit e68295b

Browse files
authored
Replace parity-snappy with snap (#11715)
1 parent 00d47c1 commit e68295b

File tree

16 files changed

+69
-70
lines changed

16 files changed

+69
-70
lines changed

Cargo.lock

Lines changed: 11 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ethcore/snapshot/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ parking_lot = "0.10.0"
3636
rlp = "0.4.5"
3737
rlp-derive = "0.1"
3838
scopeguard = "1.1.0"
39-
snappy = { package = "parity-snappy", version ="0.1.0" }
39+
snap = "1"
4040
trie-db = "0.20.0"
4141
triehash = { package = "triehash-ethereum", version = "0.2", path = "../../util/triehash-ethereum" }
4242

ethcore/snapshot/snapshot-tests/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ parity-crypto = { version = "0.6.1", features = ["publickey"] }
3131
rand = "0.7.3"
3232
rand_xorshift = "0.2.0"
3333
rlp = "0.4.5"
34-
snappy = { package = "parity-snappy", version ="0.1.0" }
34+
snap = "1"
3535
snapshot = { path = "../../snapshot", features = ["test-helpers"] }
3636
spec = { path = "../../spec" }
3737
tempfile = "3.1"

ethcore/snapshot/snapshot-tests/src/helpers.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,22 @@ pub fn restore(
181181
for state_chunk_hash in manifest.state_hashes.iter() {
182182
trace!(target: "snapshot", "state chunk hash: {}", state_chunk_hash);
183183
let chunk = reader.chunk(*state_chunk_hash).unwrap();
184-
let len = snappy::decompress_into(&chunk, &mut snappy_buffer).unwrap();
184+
let required_len = snap::raw::decompress_len(&chunk)?;
185+
if snappy_buffer.len() < required_len {
186+
snappy_buffer.resize_with(required_len, Default::default);
187+
}
188+
let len = snap::raw::Decoder::new().decompress(&chunk, &mut snappy_buffer).unwrap();
185189
state.feed(&snappy_buffer[..len], &flag)?;
186190
}
187191

188192
trace!(target: "snapshot", "restoring secondary");
189193
for chunk_hash in manifest.block_hashes.iter() {
190194
let chunk = reader.chunk(*chunk_hash).unwrap();
191-
let len = snappy::decompress_into(&chunk, &mut snappy_buffer).unwrap();
195+
let required_len = snap::raw::decompress_len(&chunk)?;
196+
if snappy_buffer.len() < required_len {
197+
snappy_buffer.resize_with(required_len, Default::default);
198+
}
199+
let len = snap::raw::Decoder::new().decompress(&chunk, &mut snappy_buffer).unwrap();
192200
secondary.feed(&snappy_buffer[..len], engine, &flag)?;
193201
}
194202

ethcore/snapshot/snapshot-tests/src/proof_of_work.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ use snapshot::{
3232
PowSnapshot,
3333
};
3434
use parking_lot::{Mutex, RwLock};
35-
use snappy;
3635
use keccak_hash::KECCAK_NULL_RLP;
3736
use kvdb::DBTransaction;
3837
use ethcore::test_helpers;
@@ -97,7 +96,7 @@ fn chunk_and_restore(amount: u64) {
9796
let flag = AtomicBool::new(true);
9897
for chunk_hash in &reader.manifest().block_hashes {
9998
let compressed = reader.chunk(*chunk_hash).unwrap();
100-
let chunk = snappy::decompress(&compressed).unwrap();
99+
let chunk = snap::raw::Decoder::new().decompress_vec(&compressed).unwrap();
101100
rebuilder.feed(&chunk, engine.as_ref(), &flag).unwrap();
102101
}
103102

ethcore/snapshot/snapshot-tests/src/state.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ fn snap_and_restore() {
8686

8787
for chunk_hash in &reader.manifest().state_hashes {
8888
let raw = reader.chunk(*chunk_hash).unwrap();
89-
let chunk = snappy::decompress(&raw).unwrap();
89+
let chunk = snap::raw::Decoder::new().decompress_vec(&raw).unwrap();
9090

9191
rebuilder.feed(&chunk, &flag).unwrap();
9292
}
@@ -210,7 +210,7 @@ fn checks_flag() {
210210

211211
for chunk_hash in &reader.manifest().state_hashes {
212212
let raw = reader.chunk(*chunk_hash).unwrap();
213-
let chunk = snappy::decompress(&raw).unwrap();
213+
let chunk = snap::raw::Decoder::new().decompress_vec(&raw).unwrap();
214214

215215
match rebuilder.feed(&chunk, &flag) {
216216
Err(Error::Snapshot(SnapshotError::RestorationAborted)) => {},

ethcore/snapshot/src/lib.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ use log::{debug, info, trace};
4848
use num_cpus;
4949
use rand::{Rng, rngs::OsRng};
5050
use rlp::{RlpStream, Rlp};
51-
use snappy;
5251
use trie_db::{Trie, TrieMut};
5352

5453
pub use self::consensus::*;
@@ -202,11 +201,11 @@ pub fn chunk_secondary<'a>(
202201
progress: &'a RwLock<Progress>
203202
) -> Result<Vec<H256>, Error> {
204203
let mut chunk_hashes = Vec::new();
205-
let mut snappy_buffer = vec![0; snappy::max_compressed_len(PREFERRED_CHUNK_SIZE)];
204+
let mut snappy_buffer = vec![0; snap::raw::max_compress_len(PREFERRED_CHUNK_SIZE)];
206205

207206
{
208207
let mut chunk_sink = |raw_data: &[u8]| {
209-
let compressed_size = snappy::compress_into(raw_data, &mut snappy_buffer);
208+
let compressed_size = snap::raw::Encoder::new().compress(raw_data, &mut snappy_buffer)?;
210209
let compressed = &snappy_buffer[..compressed_size];
211210
let hash = keccak(&compressed);
212211
let size = compressed.len();
@@ -265,7 +264,11 @@ impl<'a> StateChunker<'a> {
265264

266265
let raw_data = stream.out();
267266

268-
let compressed_size = snappy::compress_into(&raw_data, &mut self.snappy_buffer);
267+
let required = snap::raw::max_compress_len(raw_data.len());
268+
if self.snappy_buffer.len() < required {
269+
self.snappy_buffer.resize_with(required, Default::default);
270+
}
271+
let compressed_size = snap::raw::Encoder::new().compress(&raw_data, &mut self.snappy_buffer)?;
269272
let compressed = &self.snappy_buffer[..compressed_size];
270273
let hash = keccak(&compressed);
271274

@@ -307,7 +310,7 @@ pub fn chunk_state<'a>(
307310
hashes: Vec::new(),
308311
rlps: Vec::new(),
309312
cur_size: 0,
310-
snappy_buffer: vec![0; snappy::max_compressed_len(PREFERRED_CHUNK_SIZE)],
313+
snappy_buffer: vec![0; snap::raw::max_compress_len(PREFERRED_CHUNK_SIZE)],
311314
writer,
312315
progress,
313316
thread_idx,

ethcore/snapshot/src/service.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ use keccak_hash::keccak;
4141
use kvdb::DBTransaction;
4242
use log::{debug, error, info, trace, warn};
4343
use parking_lot::{Mutex, RwLock, RwLockReadGuard};
44-
use snappy;
4544
use trie_db::TrieError;
4645

4746
use crate::{SnapshotClient, SnapshotWriter};
@@ -150,12 +149,15 @@ impl Restoration {
150149
/// Feeds a chunk of state data to the Restoration. Aborts early if `flag` becomes false.
151150
pub fn feed_state(&mut self, hash: H256, chunk: &[u8], flag: &AtomicBool) -> Result<(), Error> {
152151
if self.state_chunks_left.contains(&hash) {
153-
let expected_len = snappy::decompressed_len(chunk)?;
152+
let expected_len = snap::raw::decompress_len(chunk)?;
154153
if expected_len > MAX_CHUNK_SIZE {
155154
trace!(target: "snapshot", "Discarding large chunk: {} vs {}", expected_len, MAX_CHUNK_SIZE);
156155
return Err(SnapshotError::ChunkTooLarge.into());
157156
}
158-
let len = snappy::decompress_into(chunk, &mut self.snappy_buffer)?;
157+
if self.snappy_buffer.len() < expected_len {
158+
self.snappy_buffer.resize_with(expected_len, Default::default);
159+
}
160+
let len = snap::raw::Decoder::new().decompress(chunk, &mut self.snappy_buffer)?;
159161

160162
self.state.feed(&self.snappy_buffer[..len], flag)?;
161163

@@ -173,12 +175,15 @@ impl Restoration {
173175
/// Feeds a chunk of block data to the `Restoration`. Aborts early if `flag` becomes false.
174176
pub fn feed_blocks(&mut self, hash: H256, chunk: &[u8], engine: &dyn Engine, flag: &AtomicBool) -> Result<(), Error> {
175177
if self.block_chunks_left.contains(&hash) {
176-
let expected_len = snappy::decompressed_len(chunk)?;
178+
let expected_len = snap::raw::decompress_len(chunk)?;
177179
if expected_len > MAX_CHUNK_SIZE {
178180
trace!(target: "snapshot", "Discarding large chunk: {} vs {}", expected_len, MAX_CHUNK_SIZE);
179181
return Err(SnapshotError::ChunkTooLarge.into());
180182
}
181-
let len = snappy::decompress_into(chunk, &mut self.snappy_buffer)?;
183+
if self.snappy_buffer.len() < expected_len {
184+
self.snappy_buffer.resize_with(expected_len, Default::default);
185+
}
186+
let len = snap::raw::Decoder::new().decompress(chunk, &mut self.snappy_buffer)?;
182187

183188
self.secondary.feed(&self.snappy_buffer[..len], engine, flag)?;
184189
if let Some(ref mut writer) = self.writer.as_mut() {

ethcore/types/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ ethjson = { path = "../../json" }
1515
hash = { package = "keccak-hash", version = "0.5" }
1616
parity-crypto = { version = "0.6.1", features = ["publickey"] }
1717
parity-util-mem = "0.6.0"
18-
parity-snappy = "0.1"
1918
ethtrie = { package = "patricia-trie-ethereum", path = "../../util/patricia-trie-ethereum" }
2019
rlp = "0.4.5"
2120
rlp-derive = "0.1"
21+
snap = "1"
2222
unexpected = { path = "../../util/unexpected" }
2323
vm = { path = "../vm"}
2424

ethcore/types/src/errors/ethcore_error.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ use std::{error, fmt};
2424
use derive_more::{Display, From};
2525
use ethereum_types::{U256, U512};
2626
use ethtrie::TrieError;
27-
use parity_snappy::InvalidInput;
2827
use parity_crypto::publickey::Error as EthPublicKeyCryptoError;
2928

3029
/// Ethcore Result
@@ -59,7 +58,7 @@ pub enum EthcoreError {
5958
Transaction(TransactionError),
6059
/// Snappy error
6160
#[display(fmt = "Snappy error: {}", _0)]
62-
Snappy(InvalidInput),
61+
Snappy(snap::Error),
6362
/// Consensus vote error.
6463
#[display(fmt = "Engine error: {}", _0)]
6564
Engine(EngineError),

0 commit comments

Comments
 (0)