From 82fd715e9194c485da9daeefffa047daf1afc2a3 Mon Sep 17 00:00:00 2001 From: harry Date: Thu, 27 Apr 2023 16:09:07 +0800 Subject: [PATCH] query optimize --- src/components/contracts/baseapp/Cargo.toml | 4 +-- .../contracts/modules/account/Cargo.toml | 4 +-- .../contracts/modules/ethereum/Cargo.toml | 4 +-- .../contracts/modules/evm/Cargo.toml | 4 +-- .../contracts/primitives/core/Cargo.toml | 4 +-- .../contracts/primitives/core/src/context.rs | 26 +++++++++++++------ .../contracts/primitives/storage/Cargo.toml | 4 +-- src/components/contracts/rpc/src/eth.rs | 2 ++ 8 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/components/contracts/baseapp/Cargo.toml b/src/components/contracts/baseapp/Cargo.toml index 6a9d76a5b..ad48f4b84 100644 --- a/src/components/contracts/baseapp/Cargo.toml +++ b/src/components/contracts/baseapp/Cargo.toml @@ -22,8 +22,8 @@ protobuf = "2.16" ruc = "1.0" serde = {version = "1.0.124", features = ["derive"]} serde_json = "1.0.40" -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } -fin_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } +fin_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } sha3 = "0.8" config = { path = "../../config"} diff --git a/src/components/contracts/modules/account/Cargo.toml b/src/components/contracts/modules/account/Cargo.toml index 190e3c2e4..d83f380d1 100644 --- a/src/components/contracts/modules/account/Cargo.toml +++ b/src/components/contracts/modules/account/Cargo.toml @@ -15,7 +15,7 @@ primitive-types = { version = "0.11.1", default-features = false, features = ["r ruc = "1.0" serde = { version = "1.0.124", features = ["derive"] } serde_json = "1.0.64" -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } # primitives, don't depend on any modules fp-core = { path = "../../primitives/core" } @@ -29,4 +29,4 @@ config = { path = "../../../config"} rand_chacha = "0.2" parking_lot = "0.12" zei = { git = "https://github.com/FindoraNetwork/zei", branch = "stable-main" } -fin_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +fin_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } diff --git a/src/components/contracts/modules/ethereum/Cargo.toml b/src/components/contracts/modules/ethereum/Cargo.toml index 993eb91d5..a548a6b63 100644 --- a/src/components/contracts/modules/ethereum/Cargo.toml +++ b/src/components/contracts/modules/ethereum/Cargo.toml @@ -37,8 +37,8 @@ enterprise-web3 = { path = "../../primitives/enterprise-web3" } baseapp = { path = "../../baseapp" } fp-mocks = { path = "../../primitives/mocks" } module-account = { path = "../account" } -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } -fin_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } +fin_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } [features] default = [] diff --git a/src/components/contracts/modules/evm/Cargo.toml b/src/components/contracts/modules/evm/Cargo.toml index df26111a6..07b9dd4a2 100644 --- a/src/components/contracts/modules/evm/Cargo.toml +++ b/src/components/contracts/modules/evm/Cargo.toml @@ -34,8 +34,8 @@ fp-traits = { path = "../../primitives/traits" } fp-types = { path = "../../primitives/types" } fp-utils = { path = "../../primitives/utils" } config = { path = "../../../config"} -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } -fin_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } +fin_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } ledger = { path = "../../../../ledger" } enterprise-web3 = { path = "../../primitives/enterprise-web3" } diff --git a/src/components/contracts/primitives/core/Cargo.toml b/src/components/contracts/primitives/core/Cargo.toml index a335cb3f3..58b8d4a53 100644 --- a/src/components/contracts/primitives/core/Cargo.toml +++ b/src/components/contracts/primitives/core/Cargo.toml @@ -16,8 +16,8 @@ parking_lot = "0.12" primitive-types = { version = "0.11.1", default-features = false, features = ["rlp", "byteorder", "serde"] } ruc = "1.0" serde = { version = "1.0.124", features = ["derive"] } -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4", optional = true } -fin_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4", optional = true } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize", optional = true } +fin_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize", optional = true } serde_with = { version = "1.9.4"} # primitives diff --git a/src/components/contracts/primitives/core/src/context.rs b/src/components/contracts/primitives/core/src/context.rs index d1d34c8df..e913567f9 100644 --- a/src/components/contracts/primitives/core/src/context.rs +++ b/src/components/contracts/primitives/core/src/context.rs @@ -38,6 +38,12 @@ pub struct Context { pub eth_cache: EthereumCache, } +impl Drop for Context { + fn drop(&mut self) { + self.state.write().clear_query_cache(); + } +} + impl Context { pub fn new( state_merkle: Arc>>, @@ -57,14 +63,18 @@ impl Context { let state = self.state.read().state_at(height); let db = State::new(self.db.read().chain_state(), false); match state { - Ok(state) => Some(Context { - state: Arc::new(RwLock::new(state)), - db: Arc::new(RwLock::new(db)), - run_mode: RunTxMode::None, - header: Default::default(), - header_hash: Default::default(), - eth_cache: Default::default(), - }), + Ok(state) => { + let ctx = Context { + state: Arc::new(RwLock::new(state)), + db: Arc::new(RwLock::new(db)), + run_mode: RunTxMode::None, + header: Default::default(), + header_hash: Default::default(), + eth_cache: Default::default(), + }; + ctx.state.write().create_query_cache(); + Some(ctx) + } _ => None, } } diff --git a/src/components/contracts/primitives/storage/Cargo.toml b/src/components/contracts/primitives/storage/Cargo.toml index 316ea0aa1..23eaf05f6 100644 --- a/src/components/contracts/primitives/storage/Cargo.toml +++ b/src/components/contracts/primitives/storage/Cargo.toml @@ -15,11 +15,11 @@ ruc = "1.0" serde = { version = "1.0.124", features = ["derive"] } serde_json = "1.0" sha2 = "0.9.5" -storage = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +storage = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } # primitives fp-core = { path = "../core" } config = { path = "../../../config"} [dev-dependencies] -temp_db = { git = "https://github.com/FindoraNetwork/storage.git", tag = "v1.1.4" } +temp_db = { git = "https://github.com/FindoraNetwork/storage.git", branch = "query_optimize" } diff --git a/src/components/contracts/rpc/src/eth.rs b/src/components/contracts/rpc/src/eth.rs index 7a4ffff85..b3989eace 100644 --- a/src/components/contracts/rpc/src/eth.rs +++ b/src/components/contracts/rpc/src/eth.rs @@ -383,6 +383,7 @@ impl EthApi for EthApiImpl { .map_err(|err| { internal_err(format!("evm runner call error: {err:?}")) })?; + debug!(target: "eth_rpc", "evm runner call result: {info:?}"); error_on_execution_failure(&info.exit_reason, &info.value)?; @@ -405,6 +406,7 @@ impl EthApi for EthApiImpl { .map_err(|err| { internal_err(format!("evm runner create error: {err:?}")) })?; + debug!(target: "eth_rpc", "evm runner create result: {info:?}"); error_on_execution_failure(&info.exit_reason, &[])?;