mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 05:51:02 +00:00
init cache on restart (#3486)
This commit is contained in:
committed by
Bastian Köcher
parent
b80e611218
commit
8f29199076
+2
-2
@@ -299,8 +299,8 @@ impl<Block: BlockT> BlockchainCache<Block> for DbCacheSync<Block> {
|
||||
key: &CacheKeyId,
|
||||
at: &BlockId<Block>,
|
||||
) -> Option<((NumberFor<Block>, Block::Hash), Option<(NumberFor<Block>, Block::Hash)>, Vec<u8>)> {
|
||||
let cache = self.0.read();
|
||||
let storage = cache.cache_at.get(key)?.storage();
|
||||
let mut cache = self.0.write();
|
||||
let storage = cache.get_cache(*key).storage();
|
||||
let db = storage.db();
|
||||
let columns = storage.columns();
|
||||
let at = match *at {
|
||||
|
||||
@@ -1030,26 +1030,37 @@ pub(crate) mod tests {
|
||||
|
||||
#[test]
|
||||
fn cache_can_be_initialized_after_genesis_inserted() {
|
||||
let db = LightStorage::<Block>::new_test();
|
||||
let (genesis_hash, storage) = {
|
||||
let db = LightStorage::<Block>::new_test();
|
||||
|
||||
// before cache is initialized => None
|
||||
assert_eq!(db.cache().get_at(b"test", &BlockId::Number(0)), None);
|
||||
// before cache is initialized => None
|
||||
assert_eq!(db.cache().get_at(b"test", &BlockId::Number(0)), None);
|
||||
|
||||
// insert genesis block (no value for cache is provided)
|
||||
let mut genesis_hash = None;
|
||||
insert_block(&db, HashMap::new(), || {
|
||||
let header = default_header(&Default::default(), 0);
|
||||
genesis_hash = Some(header.hash());
|
||||
header
|
||||
});
|
||||
// insert genesis block (no value for cache is provided)
|
||||
let mut genesis_hash = None;
|
||||
insert_block(&db, HashMap::new(), || {
|
||||
let header = default_header(&Default::default(), 0);
|
||||
genesis_hash = Some(header.hash());
|
||||
header
|
||||
});
|
||||
|
||||
// after genesis is inserted => None
|
||||
assert_eq!(db.cache().get_at(b"test", &BlockId::Number(0)), None);
|
||||
// after genesis is inserted => None
|
||||
assert_eq!(db.cache().get_at(b"test", &BlockId::Number(0)), None);
|
||||
|
||||
// initialize cache
|
||||
db.cache().initialize(b"test", vec![42]).unwrap();
|
||||
// initialize cache
|
||||
db.cache().initialize(b"test", vec![42]).unwrap();
|
||||
|
||||
// after genesis is inserted + cache is initialized => Some
|
||||
// after genesis is inserted + cache is initialized => Some
|
||||
assert_eq!(
|
||||
db.cache().get_at(b"test", &BlockId::Number(0)),
|
||||
Some(((0, genesis_hash.unwrap()), None, vec![42])),
|
||||
);
|
||||
|
||||
(genesis_hash, db.db)
|
||||
};
|
||||
|
||||
// restart && check that after restart value is read from the cache
|
||||
let db = LightStorage::<Block>::from_kvdb(storage as Arc<_>).expect("failed to create test-db");
|
||||
assert_eq!(
|
||||
db.cache().get_at(b"test", &BlockId::Number(0)),
|
||||
Some(((0, genesis_hash.unwrap()), None, vec![42])),
|
||||
|
||||
Reference in New Issue
Block a user