diff --git a/core/node/node_framework/src/implementations/layers/vm_runner/playground.rs b/core/node/node_framework/src/implementations/layers/vm_runner/playground.rs index eedde16074f..4fe091f5646 100644 --- a/core/node/node_framework/src/implementations/layers/vm_runner/playground.rs +++ b/core/node/node_framework/src/implementations/layers/vm_runner/playground.rs @@ -71,7 +71,13 @@ impl WiringLayer for VmPlaygroundLayer { // to DB for querying last processed batch and last ready to be loaded batch. // - `window_size` connections for running VM instances. let connection_pool = replica_pool - .get_custom(2 + self.config.window_size.get()) + .build(|builder| { + builder + .set_max_size(2 + self.config.window_size.get()) + .set_statement_timeout(None); + // Unlike virtually all other replica pool uses, VM playground has some long-living operations, + // so the default statement timeout would only get in the way. + }) .await?; let cursor = VmPlaygroundCursorOptions { diff --git a/core/node/node_framework/src/implementations/resources/pools.rs b/core/node/node_framework/src/implementations/resources/pools.rs index 8355bb1bdd6..75f5d22e357 100644 --- a/core/node/node_framework/src/implementations/resources/pools.rs +++ b/core/node/node_framework/src/implementations/resources/pools.rs @@ -86,7 +86,20 @@ impl PoolResource

{ } pub async fn get_custom(&self, size: u32) -> anyhow::Result> { - let result = self.builder().set_max_size(size).build().await; + self.build(|builder| { + builder.set_max_size(size); + }) + .await + } + + pub async fn build(&self, build_fn: F) -> anyhow::Result> + where + F: FnOnce(&mut ConnectionPoolBuilder), + { + let mut builder = self.builder(); + build_fn(&mut builder); + let size = builder.max_size(); + let result = builder.build().await; if result.is_ok() { let old_count = self.connections_count.fetch_add(size, Ordering::Relaxed);