From 24c3220533a7229904a13124623fb61f042636e0 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Mon, 2 Oct 2023 17:31:14 +0300 Subject: [PATCH] [feature] #3929: Lazy queries inside wasm Signed-off-by: Daniil Polyakov --- Cargo.lock | 116 ++++--- cli/Cargo.toml | 1 - cli/src/lib.rs | 29 +- cli/src/torii/mod.rs | 126 +++----- cli/src/torii/routing.rs | 195 ++++-------- cli/src/torii/utils.rs | 1 + client/src/client.rs | 67 ++-- .../src/lib.rs | 9 +- .../executor_with_custom_token/src/lib.rs | 10 + config/Cargo.toml | 1 + config/iroha_test_config.json | 6 +- config/src/iroha.rs | 7 +- config/src/lib.rs | 1 + config/src/live_query_store.rs | 44 +++ config/src/torii.rs | 9 +- configs/peer/config.json | 6 +- configs/peer/executor.wasm | Bin 501672 -> 494682 bytes core/Cargo.toml | 1 + core/benches/blocks/common.rs | 4 +- core/benches/kura.rs | 4 +- core/benches/validation.rs | 6 +- core/src/block.rs | 43 ++- core/src/lib.rs | 1 + {cli/src/torii => core/src/query}/cursor.rs | 23 +- core/src/query/mod.rs | 5 + .../torii => core/src/query}/pagination.rs | 2 + core/src/query/store.rs | 278 ++++++++++++++++ core/src/queue.rs | 55 +++- core/src/smartcontracts/isi/mod.rs | 18 +- core/src/smartcontracts/isi/query.rs | 36 ++- core/src/smartcontracts/wasm.rs | 191 +++++++---- core/src/snapshot.rs | 3 + core/src/sumeragi/main_loop.rs | 24 +- core/src/wsv.rs | 44 ++- data_model/src/lib.rs | 70 ++--- data_model/src/query/cursor.rs | 14 + data_model/src/query/mod.rs | 79 ++++- data_model/src/query/pagination.rs | 9 +- data_model/src/query/sorting.rs | 3 +- data_model/src/smart_contract.rs | 55 ++++ docs/source/references/config.md | 41 ++- docs/source/references/schema.json | 4 + schema/gen/src/lib.rs | 5 +- smart_contract/Cargo.toml | 2 + smart_contract/derive/src/entrypoint.rs | 2 +- .../executor/derive/src/entrypoint.rs | 2 +- smart_contract/executor/derive/src/token.rs | 14 +- smart_contract/executor/src/default.rs | 2 +- smart_contract/executor/src/permission.rs | 11 +- smart_contract/src/lib.rs | 297 ++++++++++++++++-- .../trigger/derive/src/entrypoint.rs | 2 +- telemetry/derive/tests/ui_fail/args_no_wsv.rs | 4 +- .../derive/tests/ui_fail/args_no_wsv.stderr | 4 +- telemetry/derive/tests/ui_fail/bare_spec.rs | 3 - .../derive/tests/ui_fail/bare_spec.stderr | 4 +- .../derive/tests/ui_fail/doubled_plus.rs | 4 +- .../derive/tests/ui_fail/doubled_plus.stderr | 4 +- telemetry/derive/tests/ui_fail/no_args.rs | 3 - telemetry/derive/tests/ui_fail/no_args.stderr | 4 +- .../tests/ui_fail/non_snake_case_name.rs | 2 - .../tests/ui_fail/non_snake_case_name.stderr | 4 +- telemetry/derive/tests/ui_fail/not_execute.rs | 5 +- .../derive/tests/ui_fail/not_execute.stderr | 4 +- .../derive/tests/ui_fail/not_return_result.rs | 5 +- .../tests/ui_fail/not_return_result.stderr | 4 +- .../derive/tests/ui_fail/return_nothing.rs | 5 +- .../tests/ui_fail/return_nothing.stderr | 4 +- .../derive/tests/ui_fail/trailing_plus.rs | 5 +- .../derive/tests/ui_fail/trailing_plus.stderr | 4 +- tools/parity_scale_decoder/src/main.rs | 3 +- 70 files changed, 1395 insertions(+), 658 deletions(-) create mode 100644 config/src/live_query_store.rs rename {cli/src/torii => core/src/query}/cursor.rs (71%) create mode 100644 core/src/query/mod.rs rename {cli/src/torii => core/src/query}/pagination.rs (97%) create mode 100644 core/src/query/store.rs diff --git a/Cargo.lock b/Cargo.lock index 4d65b134304..5f5b2fb2936 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2719,7 +2719,7 @@ checksum = "b33c9a5c599d67d051c4dc25eb1b6b4ef715d1763c20c85c688717a1734f204e" [[package]] name = "iroha" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "async-trait", "color-eyre", @@ -2754,14 +2754,13 @@ dependencies = [ "thread-local-panic-hook", "tokio", "tracing", - "uuid", "vergen", "warp", ] [[package]] name = "iroha_cli_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "proc-macro2", "quote", @@ -2771,7 +2770,7 @@ dependencies = [ [[package]] name = "iroha_client" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "attohttpc", "base64 0.21.4", @@ -2810,7 +2809,7 @@ dependencies = [ [[package]] name = "iroha_client_cli" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 3.2.25", "color-eyre", @@ -2829,7 +2828,7 @@ dependencies = [ [[package]] name = "iroha_config" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "cfg-if", "derive_more", @@ -2845,6 +2844,7 @@ dependencies = [ "proptest", "serde", "serde_json", + "stacker", "strum 0.25.0", "thiserror", "tracing", @@ -2854,7 +2854,7 @@ dependencies = [ [[package]] name = "iroha_config_base" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "crossbeam", "displaydoc", @@ -2870,7 +2870,7 @@ dependencies = [ [[package]] name = "iroha_config_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_macro_utils", "proc-macro-error", @@ -2881,7 +2881,7 @@ dependencies = [ [[package]] name = "iroha_core" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "async-trait", "byte-unit", @@ -2914,12 +2914,13 @@ dependencies = [ "tempfile", "thiserror", "tokio", + "uuid", "wasmtime", ] [[package]] name = "iroha_core_wasm_codec_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "once_cell", "proc-macro-error", @@ -2930,7 +2931,7 @@ dependencies = [ [[package]] name = "iroha_crypto" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "derive_more", "getset", @@ -2950,7 +2951,7 @@ dependencies = [ [[package]] name = "iroha_data_model" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "base64 0.21.4", "criterion", @@ -2977,7 +2978,7 @@ dependencies = [ [[package]] name = "iroha_data_model_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "derive_more", @@ -2996,7 +2997,7 @@ dependencies = [ [[package]] name = "iroha_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "impls", @@ -3010,7 +3011,7 @@ dependencies = [ [[package]] name = "iroha_dsl" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_client", "iroha_config", @@ -3024,7 +3025,7 @@ dependencies = [ [[package]] name = "iroha_executor" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_data_model", "iroha_executor_derive", @@ -3037,7 +3038,7 @@ dependencies = [ [[package]] name = "iroha_executor_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "proc-macro2", "quote", @@ -3046,7 +3047,7 @@ dependencies = [ [[package]] name = "iroha_ffi" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "derive_more", "getset", @@ -3056,7 +3057,7 @@ dependencies = [ [[package]] name = "iroha_ffi_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "getset", @@ -3073,7 +3074,7 @@ dependencies = [ [[package]] name = "iroha_futures" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_config", "iroha_futures_derive", @@ -3087,7 +3088,7 @@ dependencies = [ [[package]] name = "iroha_futures_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_macro_utils", "manyhow", @@ -3098,7 +3099,7 @@ dependencies = [ [[package]] name = "iroha_genesis" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "derive_more", "eyre", @@ -3116,7 +3117,7 @@ dependencies = [ [[package]] name = "iroha_logger" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "color-eyre", "console-subscriber", @@ -3136,14 +3137,14 @@ dependencies = [ [[package]] name = "iroha_macro" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_derive", ] [[package]] name = "iroha_macro_utils" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "drop_bomb", @@ -3156,7 +3157,7 @@ dependencies = [ [[package]] name = "iroha_p2p" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "aead", "async-trait", @@ -3179,7 +3180,7 @@ dependencies = [ [[package]] name = "iroha_primitives" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "derive_more", "displaydoc", @@ -3200,7 +3201,7 @@ dependencies = [ [[package]] name = "iroha_primitives_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_primitives", "manyhow", @@ -3211,7 +3212,7 @@ dependencies = [ [[package]] name = "iroha_schema" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "fixnum", "impls", @@ -3223,7 +3224,7 @@ dependencies = [ [[package]] name = "iroha_schema_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "iroha_schema", @@ -3236,7 +3237,7 @@ dependencies = [ [[package]] name = "iroha_schema_gen" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_crypto", "iroha_data_model", @@ -3247,9 +3248,11 @@ dependencies = [ [[package]] name = "iroha_smart_contract" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ + "derive_more", "iroha_data_model", + "iroha_macro", "iroha_smart_contract_derive", "iroha_smart_contract_utils", "parity-scale-codec", @@ -3258,7 +3261,7 @@ dependencies = [ [[package]] name = "iroha_smart_contract_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "proc-macro2", "quote", @@ -3267,7 +3270,7 @@ dependencies = [ [[package]] name = "iroha_smart_contract_utils" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_data_model", "parity-scale-codec", @@ -3276,11 +3279,11 @@ dependencies = [ [[package]] name = "iroha_substrate" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" [[package]] name = "iroha_swarm" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 4.4.6", "color-eyre", @@ -3301,7 +3304,7 @@ dependencies = [ [[package]] name = "iroha_telemetry" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "async-trait", "chrono", @@ -3324,7 +3327,7 @@ dependencies = [ [[package]] name = "iroha_telemetry_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_core", "proc-macro-error", @@ -3336,7 +3339,7 @@ dependencies = [ [[package]] name = "iroha_trigger" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_data_model", "iroha_smart_contract", @@ -3346,7 +3349,7 @@ dependencies = [ [[package]] name = "iroha_trigger_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "proc-macro2", "quote", @@ -3355,7 +3358,7 @@ dependencies = [ [[package]] name = "iroha_version" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_data_model", "iroha_logger", @@ -3370,7 +3373,7 @@ dependencies = [ [[package]] name = "iroha_version_derive" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "darling", "iroha_macro", @@ -3387,7 +3390,7 @@ dependencies = [ [[package]] name = "iroha_wasm_builder" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "eyre", "path-absolutize", @@ -3398,7 +3401,7 @@ dependencies = [ [[package]] name = "iroha_wasm_builder_cli" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 4.4.6", "color-eyre", @@ -3409,7 +3412,7 @@ dependencies = [ [[package]] name = "iroha_wasm_codec" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "iroha_core_wasm_codec_derive", "parity-scale-codec", @@ -3419,7 +3422,7 @@ dependencies = [ [[package]] name = "iroha_wasm_test_runner" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "anyhow", "wasmtime", @@ -3529,7 +3532,7 @@ dependencies = [ [[package]] name = "kagami" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 4.4.6", "color-eyre", @@ -3556,7 +3559,7 @@ dependencies = [ [[package]] name = "kura_inspector" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 4.4.6", "iroha_core", @@ -3992,7 +3995,7 @@ dependencies = [ [[package]] name = "parity_scale_decoder" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "clap 4.4.6", "colored", @@ -5186,6 +5189,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -5382,7 +5398,7 @@ dependencies = [ [[package]] name = "test_network" -version = "2.0.0-pre-rc.19" +version = "2.0.0-pre-rc.20" dependencies = [ "eyre", "futures", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 56b2d7bc1c4..89d1f08a41b 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -78,7 +78,6 @@ tempfile = { workspace = true } dashmap = { workspace = true } thread-local-panic-hook = { version = "0.1.0", optional = true } -uuid = { version = "1.4.1", features = ["v4"] } [dev-dependencies] serial_test = "2.0.0" diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 3d86d1cfdda..7d0085c2d36 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -20,6 +20,7 @@ use iroha_core::{ handler::ThreadHandler, kura::Kura, prelude::{World, WorldStateView}, + query::store::LiveQueryStore, queue::Queue, smartcontracts::isi::Registrable as _, snapshot::{try_read_snapshot, SnapshotMaker, SnapshotMakerHandle}, @@ -92,12 +93,13 @@ pub struct Iroha { pub kura: Arc, /// Torii web server pub torii: Option, - /// Snapshot service, + /// Snapshot service pub snapshot_maker: SnapshotMakerHandle, /// Thread handlers thread_handlers: Vec, - /// A boolean value indicating whether or not the peers will recieve data from the network. Used in - /// sumeragi testing. + + /// A boolean value indicating whether or not the peers will receive data from the network. + /// Used in sumeragi testing. #[cfg(debug_assertions)] pub freeze_status: Arc, } @@ -241,13 +243,25 @@ impl Iroha { std::path::Path::new(&config.kura.block_store_path), config.kura.debug_output_new_blocks, )?; + let live_query_store_handle = + LiveQueryStore::from_configuration(config.live_query_store).start(); - let notify_shutdown = Arc::new(Notify::new()); let block_count = kura.init()?; - let wsv = try_read_snapshot(&config.snapshot.dir_path, &kura, block_count).map_or_else( + let wsv = try_read_snapshot( + &config.snapshot.dir_path, + &kura, + live_query_store_handle.clone(), + block_count, + ) + .map_or_else( |error| { iroha_logger::warn!(%error, "Failed to load wsv from snapshot, creating empty wsv"); - WorldStateView::from_configuration(config.wsv, world, Arc::clone(&kura)) + WorldStateView::from_configuration( + config.wsv, + world, + Arc::clone(&kura), + live_query_store_handle.clone(), + ) }, |wsv| { iroha_logger::info!( @@ -298,6 +312,8 @@ impl Iroha { #[cfg(debug_assertions)] let freeze_status = Arc::new(AtomicBool::new(false)); + let notify_shutdown = Arc::new(Notify::new()); + NetworkRelay { sumeragi: sumeragi.clone(), block_sync, @@ -318,6 +334,7 @@ impl Iroha { events_sender, Arc::clone(¬ify_shutdown), sumeragi.clone(), + live_query_store_handle, Arc::clone(&kura), ); diff --git a/cli/src/torii/mod.rs b/cli/src/torii/mod.rs index a478fe4f554..d27dd0c32ab 100644 --- a/cli/src/torii/mod.rs +++ b/cli/src/torii/mod.rs @@ -7,21 +7,18 @@ use std::{ fmt::{Debug, Write as _}, net::ToSocketAddrs, sync::Arc, - time::{Duration, Instant}, }; -use dashmap::DashMap; use futures::{stream::FuturesUnordered, StreamExt}; use iroha_core::{ kura::Kura, prelude::*, + query::store::LiveQueryStoreHandle, queue::{self, Queue}, sumeragi::SumeragiHandle, EventsSender, }; -use iroha_data_model::Value; -use parity_scale_codec::Encode; -use tokio::{sync::Notify, time::sleep}; +use tokio::sync::Notify; use utils::*; use warp::{ http::StatusCode, @@ -30,56 +27,10 @@ use warp::{ Filter as _, Reply, }; -use self::cursor::Batched; - #[macro_use] pub(crate) mod utils; -mod cursor; -mod pagination; mod routing; -type LiveQuery = Batched>; - -#[derive(Default)] -struct LiveQueryStore { - queries: DashMap<(String, Vec), (LiveQuery, Instant)>, -} - -impl LiveQueryStore { - fn insert(&self, query_id: String, request: T, live_query: LiveQuery) { - self.queries - .insert((query_id, request.encode()), (live_query, Instant::now())); - } - - fn remove(&self, query_id: &str, request: &T) -> Option { - self.queries - .remove(&(query_id.to_string(), request.encode())) - .map(|(_, (output, _))| output) - } - - fn expired_query_cleanup( - self: Arc, - idle_time: Duration, - notify_shutdown: Arc, - ) -> tokio::task::JoinHandle<()> { - tokio::task::spawn(async move { - loop { - tokio::select! { - _ = sleep(idle_time) => { - self.queries - .retain(|_, (_, last_access_time)| last_access_time.elapsed() <= idle_time); - }, - _ = notify_shutdown.notified() => { - iroha_logger::info!("Query cleanup service is being shut down."); - break; - } - else => break, - } - } - }) - } -} - /// Main network handler and the only entrypoint of the Iroha. pub struct Torii { iroha_cfg: super::Configuration, @@ -87,14 +38,14 @@ pub struct Torii { events: EventsSender, notify_shutdown: Arc, sumeragi: SumeragiHandle, - query_store: Arc, + query_service: LiveQueryStoreHandle, kura: Arc, } /// Torii errors. #[derive(Debug, thiserror::Error, displaydoc::Display)] pub enum Error { - /// Failed to execute or validate query + /// Failed to process query Query(#[from] iroha_data_model::ValidationFail), /// Failed to accept transaction AcceptTransaction(#[from] iroha_core::tx::AcceptTransactionFail), @@ -107,43 +58,14 @@ pub enum Error { #[cfg(feature = "telemetry")] /// Error while getting Prometheus metrics Prometheus(#[source] eyre::Report), - /// Error while resuming cursor - UnknownCursor, -} - -/// Status code for query error response. -fn query_status_code(validation_error: &iroha_data_model::ValidationFail) -> StatusCode { - use iroha_data_model::{ - isi::error::InstructionExecutionError, query::error::QueryExecutionFail::*, - ValidationFail::*, - }; - - match validation_error { - NotPermitted(_) => StatusCode::FORBIDDEN, - QueryFailed(query_error) - | InstructionFailed(InstructionExecutionError::Query(query_error)) => match query_error { - Evaluate(_) | Conversion(_) => StatusCode::BAD_REQUEST, - Signature(_) => StatusCode::UNAUTHORIZED, - Find(_) => StatusCode::NOT_FOUND, - }, - TooComplex => StatusCode::UNPROCESSABLE_ENTITY, - InternalError(_) => StatusCode::INTERNAL_SERVER_ERROR, - InstructionFailed(error) => { - iroha_logger::error!( - ?error, - "Query validation failed with unexpected error. This means a bug inside Runtime Executor", - ); - StatusCode::INTERNAL_SERVER_ERROR - } - } } impl Reply for Error { fn into_response(self) -> Response { - use Error::*; match self { - Query(err) => { - reply::with_status(utils::Scale(&err), query_status_code(&err)).into_response() + Self::Query(err) => { + reply::with_status(utils::Scale(&err), Self::query_status_code(&err)) + .into_response() } _ => reply::with_status(Self::to_string(&self), self.status_code()).into_response(), } @@ -153,11 +75,10 @@ impl Reply for Error { impl Error { fn status_code(&self) -> StatusCode { use Error::*; + match self { - Query(e) => query_status_code(e), - AcceptTransaction(_) | ConfigurationReload(_) | UnknownCursor => { - StatusCode::BAD_REQUEST - } + Query(e) => Self::query_status_code(e), + AcceptTransaction(_) | ConfigurationReload(_) => StatusCode::BAD_REQUEST, Config(_) => StatusCode::NOT_FOUND, PushIntoQueue(err) => match **err { queue::Error::Full => StatusCode::INTERNAL_SERVER_ERROR, @@ -169,6 +90,33 @@ impl Error { } } + fn query_status_code(validation_error: &iroha_data_model::ValidationFail) -> StatusCode { + use iroha_data_model::{ + isi::error::InstructionExecutionError, query::error::QueryExecutionFail::*, + ValidationFail::*, + }; + + match validation_error { + NotPermitted(_) => StatusCode::FORBIDDEN, + QueryFailed(query_error) + | InstructionFailed(InstructionExecutionError::Query(query_error)) => match query_error + { + Evaluate(_) | Conversion(_) | UnknownCursor => StatusCode::BAD_REQUEST, + Signature(_) => StatusCode::UNAUTHORIZED, + Find(_) => StatusCode::NOT_FOUND, + }, + TooComplex => StatusCode::UNPROCESSABLE_ENTITY, + InternalError(_) => StatusCode::INTERNAL_SERVER_ERROR, + InstructionFailed(error) => { + iroha_logger::error!( + ?error, + "Query validation failed with unexpected error. This means a bug inside Runtime Executor", + ); + StatusCode::INTERNAL_SERVER_ERROR + } + } + } + fn to_string(err: &dyn std::error::Error) -> String { let mut s = "Error:\n".to_owned(); let mut idx = 0_i32; diff --git a/cli/src/torii/routing.rs b/cli/src/torii/routing.rs index b61cd81cd78..36a476f5071 100644 --- a/cli/src/torii/routing.rs +++ b/cli/src/torii/routing.rs @@ -5,12 +5,8 @@ // FIXME: This can't be fixed, because one trait in `warp` is private. #![allow(opaque_hidden_inferred_bound)] -use std::{ - cmp::Ordering, - num::{NonZeroU64, NonZeroUsize}, -}; +use std::num::NonZeroUsize; -use cursor::Batch; use eyre::WrapErr; use futures::TryStreamExt; use iroha_config::{ @@ -20,7 +16,8 @@ use iroha_config::{ GetConfiguration, PostConfiguration, }; use iroha_core::{ - smartcontracts::{isi::query::ValidQueryRequest, query::LazyValue}, + query::{pagination::Paginate, store::LiveQueryStoreHandle}, + smartcontracts::query::ValidQueryRequest, sumeragi::SumeragiHandle, }; use iroha_data_model::{ @@ -28,18 +25,39 @@ use iroha_data_model::{ stream::{BlockMessage, BlockSubscriptionRequest}, SignedBlock, }, - http::{BatchedResponse, BatchedResponseV1}, prelude::*, - query::{ForwardCursor, Pagination, Sorting}, + query::{ + cursor::ForwardCursor, http, sorting::Sorting, Pagination, QueryRequest, + QueryWithParameters, + }, + BatchedResponse, }; #[cfg(feature = "telemetry")] use iroha_telemetry::metrics::Status; -use pagination::Paginate; use tokio::task; use super::*; use crate::stream::{Sink, Stream}; +/// Filter for warp which extracts [`http::ClientQueryRequest`] +fn client_query_request( +) -> impl warp::Filter + Copy { + body::versioned::() + .and(sorting()) + .and(paginate()) + .and_then(|signed_query, sorting, pagination| async move { + Result::<_, std::convert::Infallible>::Ok(http::ClientQueryRequest::query( + signed_query, + sorting, + pagination, + )) + }) + .or(cursor().and_then(|cursor| async move { + Result::<_, std::convert::Infallible>::Ok(http::ClientQueryRequest::cursor(cursor)) + })) + .unify() +} + /// Filter for warp which extracts sorting fn sorting() -> impl warp::Filter + Copy { warp::query() @@ -81,122 +99,33 @@ async fn handle_instructions( #[iroha_futures::telemetry_future] async fn handle_queries( + live_query_store: LiveQueryStoreHandle, sumeragi: SumeragiHandle, - query_store: Arc, fetch_size: NonZeroUsize, - request: SignedQuery, - sorting: Sorting, - pagination: Pagination, - - cursor: ForwardCursor, -) -> Result>> { - let valid_request = sumeragi.apply_wsv(|wsv| ValidQueryRequest::validate(request, wsv))?; - let request_id = (&valid_request, &sorting, &pagination); - - if let Some(query_id) = cursor.query_id { - let live_query = query_store - .remove(&query_id, &request_id) - .ok_or(Error::UnknownCursor)?; - - return construct_query_response( - request_id, - &query_store, - query_id, - cursor.cursor.map(NonZeroU64::get), - live_query, - ); - } - - sumeragi.apply_wsv(|wsv| { - let res = valid_request.execute(wsv).map_err(ValidationFail::from)?; - - match res { - LazyValue::Value(batch) => { - let cursor = ForwardCursor::default(); - let result = BatchedResponseV1 { batch, cursor }; - Ok(Scale(result.into())) - } - LazyValue::Iter(iter) => { - let live_query = apply_sorting_and_pagination(iter, &sorting, pagination); - let query_id = uuid::Uuid::new_v4().to_string(); - - let curr_cursor = Some(0); - let live_query = live_query.batched(fetch_size); - construct_query_response( - request_id, - &query_store, - query_id, - curr_cursor, - live_query, - ) - } - } - }) -} - -fn construct_query_response( - request_id: (&ValidQueryRequest, &Sorting, &Pagination), - query_store: &LiveQueryStore, - query_id: String, - curr_cursor: Option, - mut live_query: Batched>, + query_request: http::ClientQueryRequest, ) -> Result>> { - let (batch, next_cursor) = live_query.next_batch(curr_cursor)?; - - if !live_query.is_depleted() { - query_store.insert(query_id.clone(), request_id, live_query); - } - - let query_response = BatchedResponseV1 { - batch: Value::Vec(batch), - cursor: ForwardCursor { - query_id: Some(query_id), - cursor: next_cursor, - }, - }; - - Ok(Scale(query_response.into())) -} - -fn apply_sorting_and_pagination( - iter: impl Iterator, - sorting: &Sorting, - pagination: Pagination, -) -> Vec { - if let Some(key) = &sorting.sort_by_metadata_key { - let mut pairs: Vec<(Option, Value)> = iter - .map(|value| { - let key = match &value { - Value::Identifiable(IdentifiableBox::Asset(asset)) => match asset.value() { - AssetValue::Store(store) => store.get(key).cloned(), - _ => None, - }, - Value::Identifiable(v) => TryInto::<&dyn HasMetadata>::try_into(v) - .ok() - .and_then(|has_metadata| has_metadata.metadata().get(key)) - .cloned(), - _ => None, - }; - (key, value) - }) - .collect(); - pairs.sort_by( - |(left_key, _), (right_key, _)| match (left_key, right_key) { - (Some(l), Some(r)) => l.cmp(r), - (Some(_), None) => Ordering::Less, - (None, Some(_)) => Ordering::Greater, - (None, None) => Ordering::Equal, - }, - ); - pairs - .into_iter() - .map(|(_, val)| val) - .paginate(pagination) - .collect() - } else { - iter.paginate(pagination).collect() - } + let handle = tokio::task::spawn_blocking(move || match query_request.0 { + QueryRequest::Query(QueryWithParameters { + query: signed_query, + sorting, + pagination, + }) => sumeragi.apply_wsv(|wsv| { + let valid_query = ValidQueryRequest::validate(signed_query, wsv)?; + let query_output = valid_query.execute(wsv)?; + live_query_store + .handle_query_output(query_output, fetch_size, &sorting, pagination) + .map_err(ValidationFail::from) + }), + QueryRequest::Cursor(cursor) => live_query_store + .handle_query_cursor(cursor) + .map_err(ValidationFail::from), + }); + handle + .await + .expect("Failed to join query handling task") + .map(Scale) + .map_err(Into::into) } #[derive(serde::Serialize)] @@ -454,7 +383,7 @@ async fn handle_status_precise(sumeragi: SumeragiHandle, segment: String) -> Res } impl Torii { - /// Construct `Torii` from `ToriiConfiguration`. + /// Construct `Torii`. #[allow(clippy::too_many_arguments)] pub fn from_configuration( iroha_cfg: Configuration, @@ -462,15 +391,16 @@ impl Torii { events: EventsSender, notify_shutdown: Arc, sumeragi: SumeragiHandle, + query_service: LiveQueryStoreHandle, kura: Arc, ) -> Self { Self { iroha_cfg, - events, queue, + events, notify_shutdown, sumeragi, - query_store: Arc::default(), + query_service, kura, } } @@ -540,19 +470,16 @@ impl Torii { )) .and(body::versioned()), ) - .or(endpoint7( + .or(endpoint4( handle_queries, warp::path(uri::QUERY) .and(add_state!( + self.query_service, self.sumeragi, - self.query_store, NonZeroUsize::try_from(self.iroha_cfg.torii.fetch_size) - .expect("u64 should always fit into usize"), + .expect("u64 should always fit into usize") )) - .and(body::versioned()) - .and(sorting()) - .and(paginate()) - .and(cursor()), + .and(client_query_request()), )) .or(endpoint2( handle_post_configuration, @@ -648,16 +575,10 @@ impl Torii { /// Can fail due to listening to network or if http server fails #[iroha_futures::telemetry_future] pub(crate) async fn start(self) -> eyre::Result<()> { - let query_idle_time = Duration::from_millis(self.iroha_cfg.torii.query_idle_time_ms.get()); - let torii = Arc::new(self); let mut handles = vec![]; handles.extend(Arc::clone(&torii).start_api()?); - handles.push( - Arc::clone(&torii.query_store) - .expired_query_cleanup(query_idle_time, Arc::clone(&torii.notify_shutdown)), - ); handles .into_iter() diff --git a/cli/src/torii/utils.rs b/cli/src/torii/utils.rs index 7d590ff4b48..5c0cbfd0d50 100644 --- a/cli/src/torii/utils.rs +++ b/cli/src/torii/utils.rs @@ -14,6 +14,7 @@ impl Reply for Empty { } /// Structure for response in scale codec in body +#[derive(Debug)] pub struct Scale(pub T); impl Reply for Scale { diff --git a/client/src/client.rs b/client/src/client.rs index 9eebdccc786..fcd84d8f9ec 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -17,13 +17,12 @@ use iroha_config::{client::Configuration, torii::uri, GetConfiguration, PostConf use iroha_crypto::{HashOf, KeyPair}; use iroha_data_model::{ block::SignedBlock, - http::BatchedResponse, isi::Instruction, predicate::PredicateBox, prelude::*, - query::{ForwardCursor, Pagination, Query, Sorting}, + query::{Pagination, Query, Sorting}, transaction::TransactionPayload, - ValidationFail, + BatchedResponse, ValidationFail, }; use iroha_logger::prelude::*; use iroha_telemetry::metrics::Status; @@ -147,7 +146,7 @@ where .map_err(Into::into) .wrap_err("Unexpected type")?; - self.query_request.query_cursor = cursor; + self.query_request.request = iroha_data_model::query::QueryRequest::Cursor(cursor); Ok(value) } } @@ -257,13 +256,10 @@ where fn next(&mut self) -> Option { if self.client_cursor >= self.iter.len() { - if self - .query_handler - .query_request - .query_cursor - .cursor() - .is_none() - { + let iroha_data_model::query::QueryRequest::Cursor(cursor) = &self.query_handler.query_request.request else { + return None; + }; + if cursor.cursor().is_none() { return None; } @@ -305,7 +301,7 @@ where } } -macro_rules! impl_query_result { +macro_rules! impl_query_output { ( $($ident:ty),+ $(,)? ) => { $( impl QueryOutput for $ident { type Target = Self; @@ -316,7 +312,7 @@ macro_rules! impl_query_result { } )+ }; } -impl_query_result! { +impl_query_output! { bool, iroha_data_model::Value, iroha_data_model::numeric::NumericValue, @@ -362,10 +358,7 @@ pub struct Client { pub struct QueryRequest { torii_url: Url, headers: HashMap, - request: Vec, - sorting: Sorting, - pagination: Pagination, - query_cursor: ForwardCursor, + request: iroha_data_model::query::QueryRequest>, } impl QueryRequest { @@ -376,22 +369,31 @@ impl QueryRequest { Self { torii_url: format!("http://{torii_url}").parse().unwrap(), headers: HashMap::new(), - request: Vec::new(), - sorting: Sorting::default(), - pagination: Pagination::default(), - query_cursor: ForwardCursor::default(), + request: iroha_data_model::query::QueryRequest::Query( + iroha_data_model::query::QueryWithParameters { + query: Vec::default(), + sorting: Sorting::default(), + pagination: Pagination::default(), + }, + ), } } fn assemble(self) -> DefaultRequestBuilder { - DefaultRequestBuilder::new( + let builder = DefaultRequestBuilder::new( HttpMethod::POST, self.torii_url.join(uri::QUERY).expect("Valid URI"), ) - .headers(self.headers) - .params(Vec::from(self.sorting)) - .params(Vec::from(self.pagination)) - .params(Vec::from(self.query_cursor)) - .body(self.request) + .headers(self.headers); + + match self.request { + iroha_data_model::query::QueryRequest::Query(query_with_params) => builder + .params(Vec::from(query_with_params.sorting)) + .params(Vec::from(query_with_params.pagination)) + .body(query_with_params.query), + iroha_data_model::query::QueryRequest::Cursor(cursor) => { + builder.params(Vec::from(cursor)) + } + } } } @@ -806,10 +808,13 @@ impl Client { let query_request = QueryRequest { torii_url: self.torii_url.clone(), headers: self.headers.clone(), - request, - sorting, - pagination, - query_cursor: ForwardCursor::default(), + request: iroha_data_model::query::QueryRequest::Query( + iroha_data_model::query::QueryWithParameters { + query: request, + pagination, + sorting, + }, + ), }; Ok(( diff --git a/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs b/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs index e5cf1a30c5a..5fa18856b48 100644 --- a/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs +++ b/client/tests/integration/smartcontracts/create_nft_for_every_user_trigger/src/lib.rs @@ -16,10 +16,14 @@ static ALLOC: LockedAllocator = LockedAllocator::new(FreeList #[iroha_trigger::main] fn main(_owner: AccountId, _event: Event) { iroha_trigger::log::info!("Executing trigger"); - let accounts = FindAllAccounts.execute().dbg_unwrap(); + + let accounts_cursor = FindAllAccounts.execute().dbg_unwrap(); + let limits = MetadataLimits::new(256, 256); - for account in accounts { + for account in accounts_cursor { + let account = account.dbg_unwrap(); + let mut metadata = Metadata::new(); let name = format!( "nft_for_{}_in_{}", @@ -53,6 +57,7 @@ fn generate_new_nft_id(account_id: &AccountId) -> AssetDefinitionId { let new_number = assets .into_iter() + .map(|res| res.dbg_unwrap()) .filter(|asset| asset.id().definition_id().to_string().starts_with("nft_")) .count() .checked_add(1) diff --git a/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs b/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs index 667fdedc5e3..512ff5894b5 100644 --- a/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs +++ b/client/tests/integration/smartcontracts/executor_with_custom_token/src/lib.rs @@ -84,6 +84,9 @@ impl Executor { let mut found_accounts = Vec::new(); for account in accounts { + let account = account.map_err(|error| { + format!("{:?}", anyhow!(error).context("Failed to get account")) + })?; let permission_tokens = FindPermissionTokensByAccountId::new(account.id().clone()) .execute() .map_err(|error| { @@ -97,6 +100,13 @@ impl Executor { })?; for token in permission_tokens { + let token = token.map_err(|error| { + format!( + "{:?}", + anyhow!(error).context("Failed to get permission token") + ) + })?; + if let Ok(can_unregister_domain_token) = iroha_executor::default::domain::tokens::CanUnregisterDomain::try_from(token) { diff --git a/config/Cargo.toml b/config/Cargo.toml index 2db0d2cbf91..e4caf3da84d 100644 --- a/config/Cargo.toml +++ b/config/Cargo.toml @@ -34,6 +34,7 @@ once_cell = { workspace = true } [dev-dependencies] proptest = "1.3.1" +stacker = "0.1.15" [features] tokio-console = [] diff --git a/config/iroha_test_config.json b/config/iroha_test_config.json index 3c55e840892..ad415a54587 100644 --- a/config/iroha_test_config.json +++ b/config/iroha_test_config.json @@ -44,8 +44,7 @@ "API_URL": "127.0.0.1:8080", "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -120,5 +119,8 @@ "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } diff --git a/config/src/iroha.rs b/config/src/iroha.rs index cdd07e355f5..a9275bd9384 100644 --- a/config/src/iroha.rs +++ b/config/src/iroha.rs @@ -57,6 +57,9 @@ view! { /// SnapshotMaker configuration #[config(inner)] pub snapshot: snapshot::Configuration, + /// LiveQueryStore configuration + #[config(inner)] + pub live_query_store: live_query_store::Configuration, } } @@ -77,6 +80,7 @@ impl Default for ConfigurationProxy { network: Some(network::ConfigurationProxy::default()), telemetry: Some(telemetry::ConfigurationProxy::default()), snapshot: Some(snapshot::ConfigurationProxy::default()), + live_query_store: Some(live_query_store::ConfigurationProxy::default()), } } } @@ -215,9 +219,10 @@ mod tests { network in prop::option::of(network::tests::arb_proxy()), telemetry in prop::option::of(telemetry::tests::arb_proxy()), snapshot in prop::option::of(snapshot::tests::arb_proxy()), + live_query_store in prop::option::of(live_query_store::tests::arb_proxy()), ) -> ConfigurationProxy { ConfigurationProxy { public_key, private_key, disable_panic_terminal_colors, kura, sumeragi, torii, block_sync, queue, - logger, genesis, wsv, network, telemetry, snapshot } + logger, genesis, wsv, network, telemetry, snapshot, live_query_store } } } diff --git a/config/src/lib.rs b/config/src/lib.rs index 628fcff9271..6e80c5e1c88 100644 --- a/config/src/lib.rs +++ b/config/src/lib.rs @@ -7,6 +7,7 @@ pub mod client; pub mod genesis; pub mod iroha; pub mod kura; +pub mod live_query_store; pub mod logger; pub mod network; pub mod path; diff --git a/config/src/live_query_store.rs b/config/src/live_query_store.rs new file mode 100644 index 00000000000..79382fee2ca --- /dev/null +++ b/config/src/live_query_store.rs @@ -0,0 +1,44 @@ +//! Module for `LiveQueryStore`-related configuration and structs. + +use std::num::NonZeroU64; + +use iroha_config_base::derive::{Documented, Proxy}; +use serde::{Deserialize, Serialize}; + +/// Default max time a query can remain in the store unaccessed +pub static DEFAULT_QUERY_IDLE_TIME_MS: once_cell::sync::Lazy = + once_cell::sync::Lazy::new(|| NonZeroU64::new(30_000).unwrap()); + +/// Configuration for `QueryService`. +#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize, Documented, Proxy)] +#[serde(rename_all = "UPPERCASE")] +#[config(env_prefix = "LIVE_QUERY_STORE_")] +pub struct Configuration { + /// Time query can remain in the store if unaccessed + pub query_idle_time_ms: NonZeroU64, +} + +impl Default for ConfigurationProxy { + fn default() -> Self { + Self { + query_idle_time_ms: Some(*DEFAULT_QUERY_IDLE_TIME_MS), + } + } +} + +#[cfg(test)] +pub mod tests { + use proptest::prelude::*; + + use super::*; + + prop_compose! { + pub fn arb_proxy() + ( + query_idle_time_ms in prop::option::of(Just(*DEFAULT_QUERY_IDLE_TIME_MS)), + ) + -> ConfigurationProxy { + ConfigurationProxy { query_idle_time_ms } + } + } +} diff --git a/config/src/torii.rs b/config/src/torii.rs index 28581417315..25263581645 100644 --- a/config/src/torii.rs +++ b/config/src/torii.rs @@ -14,9 +14,6 @@ pub const DEFAULT_TORII_MAX_CONTENT_LENGTH: u32 = 2_u32.pow(12) * 4000; /// Default max size of a single batch of results from a query pub static DEFAULT_TORII_FETCH_SIZE: once_cell::sync::Lazy = once_cell::sync::Lazy::new(|| NonZeroU64::new(10).unwrap()); -/// Default max time a query can remain in the store unaccessed -pub static DEFAULT_TORII_QUERY_IDLE_TIME_MS: once_cell::sync::Lazy = - once_cell::sync::Lazy::new(|| NonZeroU64::new(30_000).unwrap()); /// Structure that defines the configuration parameters of `Torii` which is the routing module. /// For example the `p2p_addr`, which is used for consensus and block-synchronisation purposes, @@ -37,8 +34,6 @@ pub struct Configuration { pub max_content_len: u32, /// How many query results are returned in one batch pub fetch_size: NonZeroU64, - /// Time query can remain in the store if unaccessed - pub query_idle_time_ms: NonZeroU64, } impl Default for ConfigurationProxy { @@ -49,7 +44,6 @@ impl Default for ConfigurationProxy { max_transaction_size: Some(DEFAULT_TORII_MAX_TRANSACTION_SIZE), max_content_len: Some(DEFAULT_TORII_MAX_CONTENT_LENGTH), fetch_size: Some(*DEFAULT_TORII_FETCH_SIZE), - query_idle_time_ms: Some(*DEFAULT_TORII_QUERY_IDLE_TIME_MS), } } } @@ -103,10 +97,9 @@ pub mod tests { max_transaction_size in prop::option::of(Just(DEFAULT_TORII_MAX_TRANSACTION_SIZE)), max_content_len in prop::option::of(Just(DEFAULT_TORII_MAX_CONTENT_LENGTH)), fetch_size in prop::option::of(Just(*DEFAULT_TORII_FETCH_SIZE)), - query_idle_time_ms in prop::option::of(Just(*DEFAULT_TORII_QUERY_IDLE_TIME_MS)), ) -> ConfigurationProxy { - ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len, fetch_size, query_idle_time_ms } + ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len, fetch_size } } } } diff --git a/configs/peer/config.json b/configs/peer/config.json index ef36a9f525c..02211ed3072 100644 --- a/configs/peer/config.json +++ b/configs/peer/config.json @@ -25,8 +25,7 @@ "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -94,5 +93,8 @@ "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index 5b6263253cf65769833fa2b18c38e209bf8c849e..0fd502704439a2a58835ca2a9a56888853884075 100644 GIT binary patch literal 494682 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 ZN!54Q1O4D)KKw@r~%*oW7~ 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


QU<-84XokI_4C&r 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
Zc#inNqug1g< z&#wQbaAirK3!(jdjUR0P%@r3OZ>-o9klrDo(wJTUcF~B(UNMHX4y(WL&LLym{J5{( z>pPn|I5SiBew|`Ex$~^=v_TJ>j$I1uXzH@XWT==l^4)uWF-5nUe{tX5?nSLXef9NS zvvP{&PthO#bIiP=OB>$$eQeb>p6 zua14J_(aba&fMK*S8@AsEpztH@+tXh$w&QKo(L_uHR_M>k4&W{iSbtpp1x;Q$;dC? zxiY=@%aVv(9_S)*w*Ww(tzyy z&OSaaqx7xPpuovlvr5;rnEc20W8N+8YqX92xXEv&q0z0vChfS_GPU)iJMuQ?Sw7nt z@x;~zi!2{p`XJ_~ke!zBEf*K`X!3`phx5s(>~2A2CsJcST>DZ{*^h@7z11mmMVbB6 z2SOj+{8?G+?T>8V*sX*Og{mK|O3ob`a=a#gox-&*@s zz5UCQgTA)%6{UTnx+d6`Jlx{7mIdQ&(d~MUO{m&n+tsP;lgCyZwoT5htA2Y&7yItW zsy$hEq}k(Ut%yINoo3Hmv!i40K5yE8S`zZ4&3Ve+cE4s@uNQla&F-KJ?7wLE*wPUT z|JeHaqhk+!HU9gMpdDkso7bh&_Ny1hW}I31q~ofes+13yRtt0-0gb$@z0J=8MM|__~-VZjjexhJ@}q;^8VD0?pCj) z9r)sz!S3R+MXgNFSG#Llj!U_^d$aq@M;#9S(e$``-_@b(C&g;Z=MJbDes@M@dHJZ{6J zlRK72)s4%2`e;Z@($#U7w)=Lg`#Gp$%Ws)|qFySlcrIYgrdf-hswf^k*d99Z^9rBy zxw~S!-c&g?*fqKR!3Qe?YhLU>^j1e@blsu{RxWtHGI{*CTXu$gS7~4ONYU>#ZO6~e z@vDB|=7HmF>m%|XnKNO$$)1LxiU@PYWP6NW}y+1RS|^aOp2@lSs`z30U9GdmBAePP7J%bB}NXSZB1 zF{1B|57yrD{=}VUom;YRy)^OSnFU4b()w3Du&Pj$o{fP2S>#WPF=Hl(tjO$?mU$F)uaXUn;q`j z_twc6;5`%8O|GdsG5xn)KTL)t4gOz({%1mqs|U$0 zUW1ra%V@0{SP(Zbya*AFfLj(8BB7Eya(7x*3A@GNP8 zMTr{QK{0jq^|8!f<;w3MFUCUD9-rKQG2X~`y$-f1C5j`BzRC~oIW(1Ys- z7XTLl7Xud$mk5^zmk(!$tAMM0z*kcZw}E`Xd*JVimKL^@e^T0M!mwC{i;3`tldL3@ z2ZwZNaFm9eQs$&~p)yqBX+bA|Xu;*fQCw1dQGV!MiBF4qN)r=~cyNrroTeHu@uxDP zG}Sr2ngwth;B=dp;Tvd1?M#z!Gw!r9x(i`*;?o+hWZ7Xd`W00AG-DfNaFDi WorldStateView { let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::with([], UniqueVec::new()), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::with([], UniqueVec::new()), kura, query_handle); wsv.config.transaction_limits = TransactionLimits::new(u64::MAX, u64::MAX); wsv.config.wasm_runtime_config.fuel_limit = u64::MAX; wsv.config.wasm_runtime_config.max_memory = u32::MAX; diff --git a/core/benches/kura.rs b/core/benches/kura.rs index 7b60d69411f..c0371201191 100644 --- a/core/benches/kura.rs +++ b/core/benches/kura.rs @@ -8,6 +8,7 @@ use iroha_core::{ block::*, kura::{BlockStore, LockStatus}, prelude::*, + query::store::LiveQueryStore, sumeragi::network_topology::Topology, wsv::World, }; @@ -42,7 +43,8 @@ async fn measure_block_size_for_n_executors(n_executors: u32) { iroha_core::kura::Kura::new(iroha_config::kura::Mode::Strict, dir.path(), false).unwrap(); let _thread_handle = iroha_core::kura::Kura::start(kura.clone()); - let mut wsv = WorldStateView::new(World::new(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::new(), kura, query_handle); let topology = Topology::new(UniqueVec::new()); let mut block = BlockBuilder::new(vec![tx], topology, Vec::new()) .chain(0, &mut wsv) diff --git a/core/benches/validation.rs b/core/benches/validation.rs index 32c052341e3..0a474ab3ea0 100644 --- a/core/benches/validation.rs +++ b/core/benches/validation.rs @@ -6,6 +6,7 @@ use criterion::{criterion_group, criterion_main, Criterion}; use iroha_core::{ block::*, prelude::*, + query::store::LiveQueryStore, smartcontracts::{isi::Registrable as _, Execute}, sumeragi::network_topology::Topology, tx::TransactionExecutor, @@ -55,6 +56,7 @@ fn build_test_transaction(keys: KeyPair) -> SignedTransaction { fn build_test_and_transient_wsv(keys: KeyPair) -> WorldStateView { let kura = iroha_core::kura::Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let (public_key, _) = keys.into(); let mut wsv = WorldStateView::new( @@ -70,6 +72,7 @@ fn build_test_and_transient_wsv(keys: KeyPair) -> WorldStateView { World::with([domain], UniqueVec::new()) }, kura, + query_handle, ); { @@ -146,7 +149,8 @@ fn sign_blocks(criterion: &mut Criterion) { .expect("Failed to accept transaction."); let key_pair = KeyPair::generate().expect("Failed to generate KeyPair."); let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::new(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::new(), kura, query_handle); let topology = Topology::new(UniqueVec::new()); let mut success_count = 0; diff --git a/core/src/block.rs b/core/src/block.rs index facbbd09093..21d741714f5 100644 --- a/core/src/block.rs +++ b/core/src/block.rs @@ -354,27 +354,21 @@ mod valid { let transaction_executor = wsv.transaction_executor(); let limits = &transaction_executor.transaction_limits; - if error.is_none() { - let tx = if is_genesis { + let tx = if is_genesis { AcceptedTransaction::accept_genesis(GenesisTransaction(value)) - } else { - AcceptedTransaction::accept(value, limits)? - }; - - transaction_executor.validate(tx, wsv).map_err(|(_tx, error)| { - TransactionValidationError::NotValid(error) - })?; } else { - let tx = if is_genesis { - AcceptedTransaction::accept_genesis(GenesisTransaction(value)) - } else { AcceptedTransaction::accept(value, limits)? - }; + }; + if error.is_some() { match transaction_executor.validate(tx, wsv) { Err(rejected_transaction) => Ok(rejected_transaction), Ok(_) => Err(TransactionValidationError::RejectedIsValid), }?; + } else { + transaction_executor.validate(tx, wsv).map_err(|(_tx, error)| { + TransactionValidationError::NotValid(error) + })?; } Ok(()) @@ -702,7 +696,7 @@ mod tests { use iroha_data_model::prelude::*; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _}; + use crate::{kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _}; #[test] pub fn committed_and_valid_block_hashes_are_equal() { @@ -716,8 +710,8 @@ mod tests { ) } - #[test] - fn should_reject_due_to_repetition() { + #[tokio::test] + async fn should_reject_due_to_repetition() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -728,7 +722,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); // Creating an instruction let asset_definition_id = AssetDefinitionId::from_str("xor#wonderland").expect("Valid"); @@ -758,8 +753,8 @@ mod tests { assert!(valid_block.payload().transactions[1].error.is_some()); } - #[test] - fn tx_order_same_in_validation_and_revalidation() { + #[tokio::test] + async fn tx_order_same_in_validation_and_revalidation() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -770,7 +765,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); // Creating an instruction let asset_definition_id = AssetDefinitionId::from_str("xor#wonderland").expect("Valid"); @@ -825,8 +821,8 @@ mod tests { assert!(valid_block.payload().transactions[2].error.is_none()); } - #[test] - fn failed_transactions_revert() { + #[tokio::test] + async fn failed_transactions_revert() { // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -840,7 +836,8 @@ mod tests { ); let world = World::with([domain], UniqueVec::new()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); let transaction_limits = &wsv.transaction_executor().transaction_limits; let domain_id = DomainId::from_str("domain").expect("Valid"); diff --git a/core/src/lib.rs b/core/src/lib.rs index 7337b88851e..e0c6109e31f 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -6,6 +6,7 @@ pub mod executor; pub mod gossiper; pub mod kura; pub mod modules; +pub mod query; pub mod queue; pub mod smartcontracts; pub mod snapshot; diff --git a/cli/src/torii/cursor.rs b/core/src/query/cursor.rs similarity index 71% rename from cli/src/torii/cursor.rs rename to core/src/query/cursor.rs index a3d1aca610c..0757a759081 100644 --- a/cli/src/torii/cursor.rs +++ b/core/src/query/cursor.rs @@ -1,8 +1,14 @@ +//! Module with cursor-based pagination functional like [`Batched`]. + use std::num::{NonZeroU64, NonZeroUsize}; -use crate::torii::{Error, Result}; +use derive_more::Display; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; +/// Trait for iterators that can be batched. pub trait Batch: IntoIterator + Sized { + /// Pack iterator into batches of the given size. fn batched(self, fetch_size: NonZeroUsize) -> Batched; } @@ -25,10 +31,20 @@ pub struct Batched { cursor: Option, } +/// Unknown cursor error. +/// +/// Happens when client sends a cursor that doesn't match any server's cursor. +#[derive(Debug, Display, thiserror::Error, Copy, Clone, Serialize, Deserialize, Encode, Decode)] +#[display(fmt = "Unknown cursor")] +pub struct UnknownCursor; + impl> Batched { - pub(crate) fn next_batch(&mut self, cursor: Option) -> Result<(I, Option)> { + pub(crate) fn next_batch( + &mut self, + cursor: Option, + ) -> Result<(I, Option), UnknownCursor> { if cursor != self.cursor { - return Err(Error::UnknownCursor); + return Err(UnknownCursor); } let mut batch_size = 0; @@ -72,6 +88,7 @@ impl> Batched { )) } + /// Check if all values where drained from the iterator. pub fn is_depleted(&self) -> bool { self.cursor.is_none() } diff --git a/core/src/query/mod.rs b/core/src/query/mod.rs new file mode 100644 index 00000000000..9b6de03c3e9 --- /dev/null +++ b/core/src/query/mod.rs @@ -0,0 +1,5 @@ +//! This module contains [`QueryService`](service::QueryService) and helpers. + +pub mod cursor; +pub mod pagination; +pub mod store; diff --git a/cli/src/torii/pagination.rs b/core/src/query/pagination.rs similarity index 97% rename from cli/src/torii/pagination.rs rename to core/src/query/pagination.rs index e305edbaec1..d2cc87e88f8 100644 --- a/cli/src/torii/pagination.rs +++ b/core/src/query/pagination.rs @@ -1,3 +1,5 @@ +//! Module with [`Paginate`] iterator adaptor which provides [`paginate`] function. + use iroha_data_model::query::Pagination; /// Describes a collection to which pagination can be applied. diff --git a/core/src/query/store.rs b/core/src/query/store.rs new file mode 100644 index 00000000000..0090f4422a8 --- /dev/null +++ b/core/src/query/store.rs @@ -0,0 +1,278 @@ +//! This module contains [`QueryService`] actor. + +use std::{ + cmp::Ordering, + collections::HashMap, + num::{NonZeroU64, NonZeroUsize}, + time::{Duration, Instant}, +}; + +use iroha_config::live_query_store::Configuration; +use iroha_data_model::{ + asset::AssetValue, + query::{ + cursor::ForwardCursor, error::QueryExecutionFail, pagination::Pagination, sorting::Sorting, + }, + BatchedResponse, BatchedResponseV1, HasMetadata, IdentifiableBox, ValidationFail, Value, +}; +use parity_scale_codec::{Decode, Encode}; +use serde::{Deserialize, Serialize}; +use tokio::sync::{mpsc, oneshot}; + +use super::{ + cursor::{Batch as _, Batched, UnknownCursor}, + pagination::Paginate as _, +}; +use crate::smartcontracts::query::LazyValue; + +/// Query service error. +#[derive(Debug, thiserror::Error, Copy, Clone, Serialize, Deserialize, Encode, Decode)] +pub enum Error { + /// Unknown cursor error. + #[error(transparent)] + UnknownCursor(#[from] UnknownCursor), + /// Connection with QueryService is closed. + #[error("Connection with QueryService is closed")] + ConnectionClosed, +} + +#[allow(clippy::fallible_impl_from)] +impl From for ValidationFail { + fn from(error: Error) -> Self { + match error { + Error::UnknownCursor(_) => { + ValidationFail::QueryFailed(QueryExecutionFail::UnknownCursor) + } + Error::ConnectionClosed => { + panic!("Connection to `LiveQueryStore` was unexpectedly closed, this is a bug") + } + } + } +} + +/// Result type for [`QueryService`] methods. +pub type Result = std::result::Result; + +type LiveQuery = Batched>; + +/// Service which stores queries which might be non fully consumed by a client. +/// +/// Clients can handle their queries using [`LiveQueryStoreHandle`] +#[derive(Debug)] +pub struct LiveQueryStore { + queries: HashMap, + query_idle_time: Duration, +} + +impl LiveQueryStore { + /// Construct [`QueryService`] from configuration. + pub fn from_configuration(cfg: Configuration) -> Self { + Self { + queries: HashMap::default(), + query_idle_time: Duration::from_millis(cfg.query_idle_time_ms.into()), + } + } + + /// Construct [`QueryService`] for tests. + /// Default configuration will be used. + /// + /// Not marked as `#[cfg(test)]` because it is used in benches as well. + pub fn test() -> Self { + use iroha_config::base::proxy::Builder as _; + + LiveQueryStore::from_configuration( + iroha_config::live_query_store::ConfigurationProxy::default() + .build() + .expect("Failed to build LiveQueryStore configuration from proxy"), + ) + } + + /// Start [`QueryService`]. Requires a [`tokio::runtime::Runtime`] being run + /// as it will create new [`tokio::task`] and detach it. + /// + /// Returns a handle to interact with the service. + pub fn start(mut self) -> LiveQueryStoreHandle { + const ALL_HANDLERS_DROPPED: &str = + "All handler to LiveQueryStore are dropped. Shutting down..."; + + let (insert_sender, mut insert_receiver) = mpsc::channel(1); + let (remove_sender, mut remove_receiver) = mpsc::channel::<(String, oneshot::Sender<_>)>(1); + + let mut idle_interval = tokio::time::interval(self.query_idle_time); + + tokio::task::spawn(async move { + loop { + tokio::select! { + _ = idle_interval.tick() => { + self.queries + .retain(|_, (_, last_access_time)| last_access_time.elapsed() <= self.query_idle_time); + }, + to_insert = insert_receiver.recv() => { + let Some((query_id, live_query)) = to_insert else { + iroha_logger::info!(ALL_HANDLERS_DROPPED); + break; + }; + self.insert(query_id, live_query) + } + to_remove = remove_receiver.recv() => { + let Some((query_id, response_sender)) = to_remove else { + iroha_logger::info!(ALL_HANDLERS_DROPPED); + break; + }; + let live_query_opt = self.remove(&query_id); + let _ = response_sender.send(live_query_opt); + } + else => break, + } + tokio::task::yield_now().await; + } + }); + + LiveQueryStoreHandle { + insert_sender, + remove_sender, + } + } + + fn insert(&mut self, query_id: String, live_query: LiveQuery) { + self.queries.insert(query_id, (live_query, Instant::now())); + } + + fn remove(&mut self, query_id: &str) -> Option { + self.queries.remove(query_id).map(|(output, _)| output) + } +} + +/// Handle to interact with [`LiveQueryStore`]. +#[derive(Clone)] +pub struct LiveQueryStoreHandle { + /// Sender to insert a new query with specified id. + insert_sender: mpsc::Sender<(String, LiveQuery)>, + /// Sender to send a tuple of query id and another sender, which will be + /// used by [`LiveQueryStore`] to write a response with optional live query. + remove_sender: mpsc::Sender<(String, oneshot::Sender>)>, +} + +impl LiveQueryStoreHandle { + /// Apply sorting and pagination to the query output. + /// + /// # Errors + /// + /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Otherwise throws up query output handling errors. + pub fn handle_query_output( + &self, + query_output: LazyValue<'_>, + fetch_size: NonZeroUsize, + sorting: &Sorting, + pagination: Pagination, + ) -> Result> { + match query_output { + LazyValue::Value(batch) => { + let cursor = ForwardCursor::default(); + let result = BatchedResponseV1 { batch, cursor }; + Ok(result.into()) + } + LazyValue::Iter(iter) => { + let live_query = Self::apply_sorting_and_pagination(iter, sorting, pagination); + let query_id = uuid::Uuid::new_v4().to_string(); + + let curr_cursor = Some(0); + let live_query = live_query.batched(fetch_size); + self.construct_query_response(query_id, curr_cursor, live_query) + } + } + } + + /// Retrieve next batch of query output using `cursor`. + /// + /// # Errors + /// + /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Otherwise throws up query output handling errors. + pub fn handle_query_cursor(&self, cursor: ForwardCursor) -> Result> { + let query_id = cursor.query_id.ok_or(UnknownCursor)?; + let live_query = self.remove(query_id.clone())?.ok_or(UnknownCursor)?; + + self.construct_query_response(query_id, cursor.cursor.map(NonZeroU64::get), live_query) + } + + fn insert(&self, query_id: String, live_query: LiveQuery) -> Result<()> { + self.insert_sender + .blocking_send((query_id, live_query)) + .map_err(|_| Error::ConnectionClosed) + } + + fn remove(&self, query_id: String) -> Result> { + let (sender, receiver) = oneshot::channel(); + + self.remove_sender + .blocking_send((query_id, sender)) + .or(Err(Error::ConnectionClosed))?; + + receiver.blocking_recv().or(Err(Error::ConnectionClosed)) + } + + fn construct_query_response( + &self, + query_id: String, + curr_cursor: Option, + mut live_query: Batched>, + ) -> Result> { + let (batch, next_cursor) = live_query.next_batch(curr_cursor)?; + + if !live_query.is_depleted() { + self.insert(query_id.clone(), live_query)? + } + + let query_response = BatchedResponseV1 { + batch: Value::Vec(batch), + cursor: ForwardCursor { + query_id: Some(query_id), + cursor: next_cursor, + }, + }; + + Ok(query_response.into()) + } + + fn apply_sorting_and_pagination( + iter: impl Iterator, + sorting: &Sorting, + pagination: Pagination, + ) -> Vec { + if let Some(key) = &sorting.sort_by_metadata_key { + let mut pairs: Vec<(Option, Value)> = iter + .map(|value| { + let key = match &value { + Value::Identifiable(IdentifiableBox::Asset(asset)) => match asset.value() { + AssetValue::Store(store) => store.get(key).cloned(), + _ => None, + }, + Value::Identifiable(v) => TryInto::<&dyn HasMetadata>::try_into(v) + .ok() + .and_then(|has_metadata| has_metadata.metadata().get(key)) + .cloned(), + _ => None, + }; + (key, value) + }) + .collect(); + pairs.sort_by( + |(left_key, _), (right_key, _)| match (left_key, right_key) { + (Some(l), Some(r)) => l.cmp(r), + (Some(_), None) => Ordering::Less, + (None, Some(_)) => Ordering::Greater, + (None, None) => Ordering::Equal, + }, + ); + pairs + .into_iter() + .map(|(_, val)| val) + .paginate(pagination) + .collect() + } else { + iter.paginate(pagination).collect() + } + } +} diff --git a/core/src/queue.rs b/core/src/queue.rs index 6a7bce3b62e..bb5f38cea3f 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -381,9 +381,13 @@ mod tests { use iroha_data_model::{prelude::*, transaction::TransactionLimits}; use iroha_primitives::must_use::MustUse; use rand::Rng as _; + use tokio::test; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _, wsv::World, PeersIds}; + use crate::{ + kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, + wsv::World, PeersIds, + }; fn accepted_tx(account_id: &str, key: KeyPair) -> AcceptedTransaction { let message = std::iter::repeat_with(rand::random::) @@ -413,12 +417,14 @@ mod tests { } #[test] - fn push_tx() { + async fn push_tx() { let key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([key_pair.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -435,14 +441,16 @@ mod tests { } #[test] - fn push_tx_overflow() { + async fn push_tx_overflow() { let max_txs_in_queue = 10; let key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([key_pair.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -470,7 +478,7 @@ mod tests { } #[test] - fn push_multisignature_tx() { + async fn push_multisignature_tx() { let max_txs_in_block = 2; let key_pairs = [KeyPair::generate().unwrap(), KeyPair::generate().unwrap()]; let kura = Kura::blank_kura_for_testing(); @@ -485,9 +493,11 @@ mod tests { .build(&account_id); account.signature_check_condition = SignatureCheckCondition::all_account_signatures(); assert!(domain.add_account(account).is_none()); + let query_handle = LiveQueryStore::test().start(); Arc::new(WorldStateView::new( World::with([domain], PeersIds::new()), kura, + query_handle, )) }; @@ -555,13 +565,15 @@ mod tests { } #[test] - fn get_available_txs() { + async fn get_available_txs() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -582,12 +594,14 @@ mod tests { } #[test] - fn push_tx_already_in_blockchain() { + async fn push_tx_already_in_blockchain() { let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, ); let tx = accepted_tx("alice@wonderland", alice_key); wsv.transactions.insert(tx.hash(), 1); @@ -609,13 +623,15 @@ mod tests { } #[test] - fn get_tx_drop_if_in_blockchain() { + async fn get_tx_drop_if_in_blockchain() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, ); let tx = accepted_tx("alice@wonderland", alice_key); let queue = Queue::from_configuration(&Configuration { @@ -637,13 +653,15 @@ mod tests { } #[test] - fn get_available_txs_with_timeout() { + async fn get_available_txs_with_timeout() { let max_txs_in_block = 6; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 200, @@ -685,13 +703,15 @@ mod tests { // Queue should only drop transactions which are already committed or ttl expired. // Others should stay in the queue until that moment. #[test] - fn transactions_available_after_pop() { + async fn transactions_available_after_pop() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -719,13 +739,15 @@ mod tests { } #[test] - fn custom_expired_transaction_is_rejected() { + async fn custom_expired_transaction_is_rejected() { let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, @@ -760,13 +782,15 @@ mod tests { } #[test] - fn concurrent_stress_test() { + async fn concurrent_stress_test() { let max_txs_in_block = 10; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, ); let queue = Arc::new(Queue::from_configuration(&Configuration { @@ -831,14 +855,16 @@ mod tests { } #[test] - fn push_tx_in_future() { + async fn push_tx_in_future() { let future_threshold_ms = 1000; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); let wsv = Arc::new(WorldStateView::new( world_with_test_domains([alice_key.public_key().clone()]), kura, + query_handle, )); let queue = Queue::from_configuration(&Configuration { @@ -864,7 +890,7 @@ mod tests { } #[test] - fn queue_throttling() { + async fn queue_throttling() { let alice_key_pair = KeyPair::generate().unwrap(); let bob_key_pair = KeyPair::generate().unwrap(); let kura = Kura::blank_kura_for_testing(); @@ -885,7 +911,8 @@ mod tests { assert!(domain.add_account(bob_account).is_none()); World::with([domain], PeersIds::new()) }; - let mut wsv = WorldStateView::new(world, kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura, query_handle); let queue = Queue::from_configuration(&Configuration { transaction_time_to_live_ms: 100_000, diff --git a/core/src/smartcontracts/isi/mod.rs b/core/src/smartcontracts/isi/mod.rs index ea009e6d575..7f80bbfade1 100644 --- a/core/src/smartcontracts/isi/mod.rs +++ b/core/src/smartcontracts/isi/mod.rs @@ -470,13 +470,15 @@ mod tests { use std::sync::Arc; use iroha_crypto::KeyPair; + use tokio::test; use super::*; - use crate::{kura::Kura, wsv::World, PeersIds}; + use crate::{kura::Kura, query::store::LiveQueryStore, wsv::World, PeersIds}; fn wsv_with_test_domains(kura: &Arc) -> Result { let world = World::with([], PeersIds::new()); - let mut wsv = WorldStateView::new(world, kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, kura.clone(), query_handle); let genesis_account_id = AccountId::from_str("genesis@genesis")?; let account_id = AccountId::from_str("alice@wonderland")?; let (public_key, _) = KeyPair::generate()?.into(); @@ -491,7 +493,7 @@ mod tests { } #[test] - fn asset_store() -> Result<()> { + async fn asset_store() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -520,7 +522,7 @@ mod tests { } #[test] - fn account_metadata() -> Result<()> { + async fn account_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -548,7 +550,7 @@ mod tests { } #[test] - fn asset_definition_metadata() -> Result<()> { + async fn asset_definition_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let definition_id = AssetDefinitionId::from_str("rose#wonderland")?; @@ -576,7 +578,7 @@ mod tests { } #[test] - fn domain_metadata() -> Result<()> { + async fn domain_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let domain_id = DomainId::from_str("wonderland")?; @@ -604,7 +606,7 @@ mod tests { } #[test] - fn executing_unregistered_trigger_should_return_error() -> Result<()> { + async fn executing_unregistered_trigger_should_return_error() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; @@ -621,7 +623,7 @@ mod tests { } #[test] - fn unauthorized_trigger_execution_should_return_error() -> Result<()> { + async fn unauthorized_trigger_execution_should_return_error() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let mut wsv = wsv_with_test_domains(&kura)?; let account_id = AccountId::from_str("alice@wonderland")?; diff --git a/core/src/smartcontracts/isi/query.rs b/core/src/smartcontracts/isi/query.rs index 62487790ca8..19671e06587 100644 --- a/core/src/smartcontracts/isi/query.rs +++ b/core/src/smartcontracts/isi/query.rs @@ -51,7 +51,7 @@ impl_lazy! { } /// Query Request statefully validated on the Iroha node side. -#[derive(Debug, Decode, Encode)] +#[derive(Debug, Clone, Decode, Encode)] #[repr(transparent)] pub struct ValidQueryRequest(SignedQuery); @@ -171,10 +171,11 @@ mod tests { use iroha_data_model::{query::error::FindError, transaction::TransactionLimits}; use iroha_primitives::unique_vec::UniqueVec; use once_cell::sync::Lazy; + use tokio::test; use super::*; use crate::{ - block::*, kura::Kura, smartcontracts::isi::Registrable as _, + block::*, kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, sumeragi::network_topology::Topology, tx::AcceptedTransaction, wsv::World, PeersIds, }; @@ -249,7 +250,8 @@ mod tests { invalid_tx_per_block: usize, ) -> Result { let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); let limits = TransactionLimits { max_instruction_number: 1, @@ -305,9 +307,10 @@ mod tests { } #[test] - fn asset_store() -> Result<()> { + async fn asset_store() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let wsv = WorldStateView::new(world_with_test_asset_with_metadata(), kura); + let query_handle = LiveQueryStore::test().start(); + let wsv = WorldStateView::new(world_with_test_asset_with_metadata(), kura, query_handle); let asset_definition_id = AssetDefinitionId::from_str("rose#wonderland")?; let asset_id = AssetId::new(asset_definition_id, ALICE_ID.clone()); @@ -321,9 +324,10 @@ mod tests { } #[test] - fn account_metadata() -> Result<()> { + async fn account_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let wsv = WorldStateView::new(world_with_test_account_with_metadata()?, kura); + let query_handle = LiveQueryStore::test().start(); + let wsv = WorldStateView::new(world_with_test_account_with_metadata()?, kura, query_handle); let bytes = FindAccountKeyValueByIdAndKey::new(ALICE_ID.clone(), Name::from_str("Bytes")?) .execute(&wsv)?; @@ -335,7 +339,7 @@ mod tests { } #[test] - fn find_all_blocks() -> Result<()> { + async fn find_all_blocks() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -348,7 +352,7 @@ mod tests { } #[test] - fn find_all_block_headers() -> Result<()> { + async fn find_all_block_headers() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -361,7 +365,7 @@ mod tests { } #[test] - fn find_block_header_by_hash() -> Result<()> { + async fn find_block_header_by_hash() -> Result<()> { let wsv = wsv_with_test_blocks_and_transactions(1, 1, 1)?; let block = wsv.all_blocks().last().expect("WSV is empty"); @@ -380,7 +384,7 @@ mod tests { } #[test] - fn find_all_transactions() -> Result<()> { + async fn find_all_transactions() -> Result<()> { let num_blocks = 100; let wsv = wsv_with_test_blocks_and_transactions(num_blocks, 1, 1)?; @@ -404,9 +408,10 @@ mod tests { } #[test] - fn find_transaction() -> Result<()> { + async fn find_transaction() -> Result<()> { let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); let instructions: [InstructionExpr; 0] = []; let tx = TransactionBuilder::new(ALICE_ID.clone()) @@ -446,7 +451,7 @@ mod tests { } #[test] - fn domain_metadata() -> Result<()> { + async fn domain_metadata() -> Result<()> { let kura = Kura::blank_kura_for_testing(); let wsv = { let mut metadata = Metadata::new(); @@ -467,7 +472,8 @@ mod tests { AssetDefinition::quantity(asset_definition_id).build(&ALICE_ID) ) .is_none()); - WorldStateView::new(World::with([domain], PeersIds::new()), kura) + let query_handle = LiveQueryStore::test().start(); + WorldStateView::new(World::with([domain], PeersIds::new()), kura, query_handle) }; let domain_id = DomainId::from_str("wonderland")?; diff --git a/core/src/smartcontracts/wasm.rs b/core/src/smartcontracts/wasm.rs index 6378291240c..8a38a178b6d 100644 --- a/core/src/smartcontracts/wasm.rs +++ b/core/src/smartcontracts/wasm.rs @@ -1,6 +1,9 @@ //! This module contains logic related to executing smartcontracts via //! `WebAssembly` VM Smartcontracts can be written in Rust, compiled //! to wasm format and submitted in a transaction + +use std::num::NonZeroUsize; + use error::*; use import_traits::{ ExecuteOperations as _, GetExecutorPayloads as _, SetPermissionTokenSchema as _, @@ -15,9 +18,12 @@ use iroha_data_model::{ isi::InstructionExpr, permission::PermissionTokenSchema, prelude::*, - query::QueryBox, - smart_contract::payloads::{self, Validate}, - Level as LogLevel, ValidationFail, + query::{QueryBox, QueryRequest, QueryWithParameters}, + smart_contract::{ + payloads::{self, Validate}, + SmartContractQueryRequest, + }, + BatchedResponse, Level as LogLevel, ValidationFail, }; use iroha_logger::debug; // NOTE: Using error_span so that span info is logged on every event @@ -29,11 +35,7 @@ use wasmtime::{ }; use self::state::Authority; -use super::query::LazyValue; -use crate::{ - smartcontracts::{Execute, ValidQuery as _}, - wsv::WorldStateView, -}; +use crate::{smartcontracts::Execute, wsv::WorldStateView, ValidQuery as _}; /// Name of the exported memory const WASM_MEMORY: &str = "memory"; @@ -77,7 +79,10 @@ mod import_traits { pub trait ExecuteOperations { /// Execute `query` on host #[codec::wrap_trait_fn] - fn execute_query(query: QueryBox, state: &S) -> Result; + fn execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail>; /// Execute `instruction` on host #[codec::wrap_trait_fn] @@ -765,26 +770,34 @@ impl Runtime { #[allow(clippy::needless_pass_by_value)] impl Runtime { - fn default_execute_query(query: QueryBox, state: &S) -> Result { - iroha_logger::debug!(%query, "Executing"); + fn default_execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail> { + iroha_logger::debug!(%query_request, "Executing"); let wsv = state.wsv(); - // NOTE: Smart contract (not executor) is trying to execute the query, validate it first - // TODO: Validation should be skipped when executing smart contract. - // There should be two steps validation and execution. First smart contract - // is validated and then it's executed. Here it's validating in both steps. - // Add a flag indicating whether smart contract is being validated or executed - wsv.executor() - .validate_query(wsv, state.authority(), query.clone())?; - - query - .execute(wsv) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + match query_request.0 { + QueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + wsv.executor() + .validate_query(wsv, state.authority(), query.clone())?; + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), + } + .map_err(Into::into) } fn default_execute_instruction( @@ -882,10 +895,10 @@ impl<'wrld> import_traits::ExecuteOperations> { #[codec::wrap] fn execute_query( - query: QueryBox, + query_request: SmartContractQueryRequest, state: &state::SmartContract<'wrld>, - ) -> Result { - Self::default_execute_query(query, state) + ) -> Result, ValidationFail> { + Self::default_execute_query(query_request, state) } #[codec::wrap] @@ -948,10 +961,10 @@ impl<'wrld> import_traits::ExecuteOperations> { #[codec::wrap] fn execute_query( - query: QueryBox, + query_request: SmartContractQueryRequest, state: &state::Trigger<'wrld>, - ) -> Result { - Self::default_execute_query(query, state) + ) -> Result, ValidationFail> { + Self::default_execute_query(query_request, state) } #[codec::wrap] @@ -975,16 +988,32 @@ where S: state::Wsv + state::WsvMut + state::Authority, { #[codec::wrap] - fn execute_query(query: QueryBox, state: &S) -> Result { - debug!(%query, "Executing as executor"); - - query - .execute(state.wsv()) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + fn execute_query( + query_request: SmartContractQueryRequest, + state: &S, + ) -> Result, ValidationFail> { + debug!(%query_request, "Executing as executor"); + + let wsv = state.wsv(); + + match query_request.0 { + QueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), + } + .map_err(Into::into) } #[codec::wrap] @@ -1211,18 +1240,31 @@ impl<'wrld> import_traits::ExecuteOperations, - ) -> Result { - debug!(%query, "Executing as executor"); - - query - .execute(state.wsv()) - .map(|lazy_value| match lazy_value { - LazyValue::Value(value) => value, - LazyValue::Iter(iter) => Value::Vec(iter.collect()), - }) - .map_err(Into::into) + ) -> Result, ValidationFail> { + debug!(%query_request, "Executing as executor"); + + let wsv = state.wsv(); + + match query_request.0 { + QueryRequest::Query(QueryWithParameters { + query, + sorting, + pagination, + }) => { + let output = query.execute(wsv)?; + + wsv.query_handle().handle_query_output( + output, + NonZeroUsize::new(30_000).expect("30 000 is not zero"), + &sorting, + pagination, + ) + } + QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), + } + .map_err(Into::into) } #[codec::wrap] @@ -1615,10 +1657,15 @@ mod tests { use std::str::FromStr as _; use iroha_crypto::KeyPair; + use iroha_data_model::query::{sorting::Sorting, Pagination}; use parity_scale_codec::Encode; + use tokio::test; use super::*; - use crate::{kura::Kura, smartcontracts::isi::Registrable as _, PeersIds, World}; + use crate::{ + kura::Kura, query::store::LiveQueryStore, smartcontracts::isi::Registrable as _, PeersIds, + World, + }; fn world_with_test_account(authority: &AccountId) -> World { let domain_id = authority.domain_id.clone(); @@ -1675,10 +1722,11 @@ mod tests { } #[test] - fn execute_instruction_exported() -> Result<(), Error> { + async fn execute_instruction_exported() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1716,11 +1764,16 @@ mod tests { } #[test] - fn execute_query_exported() -> Result<(), Error> { + async fn execute_query_exported() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); - let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); + let query_hex = encode_hex(SmartContractQueryRequest::query( + QueryBox::from(FindAccountById::new(authority.clone())), + Sorting::default(), + Pagination::default(), + )); let wat = format!( r#" @@ -1753,11 +1806,12 @@ mod tests { } #[test] - fn instruction_limit_reached() -> Result<(), Error> { + async fn instruction_limit_reached() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); + let query_handle = LiveQueryStore::test().start(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1802,10 +1856,11 @@ mod tests { } #[test] - fn instructions_not_allowed() -> Result<(), Error> { + async fn instructions_not_allowed() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let isi_hex = { let new_authority = AccountId::from_str("mad_hatter@wonderland").expect("Valid"); @@ -1850,10 +1905,11 @@ mod tests { } #[test] - fn queries_not_allowed() -> Result<(), Error> { + async fn queries_not_allowed() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); let wat = format!( @@ -1891,10 +1947,11 @@ mod tests { } #[test] - fn trigger_related_func_is_not_linked_for_smart_contract() -> Result<(), Error> { + async fn trigger_related_func_is_not_linked_for_smart_contract() -> Result<(), Error> { let authority = AccountId::from_str("alice@wonderland").expect("Valid"); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world_with_test_account(&authority), kura, query_handle); let query_hex = encode_hex(QueryBox::from(FindAccountById::new(authority.clone()))); let wat = format!( diff --git a/core/src/snapshot.rs b/core/src/snapshot.rs index 639408deb65..8ccbd0b318e 100644 --- a/core/src/snapshot.rs +++ b/core/src/snapshot.rs @@ -15,6 +15,7 @@ use tokio::sync::mpsc; use crate::{ kura::{BlockCount, Kura}, + query::store::LiveQueryStoreHandle, sumeragi::SumeragiHandle, wsv::{KuraSeed, WorldStateView}, }; @@ -155,6 +156,7 @@ impl SnapshotMaker { pub fn try_read_snapshot( snapshot_dir: impl AsRef, kura: &Arc, + query_handle: LiveQueryStoreHandle, BlockCount(block_count): BlockCount, ) -> Result { let mut bytes = Vec::new(); @@ -168,6 +170,7 @@ pub fn try_read_snapshot( let mut deserializer = serde_json::Deserializer::from_slice(&bytes); let seed = KuraSeed { kura: Arc::clone(kura), + query_handle, }; let wsv = seed.deserialize(&mut deserializer)?; let snapshot_height = wsv.block_hashes.len(); diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 1de96d43c8f..9dc404e5df8 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -47,11 +47,11 @@ pub struct Sumeragi { pub debug_force_soft_fork: bool, /// The current network topology. pub current_topology: Topology, - /// The sumeragi internal `WorldStateView`. This will probably + /// The sumeragi internal [`WorldStateView`]. This will probably /// morph into a wsv + various patches as we attempt to /// multithread isi execution. In the future we might also once /// again merge the internal wsv with the public facing one. But - /// as of now we keep them seperate for greater flexibility when + /// as of now we keep them separate for greater flexibility when /// optimizing. pub wsv: WorldStateView, /// A copy of wsv that is kept one block behind at all times. Because @@ -1159,9 +1159,10 @@ fn handle_block_sync( #[cfg(test)] mod tests { use iroha_primitives::unique_vec; + use tokio::test; use super::*; - use crate::smartcontracts::Registrable; + use crate::{query::store::LiveQueryStore, smartcontracts::Registrable}; fn create_data_for_test( topology: &Topology, @@ -1177,7 +1178,8 @@ mod tests { assert!(domain.add_account(account).is_none()); let world = World::with([domain], topology.ordered_peers.clone()); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(world, Arc::clone(&kura)); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(world, Arc::clone(&kura), query_handle); // Create "genesis" block // Creating an instruction @@ -1235,7 +1237,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_invalid_block() { + async fn block_sync_invalid_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1252,7 +1254,7 @@ mod tests { } #[test] - fn block_sync_invalid_soft_fork_block() { + async fn block_sync_invalid_soft_fork_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1279,7 +1281,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_not_proper_height() { + async fn block_sync_not_proper_height() { let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); @@ -1303,7 +1305,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_commit_block() { + async fn block_sync_commit_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1316,7 +1318,7 @@ mod tests { } #[test] - fn block_sync_replace_top_block() { + async fn block_sync_replace_top_block() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1340,7 +1342,7 @@ mod tests { } #[test] - fn block_sync_small_view_change_index() { + async fn block_sync_small_view_change_index() { let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), @@ -1377,7 +1379,7 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] - fn block_sync_genesis_block_do_not_replace() { + async fn block_sync_genesis_block_do_not_replace() { let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); diff --git a/core/src/wsv.rs b/core/src/wsv.rs index e095e7c2dd7..03b1be34e99 100644 --- a/core/src/wsv.rs +++ b/core/src/wsv.rs @@ -38,6 +38,7 @@ use crate::{ block::CommittedBlock, executor::Executor, kura::Kura, + query::store::LiveQueryStoreHandle, smartcontracts::{ triggers::{ self, @@ -287,6 +288,9 @@ pub struct WorldStateView { /// Reference to Kura subsystem. #[serde(skip)] kura: Arc, + /// Handle to the [`LiveQueryStore`]. + #[serde(skip)] + query_handle: LiveQueryStoreHandle, /// Temporary metrics buffer of amounts of any asset that has been transacted. #[serde(skip)] pub new_tx_amounts: Arc>>, @@ -296,6 +300,8 @@ pub struct WorldStateView { pub struct KuraSeed { /// Kura subsystem reference pub kura: Arc, + /// Handle to the [`LiveQueryStore`](crate::query::store::LiveQueryStore). + pub query_handle: LiveQueryStoreHandle, } impl<'de> DeserializeSeed<'de> for KuraSeed { @@ -358,6 +364,7 @@ impl<'de> DeserializeSeed<'de> for KuraSeed { transactions: transactions .ok_or_else(|| serde::de::Error::missing_field("transactions"))?, kura: self.loader.kura, + query_handle: self.loader.query_handle, engine, events_buffer: Vec::new(), new_tx_amounts: Arc::new(Mutex::new(Vec::new())), @@ -384,6 +391,7 @@ impl Clone for WorldStateView { new_tx_amounts: Arc::clone(&self.new_tx_amounts), engine: self.engine.clone(), kura: Arc::clone(&self.kura), + query_handle: self.query_handle.clone(), } } } @@ -393,12 +401,12 @@ impl WorldStateView { /// Construct [`WorldStateView`] with given [`World`]. #[must_use] #[inline] - pub fn new(world: World, kura: Arc) -> Self { + pub fn new(world: World, kura: Arc, query_handle: LiveQueryStoreHandle) -> Self { // Added to remain backward compatible with other code primary in tests let config = ConfigurationProxy::default() .build() .expect("Wsv proxy always builds"); - Self::from_configuration(config, world, kura) + Self::from_configuration(config, world, kura, query_handle) } /// Get `Account`'s `Asset`s @@ -907,7 +915,12 @@ impl WorldStateView { /// Construct [`WorldStateView`] with specific [`Configuration`]. #[inline] - pub fn from_configuration(config: Configuration, world: World, kura: Arc) -> Self { + pub fn from_configuration( + config: Configuration, + world: World, + kura: Arc, + query_handle: LiveQueryStoreHandle, + ) -> Self { Self { world, config, @@ -917,6 +930,7 @@ impl WorldStateView { new_tx_amounts: Arc::new(Mutex::new(Vec::new())), engine: wasm::create_engine(), kura, + query_handle, } } @@ -1255,6 +1269,11 @@ impl WorldStateView { }, ))) } + + /// Get reference to the [`LiveQueryStoreHandle`]. + pub fn query_handle(&self) -> &LiveQueryStoreHandle { + &self.query_handle + } } /// Bounds for `range` queries @@ -1326,16 +1345,20 @@ mod tests { use iroha_primitives::unique_vec::UniqueVec; use super::*; - use crate::{block::ValidBlock, role::RoleIdWithOwner, sumeragi::network_topology::Topology}; + use crate::{ + block::ValidBlock, query::store::LiveQueryStore, role::RoleIdWithOwner, + sumeragi::network_topology::Topology, + }; - #[test] - fn get_block_hashes_after_hash() { + #[tokio::test] + async fn get_block_hashes_after_hash() { const BLOCK_CNT: usize = 10; let topology = Topology::new(UniqueVec::new()); let block = ValidBlock::new_dummy().commit(&topology).unwrap(); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::default(), kura); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::default(), kura, query_handle); let mut block_hashes = vec![]; for i in 1..=BLOCK_CNT { @@ -1355,14 +1378,15 @@ mod tests { .eq(block_hashes.into_iter().skip(7))); } - #[test] - fn get_blocks_from_height() { + #[tokio::test] + async fn get_blocks_from_height() { const BLOCK_CNT: usize = 10; let topology = Topology::new(UniqueVec::new()); let block = ValidBlock::new_dummy().commit(&topology).unwrap(); let kura = Kura::blank_kura_for_testing(); - let mut wsv = WorldStateView::new(World::default(), kura.clone()); + let query_handle = LiveQueryStore::test().start(); + let mut wsv = WorldStateView::new(World::default(), kura.clone(), query_handle); for i in 1..=BLOCK_CNT { let mut block = block.clone(); diff --git a/data_model/src/lib.rs b/data_model/src/lib.rs index 2f9a6c21089..a4ca860bc49 100644 --- a/data_model/src/lib.rs +++ b/data_model/src/lib.rs @@ -28,7 +28,7 @@ use core::{ use block::SignedBlock; #[cfg(not(target_arch = "aarch64"))] use derive_more::Into; -use derive_more::{AsRef, DebugCustom, Deref, Display, From, FromStr}; +use derive_more::{AsRef, Constructor, DebugCustom, Deref, Display, From, FromStr}; use events::TriggeringFilterBox; use getset::Getters; use iroha_crypto::{HashOf, PublicKey}; @@ -41,6 +41,7 @@ use iroha_primitives::{ small::{Array as SmallArray, SmallVec}, }; use iroha_schema::IntoSchema; +use iroha_version::{declare_versioned_with_scale, version_with_scale}; pub use numeric::model::NumericValue; use parity_scale_codec::{Decode, Encode}; use prelude::{Executable, SignedTransaction, TransactionQueryOutput}; @@ -956,6 +957,21 @@ pub mod model { /// Error ERROR, } + + /// Batched response of a query sent to torii + #[derive( + Debug, Clone, Constructor, Getters, Decode, Encode, Deserialize, Serialize, IntoSchema, + )] + #[version_with_scale(version = 1, versioned_alias = "BatchedResponse")] + #[getset(get = "pub")] + #[must_use] + pub struct BatchedResponseV1 { + /// Current batch + pub batch: T, + /// Index of the next element in the result set. Client will use this value + /// in the next request to continue fetching results of the original query + pub cursor: crate::query::cursor::ForwardCursor, + } } // TODO: think of a way to `impl Identifiable for IdentifiableBox`. @@ -1756,55 +1772,13 @@ pub fn current_time() -> core::time::Duration { .expect("Failed to get the current system time") } -#[cfg(feature = "http")] -pub mod http { - //! Structures related to HTTP communication - - use iroha_data_model_derive::model; - use iroha_schema::IntoSchema; - use iroha_version::declare_versioned_with_scale; - - pub use self::model::*; - use crate::prelude::QueryOutput; - - declare_versioned_with_scale!(BatchedResponse 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); - - #[model] - pub mod model { - use getset::Getters; - use iroha_version::version_with_scale; - use parity_scale_codec::{Decode, Encode}; - use serde::{Deserialize, Serialize}; - - use super::*; - - /// Batched response of a query sent to torii - #[derive(Debug, Clone, Getters, Decode, Encode, Deserialize, Serialize, IntoSchema)] - #[version_with_scale(version = 1, versioned_alias = "BatchedResponse")] - #[getset(get = "pub")] - #[must_use] - pub struct BatchedResponseV1 { - /// Current batch - pub batch: T, - /// Index of the next element in the result set. Client will use this value - /// in the next request to continue fetching results of the original query - pub cursor: crate::query::cursor::ForwardCursor, - } - } - - impl From> for QueryOutput { - #[inline] - fn from(source: BatchedResponseV1) -> Self { - source.batch - } - } +declare_versioned_with_scale!(BatchedResponse 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); - impl From> for (T, crate::query::cursor::ForwardCursor) { - fn from(source: BatchedResponseV1) -> Self { - let BatchedResponseV1 { batch, cursor } = source; +impl From> for (T, crate::query::cursor::ForwardCursor) { + fn from(source: BatchedResponseV1) -> Self { + let BatchedResponseV1 { batch, cursor } = source; - (batch, cursor) - } + (batch, cursor) } } diff --git a/data_model/src/query/cursor.rs b/data_model/src/query/cursor.rs index 1c3f4a24542..f32309b45b3 100644 --- a/data_model/src/query/cursor.rs +++ b/data_model/src/query/cursor.rs @@ -1,5 +1,12 @@ //! Structures and traits related to server-side cursor. +#[cfg(not(feature = "std"))] +use alloc::{ + format, + string::{String, ToString as _}, + vec, + vec::Vec, +}; use core::num::{NonZeroU64, NonZeroUsize}; use getset::Getters; @@ -27,6 +34,13 @@ pub mod model { /// Pointer to the next element in the result set pub cursor: Option, } + + impl ForwardCursor { + /// Create a new cursor. + pub const fn new(query_id: Option, cursor: Option) -> Self { + Self { query_id, cursor } + } + } } mod candidate { diff --git a/data_model/src/query/mod.rs b/data_model/src/query/mod.rs index 211d0233935..44ad2274cda 100644 --- a/data_model/src/query/mod.rs +++ b/data_model/src/query/mod.rs @@ -3,22 +3,24 @@ #![allow(clippy::missing_inline_in_public_items, unused_imports)] #[cfg(not(feature = "std"))] -use alloc::{boxed::Box, format, string::String, vec::Vec}; +use alloc::{ + boxed::Box, + format, + string::{String, ToString as _}, + vec::Vec, +}; use core::cmp::Ordering; -#[cfg(feature = "http")] pub use cursor::ForwardCursor; -use derive_more::Display; +use derive_more::{Constructor, Display}; use iroha_crypto::{PublicKey, SignatureOf}; use iroha_data_model_derive::model; use iroha_macro::FromVariant; use iroha_schema::IntoSchema; use iroha_version::prelude::*; -#[cfg(feature = "http")] pub use pagination::Pagination; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -#[cfg(feature = "http")] pub use sorting::Sorting; pub use self::model::*; @@ -34,11 +36,8 @@ use crate::{ Identifiable, Value, }; -#[cfg(feature = "http")] pub mod cursor; -#[cfg(feature = "http")] pub mod pagination; -#[cfg(feature = "http")] pub mod sorting; macro_rules! queries { @@ -164,6 +163,27 @@ pub mod model { )] #[ffi_type] pub struct MetadataValue(pub Value); + + /// Request type clients (like http clients or wasm) can send to a query endpoint. + #[derive(Debug, Clone, Encode, Decode, Serialize, Deserialize)] + pub enum QueryRequest { + /// Query it-self. + /// Basically used for one-time queries or to get a cursor for big queries. + Query(QueryWithParameters), + /// Cursor over previously sent [`Query`](QueryRequest::Query). + Cursor(ForwardCursor), + } + + /// Query with parameters client can specify. + #[derive( + Debug, Constructor, Getters, Clone, PartialEq, Eq, Encode, Decode, Serialize, Deserialize, + )] + #[getset(get = "pub")] + pub struct QueryWithParameters { + pub query: Q, + pub sorting: Sorting, + pub pagination: Pagination, + } } impl From for Value { @@ -209,6 +229,25 @@ impl Ord for TransactionQueryOutput { } } +impl core::fmt::Display for QueryRequest { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + match self { + Self::Query(query) => write!(f, "{query}"), + Self::Cursor(cursor) => write!(f, "{cursor:?}"), + } + } +} + +impl core::fmt::Display for QueryWithParameters { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.debug_struct("QueryWithParameters") + .field("query", &self.query.to_string()) + .field("sorting", &self.sorting) + .field("pagination", &self.pagination) + .finish() + } +} + pub mod role { //! Queries related to [`Role`]. @@ -1237,10 +1276,6 @@ pub mod http { use super::*; use crate::{account::AccountId, predicate::PredicateBox}; - // TODO: Could we make a variant of `Value` that holds only query results? - /// Type representing Result of executing a query - pub type QueryOutput = Value; - declare_versioned_with_scale!(SignedQuery 1..2, Debug, Clone, iroha_macro::FromVariant, IntoSchema); #[model] @@ -1280,6 +1315,24 @@ pub mod http { /// Payload pub payload: QueryPayload, } + + /// End type of a query http clients can send to an endpoint. + #[derive(Debug, Clone, Decode, Encode)] + pub struct ClientQueryRequest(pub QueryRequest); + } + + impl ClientQueryRequest { + /// Construct a new request containing query. + pub fn query(query: SignedQuery, sorting: Sorting, pagination: Pagination) -> Self { + Self(QueryRequest::Query(QueryWithParameters::new( + query, sorting, pagination, + ))) + } + + /// Construct a new request containing cursor. + pub fn cursor(cursor: ForwardCursor) -> Self { + Self(QueryRequest::Cursor(cursor)) + } } mod candidate { @@ -1454,6 +1507,8 @@ pub mod error { #[skip_try_from] String, ), + /// Unknown query cursor + UnknownCursor, } /// Type assertion error diff --git a/data_model/src/query/pagination.rs b/data_model/src/query/pagination.rs index 71a12d95f8c..f93a1dadc25 100644 --- a/data_model/src/query/pagination.rs +++ b/data_model/src/query/pagination.rs @@ -17,17 +17,14 @@ use derive_more::{Constructor, Display}; use iroha_data_model_derive::model; use parity_scale_codec::{Decode, Encode}; use serde::{Deserialize, Serialize}; -use warp::{ - http::StatusCode, - reply::{self, Response}, - Reply, -}; const PAGINATION_START: &str = "start"; const PAGINATION_LIMIT: &str = "limit"; /// Structure for pagination requests -#[derive(Debug, Display, Clone, Copy, Default, Decode, Encode, Deserialize, Serialize)] +#[derive( + Debug, Display, Clone, Copy, PartialEq, Eq, Default, Decode, Encode, Deserialize, Serialize, +)] #[display( fmt = "{}--{}", "start.map(NonZeroU64::get).unwrap_or(0)", diff --git a/data_model/src/query/sorting.rs b/data_model/src/query/sorting.rs index 9ccbc83c610..015aeb3f34d 100644 --- a/data_model/src/query/sorting.rs +++ b/data_model/src/query/sorting.rs @@ -4,6 +4,7 @@ use alloc::{ format, string::{String, ToString as _}, + vec, vec::Vec, }; @@ -21,7 +22,7 @@ pub mod model { use super::*; /// Struct for sorting requests - #[derive(Debug, Clone, Default, Decode, Encode, Deserialize, Serialize)] + #[derive(Debug, Clone, Default, PartialEq, Eq, Decode, Encode, Deserialize, Serialize)] pub struct Sorting { /// Sort query result using [`Name`] of the key in [`Asset`]'s metadata. pub sort_by_metadata_key: Option, diff --git a/data_model/src/smart_contract.rs b/data_model/src/smart_contract.rs index f159fa69531..ceb9114f5ac 100644 --- a/data_model/src/smart_contract.rs +++ b/data_model/src/smart_contract.rs @@ -1,5 +1,13 @@ //! This module contains data and structures related only to smart contract execution +use parity_scale_codec::{Decode, Encode}; + +pub use self::model::*; +use crate::query::{ + cursor::ForwardCursor, sorting::Sorting, Pagination, QueryBox, QueryRequest, + QueryWithParameters, +}; + pub mod payloads { //! Payloads with function arguments for different entrypoints @@ -41,3 +49,50 @@ pub mod payloads { pub to_validate: T, } } + +#[crate::model] +pub mod model { + use super::*; + + /// Request type for `execute_query()` function. + #[derive(Debug, derive_more::Display, Clone, Decode, Encode)] + pub struct SmartContractQueryRequest(pub QueryRequest); +} + +impl SmartContractQueryRequest { + /// Construct a new request containing query. + pub fn query(query: QueryBox, sorting: Sorting, pagination: Pagination) -> Self { + Self(QueryRequest::Query(QueryWithParameters::new( + query, sorting, pagination, + ))) + } + + /// Construct a new request containing cursor. + pub fn cursor(cursor: ForwardCursor) -> Self { + Self(QueryRequest::Cursor(cursor)) + } + + /// Unwrap [`Self`] if it was previously constructed with [`query()`](Self::query). + /// + /// # Panics + /// + /// Panics if [`Self`] was constructed with [`cursor()`](Self::cursor). + pub fn unwrap_query(self) -> (QueryBox, Sorting, Pagination) { + match self.0 { + QueryRequest::Query(query) => (query.query, query.sorting, query.pagination), + QueryRequest::Cursor(_) => panic!("Expected query, got cursor"), + } + } + + /// Unwrap [`Self`] if it was previously constructed with [`cursor()`](Self::cursor). + /// + /// # Panics + /// + /// Panics if [`Self`] was constructed with [`query()`](Self::query). + pub fn unwrap_cursor(self) -> ForwardCursor { + match self.0 { + QueryRequest::Query(_) => panic!("Expected cursor, got query"), + QueryRequest::Cursor(cursor) => cursor, + } + } +} diff --git a/docs/source/references/config.md b/docs/source/references/config.md index b43fe9111f2..d8153062d07 100644 --- a/docs/source/references/config.md +++ b/docs/source/references/config.md @@ -56,8 +56,7 @@ The following is the default configuration used by Iroha. "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10, - "QUERY_IDLE_TIME_MS": 30000 + "FETCH_SIZE": 10 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -125,6 +124,9 @@ The following is the default configuration used by Iroha. "CREATE_EVERY_MS": 60000, "DIR_PATH": "./storage", "CREATION_ENABLED": true + }, + "LIVE_QUERY_STORE": { + "QUERY_IDLE_TIME_MS": 30000 } } ``` @@ -282,6 +284,28 @@ Has type `Option`[^1]. Can be configured via environment variable `KURA_IN "strict" ``` +## `live_query_store` + +LiveQueryStore configuration + +Has type `Option`[^1]. Can be configured via environment variable `IROHA_LIVE_QUERY_STORE` + +```json +{ + "QUERY_IDLE_TIME_MS": 30000 +} +``` + +### `live_query_store.query_idle_time_ms` + +Time query can remain in the store if unaccessed + +Has type `Option`[^1]. Can be configured via environment variable `LIVE_QUERY_STORE_QUERY_IDLE_TIME_MS` + +```json +30000 +``` + ## `logger` `Logger` configuration @@ -677,8 +701,7 @@ Has type `Option`[^1]. Can be configured via environm "FETCH_SIZE": 10, "MAX_CONTENT_LEN": 16384000, "MAX_TRANSACTION_SIZE": 32768, - "P2P_ADDR": null, - "QUERY_IDLE_TIME_MS": 30000 + "P2P_ADDR": null } ``` @@ -732,16 +755,6 @@ Has type `Option`[^1]. Can be configured via environment variable `T null ``` -### `torii.query_idle_time_ms` - -Time query can remain in the store if unaccessed - -Has type `Option`[^1]. Can be configured via environment variable `TORII_QUERY_IDLE_TIME_MS` - -```json -30000 -``` - ## `wsv` `WorldStateView` configuration diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 17d8eb33db2..428a32759d8 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -3624,6 +3624,10 @@ "tag": "Conversion", "discriminant": 3, "type": "String" + }, + { + "tag": "UnknownCursor", + "discriminant": 4 } ] }, diff --git a/schema/gen/src/lib.rs b/schema/gen/src/lib.rs index ade793e5963..ddac0fad272 100644 --- a/schema/gen/src/lib.rs +++ b/schema/gen/src/lib.rs @@ -4,8 +4,8 @@ use iroha_crypto::MerkleTree; use iroha_data_model::{ block::stream::{BlockMessage, BlockSubscriptionRequest}, - http::BatchedResponse, query::error::QueryExecutionFail, + BatchedResponse, }; use iroha_genesis::RawGenesisBlock; use iroha_schema::prelude::*; @@ -411,7 +411,6 @@ mod tests { }, domain::NewDomain, executor::Executor, - http::{BatchedResponse, BatchedResponseV1}, ipfs::IpfsPath, predicate::{ ip_addr::{Ipv4Predicate, Ipv6Predicate}, @@ -426,7 +425,7 @@ mod tests { ForwardCursor, }, transaction::{error::TransactionLimitError, SignedTransactionV1, TransactionLimits}, - SignedBlockWrapper, + BatchedResponse, BatchedResponseV1, SignedBlockWrapper, }; use iroha_genesis::RawGenesisBlock; use iroha_primitives::{ diff --git a/smart_contract/Cargo.toml b/smart_contract/Cargo.toml index 64ba4666156..b0d9950600f 100644 --- a/smart_contract/Cargo.toml +++ b/smart_contract/Cargo.toml @@ -16,10 +16,12 @@ debug = [] [dependencies] iroha_data_model.workspace = true +iroha_macro.workspace = true iroha_smart_contract_utils.workspace = true iroha_smart_contract_derive.workspace = true parity-scale-codec.workspace = true +derive_more.workspace = true [dev-dependencies] webassembly-test = "0.1.0" diff --git a/smart_contract/derive/src/entrypoint.rs b/smart_contract/derive/src/entrypoint.rs index fd14ab43233..a01e292d1ae 100644 --- a/smart_contract/derive/src/entrypoint.rs +++ b/smart_contract/derive/src/entrypoint.rs @@ -28,7 +28,7 @@ pub fn impl_entrypoint(_attr: TokenStream, item: TokenStream) -> TokenStream { 0, parse_quote!( use ::iroha_smart_contract::{ - debug::DebugExpectExt as _, ExecuteOnHost as _, QueryHost as _, + debug::DebugExpectExt as _, ExecuteOnHost as _, ExecuteQueryOnHost as _, }; ), ); diff --git a/smart_contract/executor/derive/src/entrypoint.rs b/smart_contract/executor/derive/src/entrypoint.rs index d89414f4e23..a518fcbd7a2 100644 --- a/smart_contract/executor/derive/src/entrypoint.rs +++ b/smart_contract/executor/derive/src/entrypoint.rs @@ -88,7 +88,7 @@ fn impl_validate_entrypoint( block.stmts.insert( 0, parse_quote!( - use ::iroha_executor::smart_contract::{ExecuteOnHost as _, QueryHost as _}; + use ::iroha_executor::smart_contract::{ExecuteOnHost as _, ExecuteQueryOnHost as _}; ), ); diff --git a/smart_contract/executor/derive/src/token.rs b/smart_contract/executor/derive/src/token.rs index 52d198bfab5..69f7915d65e 100644 --- a/smart_contract/executor/derive/src/token.rs +++ b/smart_contract/executor/derive/src/token.rs @@ -24,17 +24,21 @@ fn impl_token(ident: &syn::Ident, generics: &syn::Generics) -> proc_macro2::Toke quote! { impl #impl_generics ::iroha_executor::permission::Token for #ident #ty_generics #where_clause { fn is_owned_by(&self, account_id: &::iroha_executor::data_model::account::AccountId) -> bool { - let all_account_tokens: Vec = ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( - ::iroha_executor::smart_contract::QueryHost::execute( - &::iroha_executor::data_model::query::permission::FindPermissionTokensByAccountId::new( + let account_tokens_cursor = ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( + ::iroha_executor::smart_contract::ExecuteQueryOnHost::execute( + ::iroha_executor::data_model::query::permission::FindPermissionTokensByAccountId::new( account_id.clone(), ) ), "Failed to execute `FindPermissionTokensByAccountId` query" - ).try_into().unwrap(); + ); - all_account_tokens + account_tokens_cursor .into_iter() + .map(|res| ::iroha_executor::smart_contract::debug::DebugExpectExt::dbg_expect( + res, + "Failed to get permission token from cursor" + )) .filter_map(|token| Self::try_from(token).ok()) .any(|token| self == &token) } diff --git a/smart_contract/executor/src/default.rs b/smart_contract/executor/src/default.rs index a39735e3480..c9661089997 100644 --- a/smart_contract/executor/src/default.rs +++ b/smart_contract/executor/src/default.rs @@ -1326,7 +1326,7 @@ pub mod role { let role_id = $isi.object; let find_role_query_res = match FindRoleByRoleId::new(role_id).execute() { - Ok(res) => res, + Ok(res) => res.into_inner(), Err(error) => { deny!($executor, error); } diff --git a/smart_contract/executor/src/permission.rs b/smart_contract/executor/src/permission.rs index a0f60a6c35e..5a4b0f45ebf 100644 --- a/smart_contract/executor/src/permission.rs +++ b/smart_contract/executor/src/permission.rs @@ -3,6 +3,7 @@ use alloc::borrow::ToOwned as _; use iroha_schema::IntoSchema; +use iroha_smart_contract::QueryOutputCursor; use iroha_smart_contract_utils::debug::DebugExpectExt as _; use serde::{de::DeserializeOwned, Serialize}; @@ -139,8 +140,9 @@ pub mod asset_definition { asset_definition_id: &AssetDefinitionId, authority: &AccountId, ) -> Result { - let asset_definition = - FindAssetDefinitionById::new(asset_definition_id.clone()).execute()?; + let asset_definition = FindAssetDefinitionById::new(asset_definition_id.clone()) + .execute() + .map(QueryOutputCursor::into_inner)?; if asset_definition.owned_by() == authority { Ok(true) } else { @@ -224,7 +226,9 @@ pub mod trigger { /// - `FindTrigger` fails /// - `is_domain_owner` fails pub fn is_trigger_owner(trigger_id: &TriggerId, authority: &AccountId) -> Result { - let trigger = FindTriggerById::new(trigger_id.clone()).execute()?; + let trigger = FindTriggerById::new(trigger_id.clone()) + .execute() + .map(QueryOutputCursor::into_inner)?; if trigger.action().authority() == authority { Ok(true) } else { @@ -268,6 +272,7 @@ pub mod domain { pub fn is_domain_owner(domain_id: &DomainId, authority: &AccountId) -> Result { FindDomainById::new(domain_id.clone()) .execute() + .map(QueryOutputCursor::into_inner) .map(|domain| domain.owned_by() == authority) } diff --git a/smart_contract/src/lib.rs b/smart_contract/src/lib.rs index 03c557b8b6b..932692066ad 100644 --- a/smart_contract/src/lib.rs +++ b/smart_contract/src/lib.rs @@ -4,16 +4,20 @@ extern crate alloc; -use alloc::{boxed::Box, collections::BTreeMap}; +use alloc::{boxed::Box, collections::BTreeMap, vec::Vec}; #[cfg(not(test))] use data_model::smart_contract::payloads; use data_model::{ isi::Instruction, prelude::*, - query::{Query, QueryBox}, + query::{cursor::ForwardCursor, sorting::Sorting, Pagination, Query, QueryBox}, + smart_contract::SmartContractQueryRequest, + BatchedResponse, }; +use derive_more::Display; pub use iroha_data_model as data_model; +use iroha_macro::error::ErrorTryFromEnum; pub use iroha_smart_contract_derive::main; pub use iroha_smart_contract_utils::{debug, log}; use iroha_smart_contract_utils::{ @@ -50,17 +54,6 @@ pub trait ExecuteOnHost: Instruction { fn execute(&self) -> Result<(), ValidationFail>; } -/// Implementing queries can be executed on the host -pub trait QueryHost: Query { - /// Execute query on the host - /// - /// # Errors - /// - /// - If query validation failed - /// - If query execution failed - fn execute(&self) -> Result; -} - // TODO: Remove the Clone bound. It can be done by custom serialization to InstructionExpr impl ExecuteOnHost for I { fn execute(&self) -> Result<(), ValidationFail> { @@ -81,30 +74,260 @@ impl ExecuteOnHost for I { } } -// TODO: Remove the Clone bound. It can be done by custom serialization/deserialization to QueryBox -impl + Encode + Clone> QueryHost for Q +/// Generic query request containing additional parameters. +#[derive(Debug)] +pub struct QueryRequest { + query: Q, + sorting: Sorting, + pagination: Pagination, +} + +impl From> for SmartContractQueryRequest { + fn from(query_request: QueryRequest) -> Self { + SmartContractQueryRequest::query( + query_request.query.into(), + query_request.sorting, + query_request.pagination, + ) + } +} + +/// Implementing queries can be executed on the host +/// +/// TODO: `&self` should be enough +pub trait ExecuteQueryOnHost: Sized { + /// Query output type. + type Output; + + /// Type of [`QueryRequest`]. + type QueryRequest; + + /// Apply sorting to a query + fn sort(self, sorting: Sorting) -> Self::QueryRequest; + + /// Apply pagination to a query + fn paginate(self, pagination: Pagination) -> Self::QueryRequest; + + /// Execute query on the host + /// + /// # Errors + /// + /// - If query validation failed + /// - If query execution failed + fn execute(self) -> Result, ValidationFail>; +} + +impl ExecuteQueryOnHost for Q +where + Q::Output: DecodeAll, + >::Error: core::fmt::Debug, +{ + type Output = Q::Output; + type QueryRequest = QueryRequest; + + fn sort(self, sorting: Sorting) -> Self::QueryRequest { + QueryRequest { + query: self, + sorting, + pagination: Pagination::default(), + } + } + + fn paginate(self, pagination: Pagination) -> Self::QueryRequest { + QueryRequest { + query: self, + sorting: Sorting::default(), + pagination, + } + } + + fn execute(self) -> Result, ValidationFail> { + QueryRequest { + query: self, + sorting: Sorting::default(), + pagination: Pagination::default(), + } + .execute() + } +} + +impl ExecuteQueryOnHost for QueryRequest where Q::Output: DecodeAll, >::Error: core::fmt::Debug, { - fn execute(&self) -> Result { + type Output = Q::Output; + type QueryRequest = Self; + + fn sort(mut self, sorting: Sorting) -> Self { + self.sorting = sorting; + self + } + + fn paginate(mut self, pagination: Pagination) -> Self { + self.pagination = pagination; + self + } + + #[allow(irrefutable_let_patterns)] + fn execute(self) -> Result, ValidationFail> { + #[cfg(not(test))] + use host::execute_query as host_execute_query; + #[cfg(test)] + use tests::_iroha_smart_contract_execute_query_mock as host_execute_query; + + let wasm_query_request = SmartContractQueryRequest::from(self); + + // Safety: - `host_execute_query` doesn't take ownership of it's pointer parameter + // - ownership of the returned result is transferred into `_decode_from_raw` + let res: Result, ValidationFail> = unsafe { + decode_with_length_prefix_from_raw(encode_and_execute( + &wasm_query_request, + host_execute_query, + )) + }; + let BatchedResponse::V1(response) = res? else { + panic!("Unsupported response version") + }; + let (value, cursor) = response.into(); + let typed_value = Self::Output::try_from(value).expect("Query output has incorrect type"); + Ok(QueryOutputCursor { + batch: typed_value, + cursor, + }) + } +} + +/// Cursor over query results implementing [`IntoIterator`]. +/// +/// If you execute [`QueryBox`] when you probably want to use [`collect()`](Self::collect) method +/// instead of [`into_iter()`](Self::into_iter) to ensure that all results vere consumed. +#[derive(Debug, Encode, PartialEq, Eq)] +pub struct QueryOutputCursor { + batch: T, + cursor: ForwardCursor, +} + +impl QueryOutputCursor { + /// Get inner value consuming [`Self`]. + pub fn into_inner(self) -> T { + self.batch + } +} + +impl QueryOutputCursor { + /// Same as [`into_inner()`](Self::into_inner) but collects all values of [`Value::Vec`] + /// in case if there are some cached results left on the host side. + /// + /// # Errors + /// + /// May fail due to the same reasons [`QueryOutputCursorIterator`] can fail to iterate. + pub fn collect(self) -> Result>> { + let Value::Vec(v) = self.batch else { + return Ok(self.batch) + }; + + // Making sure we received all values + let cursor = QueryOutputCursor { + batch: v, + cursor: self.cursor, + }; + cursor + .into_iter() + .collect::, _>>() + .map(Value::Vec) + } +} + +impl> IntoIterator for QueryOutputCursor> { + type Item = Result>>; + type IntoIter = QueryOutputCursorIterator; + + fn into_iter(self) -> Self::IntoIter { + QueryOutputCursorIterator { + iter: self.batch.into_iter(), + cursor: self.cursor, + } + } +} + +/// Iterator over query results. +/// +/// # Errors +/// +/// Iteration may fail due to the following reasons: +/// +/// - Failed to get next batch of results from the host +/// - Failed to convert batch of results into the requested type +/// +/// # Panics +/// +/// Panics if response from host is not [`BatchedResponse::V1`]. +pub struct QueryOutputCursorIterator { + iter: as IntoIterator>::IntoIter, + cursor: ForwardCursor, +} + +impl> QueryOutputCursorIterator { + #[allow(irrefutable_let_patterns)] + fn next_batch(&self) -> Result>> { #[cfg(not(test))] use host::execute_query as host_execute_query; #[cfg(test)] use tests::_iroha_smart_contract_execute_query_mock as host_execute_query; - // TODO: Redundant conversion into `QueryBox` - let query_box: QueryBox = self.clone().into(); + let wasm_query_request = SmartContractQueryRequest::cursor(self.cursor.clone()); + // Safety: - `host_execute_query` doesn't take ownership of it's pointer parameter // - ownership of the returned result is transferred into `_decode_from_raw` - let res: Result = unsafe { - decode_with_length_prefix_from_raw(encode_and_execute(&query_box, host_execute_query)) + let res: Result, ValidationFail> = unsafe { + decode_with_length_prefix_from_raw(encode_and_execute( + &wasm_query_request, + host_execute_query, + )) + }; + let BatchedResponse::V1(response) = res? else { + panic!("Unsupported response version") + }; + let (value, cursor) = response.into(); + let vec = Vec::::try_from(value)?; + Ok(Self { + iter: vec.into_iter(), + cursor, + }) + } +} + +impl> Iterator for QueryOutputCursorIterator { + type Item = Result>>; + + fn next(&mut self) -> Option { + if let Some(item) = self.iter.next() { + return Some(Ok(item)); + } + + let mut next_iter = match self.next_batch() { + Ok(next_iter) => next_iter, + Err(QueryOutputCursorError::Validation(ValidationFail::QueryFailed( + iroha_data_model::query::error::QueryExecutionFail::UnknownCursor, + ))) => return None, + Err(err) => return Some(Err(err)), }; - res.map(|value| value.try_into().expect("Query returned invalid type")) + core::mem::swap(self, &mut next_iter); + self.iter.next().map(Ok) } } +/// Error iterating other query results. +#[derive(Debug, Display, iroha_macro::FromVariant)] +pub enum QueryOutputCursorError { + /// Validation error on the host side during next batch retrieval. + Validation(ValidationFail), + /// Host returned unexpected output type. + Conversion(ErrorTryFromEnum), +} + /// World state view of the host #[derive(Debug, Clone, Copy)] pub struct Host; @@ -136,7 +359,14 @@ impl Context { impl iroha_data_model::evaluate::Context for Context { fn query(&self, query: &QueryBox) -> Result { - query.execute() + let value_cursor = query.clone().execute()?; + match value_cursor.collect() { + Ok(value) => Ok(value), + Err(QueryOutputCursorError::Validation(err)) => Err(err), + Err(QueryOutputCursorError::Conversion(err)) => { + panic!("Conversion error during collecting query result: {err:?}") + } + } } fn get(&self, name: &Name) -> Option<&Value> { @@ -188,20 +418,23 @@ mod host { /// Most used items pub mod prelude { - pub use crate::{ExecuteOnHost, QueryHost}; + pub use crate::{ExecuteOnHost, ExecuteQueryOnHost}; } #[cfg(test)] mod tests { use core::{mem::ManuallyDrop, slice}; + use data_model::{query::asset::FindAssetQuantityById, BatchedResponseV1}; use iroha_smart_contract_utils::encode_with_length_prefix; use webassembly_test::webassembly_test; use super::*; - const QUERY_RESULT: Result = - Ok(Value::Numeric(NumericValue::U32(1234_u32))); + const QUERY_RESULT: Result, ValidationFail> = Ok(QueryOutputCursor { + batch: Value::Numeric(NumericValue::U32(1234_u32)), + cursor: ForwardCursor::new(None, None), + }); const ISI_RESULT: Result<(), ValidationFail> = Ok(()); const EXPRESSION_RESULT: NumericValue = NumericValue::U32(5_u32); @@ -213,8 +446,8 @@ mod tests { } fn get_test_query() -> QueryBox { - let account_id: AccountId = "alice@wonderland".parse().expect("Valid"); - FindAccountById::new(account_id).into() + let asset_id: AssetId = "rose##alice@wonderland".parse().expect("Valid"); + FindAssetQuantityById::new(asset_id).into() } fn get_test_expression() -> EvaluatesTo { @@ -239,10 +472,16 @@ mod tests { len: usize, ) -> *const u8 { let bytes = slice::from_raw_parts(ptr, len); - let query = QueryBox::decode_all(&mut &*bytes).unwrap(); + let query_request = SmartContractQueryRequest::decode_all(&mut &*bytes).unwrap(); + let query = query_request.unwrap_query().0; assert_eq!(query, get_test_query()); - ManuallyDrop::new(encode_with_length_prefix(&QUERY_RESULT)).as_ptr() + let response: Result, ValidationFail> = Ok(BatchedResponseV1::new( + QUERY_RESULT.unwrap().into_inner(), + ForwardCursor::new(None, None), + ) + .into()); + ManuallyDrop::new(encode_with_length_prefix(&response)).as_ptr() } #[webassembly_test] diff --git a/smart_contract/trigger/derive/src/entrypoint.rs b/smart_contract/trigger/derive/src/entrypoint.rs index 71387f19be9..5fe5d822f71 100644 --- a/smart_contract/trigger/derive/src/entrypoint.rs +++ b/smart_contract/trigger/derive/src/entrypoint.rs @@ -27,7 +27,7 @@ pub fn impl_entrypoint(_attr: TokenStream, item: TokenStream) -> TokenStream { 0, parse_quote!( use ::iroha_trigger::smart_contract::{ - debug::DebugExpectExt as _, ExecuteOnHost as _, QueryHost as _, + debug::DebugExpectExt as _, ExecuteOnHost as _, ExecuteQueryOnHost as _, }; ), ); diff --git a/telemetry/derive/tests/ui_fail/args_no_wsv.rs b/telemetry/derive/tests/ui_fail/args_no_wsv.rs index 388231c5a8b..d85e46478e6 100644 --- a/telemetry/derive/tests/ui_fail/args_no_wsv.rs +++ b/telemetry/derive/tests/ui_fail/args_no_wsv.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,6 +6,5 @@ fn execute(_wsv: &World) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); + } diff --git a/telemetry/derive/tests/ui_fail/args_no_wsv.stderr b/telemetry/derive/tests/ui_fail/args_no_wsv.stderr index 4e229217d34..4aa2e1da1c3 100644 --- a/telemetry/derive/tests/ui_fail/args_no_wsv.stderr +++ b/telemetry/derive/tests/ui_fail/args_no_wsv.stderr @@ -1,5 +1,5 @@ error: At least one argument must be a `WorldStateView`. - --> tests/ui_fail/args_no_wsv.rs:5:12 + --> tests/ui_fail/args_no_wsv.rs:4:12 | -5 | fn execute(_wsv: &World) -> Result<(), ()> { +4 | fn execute(_wsv: &World) -> Result<(), ()> { | ^^^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/bare_spec.rs b/telemetry/derive/tests/ui_fail/bare_spec.rs index 5ea32d7fb4e..bb6029fddf1 100644 --- a/telemetry/derive/tests/ui_fail/bare_spec.rs +++ b/telemetry/derive/tests/ui_fail/bare_spec.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(test_query, "another_test_query_without_timing")] @@ -7,6 +6,4 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); } diff --git a/telemetry/derive/tests/ui_fail/bare_spec.stderr b/telemetry/derive/tests/ui_fail/bare_spec.stderr index 72c5f11a848..0bb06d93ac6 100644 --- a/telemetry/derive/tests/ui_fail/bare_spec.stderr +++ b/telemetry/derive/tests/ui_fail/bare_spec.stderr @@ -1,5 +1,5 @@ error: expected literal - --> tests/ui_fail/bare_spec.rs:4:11 + --> tests/ui_fail/bare_spec.rs:3:11 | -4 | #[metrics(test_query, "another_test_query_without_timing")] +3 | #[metrics(test_query, "another_test_query_without_timing")] | ^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/doubled_plus.rs b/telemetry/derive/tests/ui_fail/doubled_plus.rs index 58fd7eae068..61db9e0dda1 100644 --- a/telemetry/derive/tests/ui_fail/doubled_plus.rs +++ b/telemetry/derive/tests/ui_fail/doubled_plus.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", ++"another_test_query_without_timing")] @@ -7,6 +6,5 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); + } diff --git a/telemetry/derive/tests/ui_fail/doubled_plus.stderr b/telemetry/derive/tests/ui_fail/doubled_plus.stderr index becb8bf32c5..751d4f27b17 100644 --- a/telemetry/derive/tests/ui_fail/doubled_plus.stderr +++ b/telemetry/derive/tests/ui_fail/doubled_plus.stderr @@ -1,5 +1,5 @@ error: expected literal - --> tests/ui_fail/doubled_plus.rs:4:27 + --> tests/ui_fail/doubled_plus.rs:3:27 | -4 | #[metrics(+"test_query", ++"another_test_query_without_timing")] +3 | #[metrics(+"test_query", ++"another_test_query_without_timing")] | ^ diff --git a/telemetry/derive/tests/ui_fail/no_args.rs b/telemetry/derive/tests/ui_fail/no_args.rs index 00a0f60dd1f..73c27db3bab 100644 --- a/telemetry/derive/tests/ui_fail/no_args.rs +++ b/telemetry/derive/tests/ui_fail/no_args.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,6 +6,4 @@ fn execute() -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _world = WorldStateView::new(iroha_core::prelude::World::default(), kura); } diff --git a/telemetry/derive/tests/ui_fail/no_args.stderr b/telemetry/derive/tests/ui_fail/no_args.stderr index 5b1e88c34d2..bf2d6e9b557 100644 --- a/telemetry/derive/tests/ui_fail/no_args.stderr +++ b/telemetry/derive/tests/ui_fail/no_args.stderr @@ -1,5 +1,5 @@ error: Function must have at least one argument of type `WorldStateView`. - --> tests/ui_fail/no_args.rs:5:1 + --> tests/ui_fail/no_args.rs:4:1 | -5 | fn execute() -> Result<(), ()> { +4 | fn execute() -> Result<(), ()> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/non_snake_case_name.rs b/telemetry/derive/tests/ui_fail/non_snake_case_name.rs index 065cf621c56..97c83ab152f 100644 --- a/telemetry/derive/tests/ui_fail/non_snake_case_name.rs +++ b/telemetry/derive/tests/ui_fail/non_snake_case_name.rs @@ -1,5 +1,3 @@ -#![allow(unused_imports)] // Unused because macro will no generate anything -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test query", "another_test_query_without_timing")] diff --git a/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr b/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr index 2b2d9f0ee51..6bb8fe44028 100644 --- a/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr +++ b/telemetry/derive/tests/ui_fail/non_snake_case_name.stderr @@ -1,7 +1,7 @@ error: Spaces are not allowed. Use underscores '_' - --> tests/ui_fail/non_snake_case_name.rs:5:1 + --> tests/ui_fail/non_snake_case_name.rs:3:1 | -5 | #[metrics(+"test query", "another_test_query_without_timing")] +3 | #[metrics(+"test query", "another_test_query_without_timing")] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this error originates in the attribute macro `metrics` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/telemetry/derive/tests/ui_fail/not_execute.rs b/telemetry/derive/tests/ui_fail/not_execute.rs index 4d300ed88fa..7a63c17d08f 100644 --- a/telemetry/derive/tests/ui_fail/not_execute.rs +++ b/telemetry/derive/tests/ui_fail/not_execute.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::{World, WorldStateView}; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,7 +6,5 @@ fn exequte(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: World = World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/not_execute.stderr b/telemetry/derive/tests/ui_fail/not_execute.stderr index 4146a4ab62b..7f4ab728dae 100644 --- a/telemetry/derive/tests/ui_fail/not_execute.stderr +++ b/telemetry/derive/tests/ui_fail/not_execute.stderr @@ -1,5 +1,5 @@ error: Function should be an `impl execute` - --> tests/ui_fail/not_execute.rs:5:4 + --> tests/ui_fail/not_execute.rs:4:4 | -5 | fn exequte(wsv: &WorldStateView) -> Result<(), ()> { +4 | fn exequte(wsv: &WorldStateView) -> Result<(), ()> { | ^^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/not_return_result.rs b/telemetry/derive/tests/ui_fail/not_return_result.rs index 18fbf19d0ca..ca779d8e5ec 100644 --- a/telemetry/derive/tests/ui_fail/not_return_result.rs +++ b/telemetry/derive/tests/ui_fail/not_return_result.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::{World, WorldStateView}; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,8 +6,6 @@ fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: World = World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/not_return_result.stderr b/telemetry/derive/tests/ui_fail/not_return_result.stderr index 37ef12869a2..6652f72014d 100644 --- a/telemetry/derive/tests/ui_fail/not_return_result.stderr +++ b/telemetry/derive/tests/ui_fail/not_return_result.stderr @@ -1,5 +1,5 @@ error: Should return `Result`. Found RESULT - --> tests/ui_fail/not_return_result.rs:5:50 + --> tests/ui_fail/not_return_result.rs:4:50 | -5 | fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { +4 | fn execute(_wsv: &WorldStateView) -> iroha_core::RESULT { | ^^^^^^ diff --git a/telemetry/derive/tests/ui_fail/return_nothing.rs b/telemetry/derive/tests/ui_fail/return_nothing.rs index 759960622a6..419325ac0ba 100644 --- a/telemetry/derive/tests/ui_fail/return_nothing.rs +++ b/telemetry/derive/tests/ui_fail/return_nothing.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing")] @@ -7,7 +6,5 @@ fn execute(wsv: &WorldStateView) { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: iroha_core::wsv::World = iroha_core::wsv::World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/return_nothing.stderr b/telemetry/derive/tests/ui_fail/return_nothing.stderr index f92d23ee205..93385e20c54 100644 --- a/telemetry/derive/tests/ui_fail/return_nothing.stderr +++ b/telemetry/derive/tests/ui_fail/return_nothing.stderr @@ -1,7 +1,7 @@ error: `Fn` must return `Result`. Returns nothing instead. - --> tests/ui_fail/return_nothing.rs:4:1 + --> tests/ui_fail/return_nothing.rs:3:1 | -4 | #[metrics(+"test_query", "another_test_query_without_timing")] +3 | #[metrics(+"test_query", "another_test_query_without_timing")] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: this error originates in the attribute macro `metrics` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/telemetry/derive/tests/ui_fail/trailing_plus.rs b/telemetry/derive/tests/ui_fail/trailing_plus.rs index c692d625ae1..3034f0c7f1d 100644 --- a/telemetry/derive/tests/ui_fail/trailing_plus.rs +++ b/telemetry/derive/tests/ui_fail/trailing_plus.rs @@ -1,4 +1,3 @@ -use iroha_core::wsv::WorldStateView; use iroha_telemetry_derive::metrics; #[metrics(+"test_query", "another_test_query_without_timing"+)] @@ -7,7 +6,5 @@ fn execute(wsv: &WorldStateView) -> Result<(), ()> { } fn main() { - let kura = iroha_core::kura::Kura::blank_kura_for_testing(); - let _something: iroha_core::wsv::World = iroha_core::wsv::World::default(); - let _world = WorldStateView::new(_something, kura); + } diff --git a/telemetry/derive/tests/ui_fail/trailing_plus.stderr b/telemetry/derive/tests/ui_fail/trailing_plus.stderr index f613692ad1c..6378d3ff10d 100644 --- a/telemetry/derive/tests/ui_fail/trailing_plus.stderr +++ b/telemetry/derive/tests/ui_fail/trailing_plus.stderr @@ -1,5 +1,5 @@ error: expected `,` - --> tests/ui_fail/trailing_plus.rs:4:61 + --> tests/ui_fail/trailing_plus.rs:3:61 | -4 | #[metrics(+"test_query", "another_test_query_without_timing"+)] +3 | #[metrics(+"test_query", "another_test_query_without_timing"+)] | ^ diff --git a/tools/parity_scale_decoder/src/main.rs b/tools/parity_scale_decoder/src/main.rs index 0cff5a839e5..dcbb4069df3 100644 --- a/tools/parity_scale_decoder/src/main.rs +++ b/tools/parity_scale_decoder/src/main.rs @@ -22,7 +22,6 @@ use iroha_data_model::{ }, domain::NewDomain, executor::Executor, - http::{BatchedResponse, BatchedResponseV1}, ipfs::IpfsPath, predicate::{ ip_addr::{Ipv4Predicate, Ipv6Predicate}, @@ -37,7 +36,7 @@ use iroha_data_model::{ ForwardCursor, }, transaction::{error::TransactionLimitError, SignedTransactionV1, TransactionLimits}, - SignedBlockWrapper, + BatchedResponse, BatchedResponseV1, SignedBlockWrapper, }; use iroha_primitives::{ addr::{Ipv4Addr, Ipv6Addr},

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 literal 501672 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