From b22ebc474204a91c6ec4bf422397f12df58e7946 Mon Sep 17 00:00:00 2001 From: Daniil Polyakov Date: Wed, 25 Oct 2023 19:58:32 +0300 Subject: [PATCH] [feature] #3900: `fetch_size` query parameter Signed-off-by: Daniil Polyakov --- Cargo.lock | 2 + cli/Cargo.toml | 1 + cli/src/torii/mod.rs | 4 +- cli/src/torii/routing.rs | 24 +++++------ client/src/client.rs | 19 ++++++++- client/src/query_builder.rs | 10 ++++- client/tests/integration/pagination.rs | 44 +++++++++++++++----- client/tests/integration/permissions.rs | 2 +- client/tests/integration/queries/mod.rs | 26 ++++++++++++ client/tests/integration/sorting.rs | 24 +++++------ config/iroha_test_config.json | 3 +- config/src/torii.rs | 10 +---- configs/peer/config.json | 3 +- configs/peer/executor.wasm | Bin 497705 -> 498030 bytes core/src/query/cursor.rs | 15 ++++--- core/src/query/store.rs | 34 ++++++++++----- core/src/smartcontracts/wasm.rs | 30 +++++--------- data_model/Cargo.toml | 3 +- data_model/src/query/mod.rs | 53 ++++++++++++++++++++++-- data_model/src/smart_contract.rs | 18 +++++--- docs/source/references/config.md | 14 +------ docs/source/references/schema.json | 4 ++ smart_contract/src/lib.rs | 22 ++++++++++ 23 files changed, 252 insertions(+), 113 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aab41d8f06a..c380ea9c76b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2724,6 +2724,7 @@ dependencies = [ "async-trait", "color-eyre", "dashmap", + "derive_more", "displaydoc", "eyre", "futures", @@ -2966,6 +2967,7 @@ dependencies = [ "iroha_primitives", "iroha_schema", "iroha_version", + "once_cell", "parity-scale-codec", "serde", "serde_json", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 89d1f08a41b..e0abd7c480b 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -59,6 +59,7 @@ iroha_genesis = { workspace = true } iroha_wasm_builder = { workspace = true } +derive_more = { workspace = true } async-trait = { workspace = true } color-eyre = { workspace = true } eyre = { workspace = true } diff --git a/cli/src/torii/mod.rs b/cli/src/torii/mod.rs index db8009e8a03..9594362ab5d 100644 --- a/cli/src/torii/mod.rs +++ b/cli/src/torii/mod.rs @@ -105,7 +105,9 @@ impl Error { QueryFailed(query_error) | InstructionFailed(InstructionExecutionError::Query(query_error)) => match query_error { - Evaluate(_) | Conversion(_) | UnknownCursor => StatusCode::BAD_REQUEST, + Evaluate(_) | Conversion(_) | UnknownCursor | FetchSizeTooBig => { + StatusCode::BAD_REQUEST + } Signature(_) => StatusCode::UNAUTHORIZED, Find(_) => StatusCode::NOT_FOUND, }, diff --git a/cli/src/torii/routing.rs b/cli/src/torii/routing.rs index 5181f4fe57c..48330bdffb9 100644 --- a/cli/src/torii/routing.rs +++ b/cli/src/torii/routing.rs @@ -5,8 +5,6 @@ // FIXME: This can't be fixed, because one trait in `warp` is private. #![allow(opaque_hidden_inferred_bound)] -use std::num::NonZeroUsize; - use eyre::{eyre, WrapErr}; use futures::TryStreamExt; use iroha_config::{ @@ -45,11 +43,13 @@ fn client_query_request( body::versioned::() .and(sorting()) .and(paginate()) - .and_then(|signed_query, sorting, pagination| async move { + .and(fetch_size()) + .and_then(|signed_query, sorting, pagination, fetch_size| async move { Result::<_, std::convert::Infallible>::Ok(http::ClientQueryRequest::query( signed_query, sorting, pagination, + fetch_size, )) }) .or(cursor().and_then(|cursor| async move { @@ -73,6 +73,11 @@ fn paginate() -> impl warp::Filter impl warp::Filter + Copy { + warp::query() +} + #[iroha_futures::telemetry_future] async fn handle_instructions( queue: Arc, @@ -101,7 +106,6 @@ async fn handle_instructions( async fn handle_queries( live_query_store: LiveQueryStoreHandle, sumeragi: SumeragiHandle, - fetch_size: NonZeroUsize, query_request: http::ClientQueryRequest, ) -> Result>> { @@ -110,11 +114,12 @@ async fn handle_queries( query: signed_query, sorting, pagination, + fetch_size, }) => 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) + .handle_query_output(query_output, &sorting, pagination, fetch_size) .map_err(ValidationFail::from) }), QueryRequest::Cursor(cursor) => live_query_store @@ -477,15 +482,10 @@ impl Torii { )) .and(body::versioned()), ) - .or(endpoint4( + .or(endpoint3( handle_queries, warp::path(uri::QUERY) - .and(add_state!( - self.query_service, - self.sumeragi, - NonZeroUsize::try_from(self.iroha_cfg.torii.fetch_size) - .expect("u64 should always fit into usize") - )) + .and(add_state!(self.query_service, self.sumeragi,)) .and(client_query_request()), )) .or(endpoint2( diff --git a/client/src/client.rs b/client/src/client.rs index 6e3b28f1196..d81c39aff56 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -245,6 +245,15 @@ pub struct ResultSet { client_cursor: usize, } +impl ResultSet { + /// Get the length of the batch returned by Iroha. + /// + /// This is controlled by `fetch_size` parameter of the query. + pub fn batch_len(&self) -> usize { + self.iter.len() + } +} + impl Iterator for ResultSet where Vec: QueryOutput, @@ -374,6 +383,7 @@ impl QueryRequest { query: Vec::default(), sorting: Sorting::default(), pagination: Pagination::default(), + fetch_size: FetchSize::default(), }, ), } @@ -389,6 +399,7 @@ impl QueryRequest { iroha_data_model::query::QueryRequest::Query(query_with_params) => builder .params(query_with_params.sorting().clone().into_query_parameters()) .params(query_with_params.pagination().into_query_parameters()) + .params(query_with_params.fetch_size().into_query_parameters()) .body(query_with_params.query().clone()), iroha_data_model::query::QueryRequest::Cursor(cursor) => { builder.params(Vec::from(cursor)) @@ -798,6 +809,7 @@ impl Client { filter: PredicateBox, pagination: Pagination, sorting: Sorting, + fetch_size: FetchSize, ) -> Result<(DefaultRequestBuilder, QueryResponseHandler)> where >::Error: Into, @@ -809,7 +821,9 @@ impl Client { torii_url: self.torii_url.clone(), headers: self.headers.clone(), request: iroha_data_model::query::QueryRequest::Query( - iroha_data_model::query::QueryWithParameters::new(request, sorting, pagination), + iroha_data_model::query::QueryWithParameters::new( + request, sorting, pagination, fetch_size, + ), ), }; @@ -827,6 +841,7 @@ impl Client { &self, request: R, pagination: Pagination, + fetch_size: FetchSize, sorting: Sorting, filter: PredicateBox, ) -> QueryResult<::Target> @@ -836,7 +851,7 @@ impl Client { { iroha_logger::trace!(?request, %pagination, ?sorting, ?filter); let (req, mut resp_handler) = - self.prepare_query_request::(request, filter, pagination, sorting)?; + self.prepare_query_request::(request, filter, pagination, sorting, fetch_size)?; let response = req.build()?.send()?; let value = resp_handler.handle(&response)?; diff --git a/client/src/query_builder.rs b/client/src/query_builder.rs index 7897a6574d7..71fc1878d7f 100644 --- a/client/src/query_builder.rs +++ b/client/src/query_builder.rs @@ -2,7 +2,7 @@ use std::fmt::Debug; use iroha_data_model::{ predicate::PredicateBox, - query::{sorting::Sorting, Pagination, Query}, + query::{sorting::Sorting, FetchSize, Pagination, Query}, Value, }; @@ -14,6 +14,7 @@ pub struct QueryRequestBuilder<'a, R> { pagination: Pagination, filter: PredicateBox, sorting: Sorting, + fetch_size: FetchSize, } impl<'a, R> QueryRequestBuilder<'a, R> @@ -29,6 +30,7 @@ where pagination: Pagination::default(), sorting: Sorting::default(), filter: PredicateBox::default(), + fetch_size: FetchSize::default(), } } @@ -47,10 +49,16 @@ where self } + pub fn with_fetch_size(mut self, fetch_size: FetchSize) -> Self { + self.fetch_size = fetch_size; + self + } + pub fn execute(self) -> QueryResult<::Target> { self.client.request_with_filter_and_pagination_and_sorting( self.request, self.pagination, + self.fetch_size, self.sorting, self.filter, ) diff --git a/client/tests/integration/pagination.rs b/client/tests/integration/pagination.rs index 60f5173af36..7a7f4141096 100644 --- a/client/tests/integration/pagination.rs +++ b/client/tests/integration/pagination.rs @@ -1,23 +1,16 @@ use std::num::{NonZeroU32, NonZeroU64}; use eyre::Result; -use iroha_client::client::{asset, QueryResult}; +use iroha_client::client::{asset, Client, QueryResult}; use iroha_data_model::{asset::AssetDefinition, prelude::*, query::Pagination}; use test_network::*; #[test] -fn client_add_asset_quantity_to_existing_asset_should_increase_asset_amount() -> Result<()> { +fn limits_should_work() -> Result<()> { let (_rt, _peer, client) = ::new().with_port(10_690).start_with_runtime(); wait_for_genesis_committed(&vec![client.clone()], 0); - let register: Vec = ('a'..='z') // This is a subtle mistake, I'm glad we can lint it now. - .map(|c| c.to_string()) - .map(|name| (name + "#wonderland").parse().expect("Valid")) - .map(|asset_definition_id| { - RegisterExpr::new(AssetDefinition::quantity(asset_definition_id)).into() - }) - .collect(); - client.submit_all_blocking(register)?; + register_assets(&client)?; let vec = &client .build_query(asset::all_definitions()) @@ -30,3 +23,34 @@ fn client_add_asset_quantity_to_existing_asset_should_increase_asset_amount() -> assert_eq!(vec.len(), 5); Ok(()) } + +#[test] +fn fetch_size_should_work() -> Result<()> { + let (_rt, _peer, client) = ::new().with_port(11_120).start_with_runtime(); + wait_for_genesis_committed(&vec![client.clone()], 0); + + register_assets(&client)?; + + let iter = client + .build_query(asset::all_definitions()) + .with_pagination(Pagination { + limit: NonZeroU32::new(20), + start: NonZeroU64::new(0), + }) + .with_fetch_size(FetchSize::new(Some(NonZeroU32::new(12).expect("Valid")))) + .execute()?; + assert_eq!(iter.batch_len(), 12); + Ok(()) +} + +fn register_assets(client: &Client) -> Result<()> { + let register: Vec = ('a'..='z') + .map(|c| c.to_string()) + .map(|name| (name + "#wonderland").parse().expect("Valid")) + .map(|asset_definition_id| { + RegisterExpr::new(AssetDefinition::quantity(asset_definition_id)).into() + }) + .collect(); + let _ = client.submit_all_blocking(register)?; + Ok(()) +} diff --git a/client/tests/integration/permissions.rs b/client/tests/integration/permissions.rs index 28b963730b2..7fa9e93cd03 100644 --- a/client/tests/integration/permissions.rs +++ b/client/tests/integration/permissions.rs @@ -32,7 +32,7 @@ fn genesis_transactions_are_validated() { // Starting peer let (_rt, _peer, test_client) = ::new() .with_genesis(genesis) - .with_port(11_100) + .with_port(11_110) .start_with_runtime(); // Checking that peer contains no blocks multiple times diff --git a/client/tests/integration/queries/mod.rs b/client/tests/integration/queries/mod.rs index a3805003c80..19306ab3f31 100644 --- a/client/tests/integration/queries/mod.rs +++ b/client/tests/integration/queries/mod.rs @@ -1,3 +1,29 @@ +use iroha_client::client::{self, ClientQueryError}; +use iroha_data_model::{ + query::{error::QueryExecutionFail, FetchSize, MAX_FETCH_SIZE}, + ValidationFail, +}; +use test_network::*; + mod account; mod asset; mod role; + +#[test] +fn too_big_fetch_size_is_not_allowed() { + let (_rt, _peer, client) = ::new().with_port(11_130).start_with_runtime(); + wait_for_genesis_committed(&[client.clone()], 0); + + let err = client + .build_query(client::asset::all()) + .with_fetch_size(FetchSize::new(Some(MAX_FETCH_SIZE.checked_add(1).unwrap()))) + .execute() + .expect_err("Should fail"); + + assert!(matches!( + err, + ClientQueryError::Validation(ValidationFail::QueryFailed( + QueryExecutionFail::FetchSizeTooBig + )) + )); +} diff --git a/client/tests/integration/sorting.rs b/client/tests/integration/sorting.rs index 1182b3d7519..a4452c3e241 100644 --- a/client/tests/integration/sorting.rs +++ b/client/tests/integration/sorting.rs @@ -256,14 +256,12 @@ fn correct_sorting_of_entities() { .expect("Valid"); let res = test_client - .request_with_filter_and_pagination_and_sorting( - client::domain::all(), - Pagination::default(), - Sorting::by_metadata_key(sort_by_metadata_key.clone()), - PredicateBox::new(value::ValuePredicate::Identifiable( - string::StringPredicate::starts_with("neverland"), - )), - ) + .build_query(client::domain::all()) + .with_sorting(Sorting::by_metadata_key(sort_by_metadata_key.clone())) + .with_filter(PredicateBox::new(value::ValuePredicate::Identifiable( + string::StringPredicate::starts_with("neverland"), + ))) + .execute() .expect("Valid") .collect::>>() .expect("Valid"); @@ -305,12 +303,10 @@ fn correct_sorting_of_entities() { string::StringPredicate::starts_with("neverland_"), )); let res = test_client - .request_with_filter_and_pagination_and_sorting( - client::domain::all(), - Pagination::default(), - Sorting::by_metadata_key(sort_by_metadata_key), - filter, - ) + .build_query(client::domain::all()) + .with_sorting(Sorting::by_metadata_key(sort_by_metadata_key)) + .with_filter(filter) + .execute() .expect("Valid") .collect::>>() .expect("Valid"); diff --git a/config/iroha_test_config.json b/config/iroha_test_config.json index ad415a54587..80f61607c38 100644 --- a/config/iroha_test_config.json +++ b/config/iroha_test_config.json @@ -43,8 +43,7 @@ "P2P_ADDR": "127.0.0.1:1337", "API_URL": "127.0.0.1:8080", "MAX_TRANSACTION_SIZE": 32768, - "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10 + "MAX_CONTENT_LEN": 16384000 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, diff --git a/config/src/torii.rs b/config/src/torii.rs index 25263581645..1c2b801e981 100644 --- a/config/src/torii.rs +++ b/config/src/torii.rs @@ -1,5 +1,4 @@ //! `Torii` configuration as well as the default values for the URLs used for the main endpoints: `p2p`, `telemetry`, but not `api`. -use std::num::NonZeroU64; use iroha_config_base::derive::{Documented, Proxy}; use iroha_primitives::addr::{socket_addr, SocketAddr}; @@ -11,9 +10,6 @@ pub const DEFAULT_TORII_P2P_ADDR: SocketAddr = socket_addr!(127.0.0.1:1337); pub const DEFAULT_TORII_MAX_TRANSACTION_SIZE: u32 = 2_u32.pow(15); /// Default upper bound on `content-length` specified in the HTTP request header 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()); /// 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, @@ -32,8 +28,6 @@ pub struct Configuration { pub max_transaction_size: u32, /// Maximum number of bytes in raw message. Used to prevent from DOS attacks. pub max_content_len: u32, - /// How many query results are returned in one batch - pub fetch_size: NonZeroU64, } impl Default for ConfigurationProxy { @@ -43,7 +37,6 @@ impl Default for ConfigurationProxy { api_url: None, 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), } } } @@ -96,10 +89,9 @@ pub mod tests { api_url in prop::option::of(Just(uri::DEFAULT_API_ADDR)), 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)), ) -> ConfigurationProxy { - ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len, fetch_size } + ConfigurationProxy { p2p_addr, api_url, max_transaction_size, max_content_len } } } } diff --git a/configs/peer/config.json b/configs/peer/config.json index 02211ed3072..51cc9c5a45a 100644 --- a/configs/peer/config.json +++ b/configs/peer/config.json @@ -24,8 +24,7 @@ "P2P_ADDR": null, "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, - "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10 + "MAX_CONTENT_LEN": 16384000 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index a246bb87f48c82cab96d5fe03ad59f7181a1257a..0ef1007e61c34fc7e90c15a424c4cd106eb11bfc 100644 GIT binary patch delta 124447 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 diff --git a/core/src/query/cursor.rs b/core/src/query/cursor.rs index 0757a759081..b1ef3393c8f 100644 --- a/core/src/query/cursor.rs +++ b/core/src/query/cursor.rs @@ -1,6 +1,6 @@ //! Module with cursor-based pagination functional like [`Batched`]. -use std::num::{NonZeroU64, NonZeroUsize}; +use std::num::{NonZeroU32, NonZeroU64}; use derive_more::Display; use parity_scale_codec::{Decode, Encode}; @@ -9,11 +9,11 @@ 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; + fn batched(self, fetch_size: NonZeroU32) -> Batched; } impl Batch for I { - fn batched(self, batch_size: NonZeroUsize) -> Batched { + fn batched(self, batch_size: NonZeroU32) -> Batched { Batched { iter: self.into_iter(), batch_size, @@ -27,7 +27,7 @@ impl Batch for I { #[derive(Debug)] pub struct Batched { iter: I::IntoIter, - batch_size: NonZeroUsize, + batch_size: NonZeroU32, cursor: Option, } @@ -52,7 +52,12 @@ impl> Batched { .iter .by_ref() .inspect(|_| batch_size += 1) - .take(self.batch_size.get()) + .take( + self.batch_size + .get() + .try_into() + .expect("`u32` should always fit into `usize`"), + ) .collect(); self.cursor = if let Some(cursor) = self.cursor { diff --git a/core/src/query/store.rs b/core/src/query/store.rs index 7bb52d2313b..8e0122b5093 100644 --- a/core/src/query/store.rs +++ b/core/src/query/store.rs @@ -1,9 +1,9 @@ -//! This module contains [`QueryService`] actor. +//! This module contains [`LiveQueryStore`] actor. use std::{ cmp::Ordering, collections::HashMap, - num::{NonZeroU64, NonZeroUsize}, + num::NonZeroU64, time::{Duration, Instant}, }; @@ -12,6 +12,7 @@ use iroha_data_model::{ asset::AssetValue, query::{ cursor::ForwardCursor, error::QueryExecutionFail, pagination::Pagination, sorting::Sorting, + FetchSize, DEFAULT_FETCH_SIZE, MAX_FETCH_SIZE, }, BatchedResponse, BatchedResponseV1, HasMetadata, IdentifiableBox, ValidationFail, Value, }; @@ -31,9 +32,12 @@ pub enum Error { /// Unknown cursor error. #[error(transparent)] UnknownCursor(#[from] UnknownCursor), - /// Connection with QueryService is closed. - #[error("Connection with QueryService is closed")] + /// Connection with LiveQueryStore is closed. + #[error("Connection with LiveQueryStore is closed")] ConnectionClosed, + /// Fetch size is too big. + #[error("Fetch size is too big")] + FetchSizeTooBig, } #[allow(clippy::fallible_impl_from)] @@ -46,11 +50,14 @@ impl From for ValidationFail { Error::ConnectionClosed => { panic!("Connection to `LiveQueryStore` was unexpectedly closed, this is a bug") } + Error::FetchSizeTooBig => { + ValidationFail::QueryFailed(QueryExecutionFail::FetchSizeTooBig) + } } } } -/// Result type for [`QueryService`] methods. +/// Result type for [`LiveQueryStore`] methods. pub type Result = std::result::Result; type LiveQuery = Batched>; @@ -65,7 +72,7 @@ pub struct LiveQueryStore { } impl LiveQueryStore { - /// Construct [`QueryService`] from configuration. + /// Construct [`LiveQueryStore`] from configuration. pub fn from_configuration(cfg: Configuration) -> Self { Self { queries: HashMap::default(), @@ -73,7 +80,7 @@ impl LiveQueryStore { } } - /// Construct [`QueryService`] for tests. + /// Construct [`LiveQueryStore`] for tests. /// Default configuration will be used. /// /// Not marked as `#[cfg(test)]` because it is used in benches as well. @@ -87,7 +94,7 @@ impl LiveQueryStore { ) } - /// Start [`QueryService`]. Requires a [`tokio::runtime::Runtime`] being run + /// Start [`LiveQueryStore`]. 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. @@ -158,14 +165,14 @@ impl LiveQueryStoreHandle { /// /// # Errors /// - /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Returns [`Error::ConnectionClosed`] if [`LiveQueryStore`] 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, + fetch_size: FetchSize, ) -> Result> { match query_output { LazyValue::Value(batch) => { @@ -174,6 +181,11 @@ impl LiveQueryStoreHandle { Ok(result.into()) } LazyValue::Iter(iter) => { + let fetch_size = fetch_size.fetch_size.unwrap_or(DEFAULT_FETCH_SIZE); + if fetch_size > MAX_FETCH_SIZE { + return Err(Error::FetchSizeTooBig); + } + let live_query = Self::apply_sorting_and_pagination(iter, sorting, pagination); let query_id = uuid::Uuid::new_v4().to_string(); @@ -188,7 +200,7 @@ impl LiveQueryStoreHandle { /// /// # Errors /// - /// - Returns [`Error::ConnectionClosed`] if [`QueryService`] is dropped, + /// - Returns [`Error::ConnectionClosed`] if [`LiveQueryStore`] 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)?; diff --git a/core/src/smartcontracts/wasm.rs b/core/src/smartcontracts/wasm.rs index 8a38a178b6d..3b5cd8d48f1 100644 --- a/core/src/smartcontracts/wasm.rs +++ b/core/src/smartcontracts/wasm.rs @@ -2,8 +2,6 @@ //! `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 _, @@ -783,17 +781,14 @@ impl Runtime { query, sorting, pagination, + fetch_size, }) => { 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, - ) + wsv.query_handle() + .handle_query_output(output, &sorting, pagination, fetch_size) } QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), } @@ -1001,15 +996,12 @@ where query, sorting, pagination, + fetch_size, }) => { let output = query.execute(wsv)?; - wsv.query_handle().handle_query_output( - output, - NonZeroUsize::new(30_000).expect("30 000 is not zero"), - &sorting, - pagination, - ) + wsv.query_handle() + .handle_query_output(output, &sorting, pagination, fetch_size) } QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), } @@ -1252,15 +1244,12 @@ impl<'wrld> import_traits::ExecuteOperations { let output = query.execute(wsv)?; - wsv.query_handle().handle_query_output( - output, - NonZeroUsize::new(30_000).expect("30 000 is not zero"), - &sorting, - pagination, - ) + wsv.query_handle() + .handle_query_output(output, &sorting, pagination, fetch_size) } QueryRequest::Cursor(cursor) => wsv.query_handle().handle_query_cursor(cursor), } @@ -1773,6 +1762,7 @@ mod tests { QueryBox::from(FindAccountById::new(authority.clone())), Sorting::default(), Pagination::default(), + FetchSize::default(), )); let wat = format!( diff --git a/data_model/Cargo.toml b/data_model/Cargo.toml index 83551e7125d..c04c3dba783 100644 --- a/data_model/Cargo.toml +++ b/data_model/Cargo.toml @@ -21,7 +21,7 @@ default = ["std"] # Enable static linkage of the rust standard library. # Disabled for WASM interoperability, to reduce the binary size. # Please refer to https://docs.rust-embedded.org/book/intro/no-std.html -std = ["iroha_macro/std", "iroha_version/std", "iroha_crypto/std", "iroha_primitives/std", "thiserror", "displaydoc/std", "strum/std"] +std = ["iroha_macro/std", "iroha_version/std", "iroha_crypto/std", "iroha_primitives/std", "thiserror", "displaydoc/std", "strum/std", "once_cell"] # Enable API for HTTP requests. Should be activated for HTTP clients http = ["std", "warp", "iroha_version/http"] # Replace structures and methods with FFI equivalents to facilitate dynamic linkage (mainly used in smartcontracts) @@ -52,6 +52,7 @@ displaydoc = { workspace = true } getset = { workspace = true } strum = { workspace = true, features = ["derive"] } base64 = { workspace = true, features = ["alloc"] } +once_cell = { workspace = true, optional = true } [dev-dependencies] iroha_client = { workspace = true } diff --git a/data_model/src/query/mod.rs b/data_model/src/query/mod.rs index f9e8d266511..6d826de4956 100644 --- a/data_model/src/query/mod.rs +++ b/data_model/src/query/mod.rs @@ -7,9 +7,10 @@ use alloc::{ boxed::Box, format, string::{String, ToString as _}, + vec, vec::Vec, }; -use core::cmp::Ordering; +use core::{cmp::Ordering, num::NonZeroU32}; pub use cursor::ForwardCursor; use derive_more::{Constructor, Display}; @@ -40,6 +41,42 @@ pub mod cursor; pub mod pagination; pub mod sorting; +const FETCH_SIZE: &str = "fetch_size"; + +/// Default value for `fetch_size` parameter in queries. +// SAFETY: `10` is greater than `0` +#[allow(unsafe_code)] +pub const DEFAULT_FETCH_SIZE: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(10) }; + +/// Max value for `fetch_size` parameter in queries. +// SAFETY: `10_000` is greater than `0` +#[allow(unsafe_code)] +pub const MAX_FETCH_SIZE: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(10_000) }; + +/// Structure for query fetch size parameter encoding/decoding +#[derive( + Debug, Default, Clone, Copy, PartialEq, Eq, Constructor, Decode, Encode, Deserialize, Serialize, +)] +pub struct FetchSize { + /// Inner value of a fetch size. + /// + /// If not specified then [`DEFAULT_FETCH_SIZE`] is used. + pub fetch_size: Option, +} + +impl FetchSize { + /// Converts self to iterator of tuples to be used in queries. + /// + /// The length of the output iterator is not constant and has either 0 or 1 value. + pub fn into_query_parameters( + self, + ) -> impl IntoIterator + Clone { + self.fetch_size + .map(|fetch_size| (FETCH_SIZE, fetch_size)) + .into_iter() + } +} + macro_rules! queries { ($($($meta:meta)* $item:item)+) => { pub use self::model::*; @@ -183,6 +220,7 @@ pub mod model { pub query: Q, pub sorting: Sorting, pub pagination: Pagination, + pub fetch_size: FetchSize, } } @@ -1323,9 +1361,14 @@ pub mod http { impl ClientQueryRequest { /// Construct a new request containing query. - pub fn query(query: SignedQuery, sorting: Sorting, pagination: Pagination) -> Self { + pub fn query( + query: SignedQuery, + sorting: Sorting, + pagination: Pagination, + fetch_size: FetchSize, + ) -> Self { Self(QueryRequest::Query(QueryWithParameters::new( - query, sorting, pagination, + query, sorting, pagination, fetch_size, ))) } @@ -1509,6 +1552,8 @@ pub mod error { ), /// Unknown query cursor UnknownCursor, + /// fetch_size could not be greater than {MAX_FETCH_SIZE:?} + FetchSizeTooBig, } /// Type assertion error @@ -1568,6 +1613,6 @@ pub mod prelude { pub use super::{ account::prelude::*, asset::prelude::*, block::prelude::*, domain::prelude::*, peer::prelude::*, permission::prelude::*, role::prelude::*, transaction::*, - trigger::prelude::*, QueryBox, TransactionQueryOutput, + trigger::prelude::*, FetchSize, QueryBox, TransactionQueryOutput, }; } diff --git a/data_model/src/smart_contract.rs b/data_model/src/smart_contract.rs index ceb9114f5ac..0800fbc27df 100644 --- a/data_model/src/smart_contract.rs +++ b/data_model/src/smart_contract.rs @@ -3,9 +3,12 @@ use parity_scale_codec::{Decode, Encode}; pub use self::model::*; -use crate::query::{ - cursor::ForwardCursor, sorting::Sorting, Pagination, QueryBox, QueryRequest, - QueryWithParameters, +use crate::{ + prelude::FetchSize, + query::{ + cursor::ForwardCursor, sorting::Sorting, Pagination, QueryBox, QueryRequest, + QueryWithParameters, + }, }; pub mod payloads { @@ -61,9 +64,14 @@ pub mod model { impl SmartContractQueryRequest { /// Construct a new request containing query. - pub fn query(query: QueryBox, sorting: Sorting, pagination: Pagination) -> Self { + pub fn query( + query: QueryBox, + sorting: Sorting, + pagination: Pagination, + fetch_size: FetchSize, + ) -> Self { Self(QueryRequest::Query(QueryWithParameters::new( - query, sorting, pagination, + query, sorting, pagination, fetch_size, ))) } diff --git a/docs/source/references/config.md b/docs/source/references/config.md index a3f4468ca4b..4a8288df05c 100644 --- a/docs/source/references/config.md +++ b/docs/source/references/config.md @@ -55,8 +55,7 @@ The following is the default configuration used by Iroha. "P2P_ADDR": null, "API_URL": null, "MAX_TRANSACTION_SIZE": 32768, - "MAX_CONTENT_LEN": 16384000, - "FETCH_SIZE": 10 + "MAX_CONTENT_LEN": 16384000 }, "BLOCK_SYNC": { "GOSSIP_PERIOD_MS": 10000, @@ -698,7 +697,6 @@ Has type `Option>`[^1]. Can be configured via env ```json { "API_URL": null, - "FETCH_SIZE": 10, "MAX_CONTENT_LEN": 16384000, "MAX_TRANSACTION_SIZE": 32768, "P2P_ADDR": null @@ -715,16 +713,6 @@ Has type `Option`[^1]. Can be configured via environment variable `T null ``` -### `torii.fetch_size` - -How many query results are returned in one batch - -Has type `Option`[^1]. Can be configured via environment variable `TORII_FETCH_SIZE` - -```json -10 -``` - ### `torii.max_content_len` Maximum number of bytes in raw message. Used to prevent from DOS attacks. diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 428a32759d8..756d22082be 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -3628,6 +3628,10 @@ { "tag": "UnknownCursor", "discriminant": 4 + }, + { + "tag": "FetchSizeTooBig", + "discriminant": 5 } ] }, diff --git a/smart_contract/src/lib.rs b/smart_contract/src/lib.rs index 7893364a6ea..03d84f2ef33 100644 --- a/smart_contract/src/lib.rs +++ b/smart_contract/src/lib.rs @@ -80,6 +80,7 @@ pub struct QueryRequest { query: Q, sorting: Sorting, pagination: Pagination, + fetch_size: FetchSize, } impl From> for SmartContractQueryRequest { @@ -88,6 +89,7 @@ impl From> for SmartContractQueryRequest { query_request.query.into(), query_request.sorting, query_request.pagination, + query_request.fetch_size, ) } } @@ -108,6 +110,9 @@ pub trait ExecuteQueryOnHost: Sized { /// Apply pagination to a query fn paginate(self, pagination: Pagination) -> Self::QueryRequest; + /// Set fetch size for a query. Default is [`DEFAULT_FETCH_SIZE`] + fn fetch_size(self, fetch_size: FetchSize) -> Self::QueryRequest; + /// Execute query on the host /// /// # Errors @@ -130,6 +135,7 @@ where query: self, sorting, pagination: Pagination::default(), + fetch_size: FetchSize::default(), } } @@ -138,6 +144,16 @@ where query: self, sorting: Sorting::default(), pagination, + fetch_size: FetchSize::default(), + } + } + + fn fetch_size(self, fetch_size: FetchSize) -> Self::QueryRequest { + QueryRequest { + query: self, + sorting: Sorting::default(), + pagination: Pagination::default(), + fetch_size, } } @@ -146,6 +162,7 @@ where query: self, sorting: Sorting::default(), pagination: Pagination::default(), + fetch_size: FetchSize::default(), } .execute() } @@ -169,6 +186,11 @@ where self } + fn fetch_size(mut self, fetch_size: FetchSize) -> Self::QueryRequest { + self.fetch_size = fetch_size; + self + } + #[allow(irrefutable_let_patterns)] fn execute(self) -> Result, ValidationFail> { #[cfg(not(test))]