From 259a6751b50ffba1b99fb0c0bfc4da0cc359bf88 Mon Sep 17 00:00:00 2001 From: pgherveou Date: Wed, 18 Jun 2025 15:39:18 +0200 Subject: [PATCH 1/2] Fix sqlite in-memory connection pool issue --- substrate/frame/revive/rpc/src/cli.rs | 16 ++++++++++++---- .../frame/revive/rpc/src/receipt_provider.rs | 3 +-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/substrate/frame/revive/rpc/src/cli.rs b/substrate/frame/revive/rpc/src/cli.rs index 495bec1763e50..499483c47fea3 100644 --- a/substrate/frame/revive/rpc/src/cli.rs +++ b/substrate/frame/revive/rpc/src/cli.rs @@ -29,6 +29,7 @@ use sc_service::{ config::{PrometheusConfig, RpcConfiguration}, start_rpc_servers, TaskManager, }; +use sqlx::sqlite::SqlitePoolOptions; // Default port if --prometheus-port is not specified const DEFAULT_PROMETHEUS_PORT: u16 = 9616; @@ -110,11 +111,18 @@ fn build_client( let (api, rpc_client, rpc) = connect(node_rpc_url).await?; let block_provider = SubxtBlockInfoProvider::new( api.clone(), rpc.clone()).await?; - let keep_latest_n_blocks = if database_url == IN_MEMORY_DB { + let (pool, keep_latest_n_blocks) = if database_url == IN_MEMORY_DB { log::warn!( target: LOG_TARGET, "💾 Using in-memory database, keeping only {cache_size} blocks in memory"); - Some(cache_size) + // see sqlite in-memory issue: https://github.com/launchbadge/sqlx/issues/2510 + let pool = SqlitePoolOptions::new() + .max_connections(1) + .idle_timeout(None) + .max_lifetime(None) + .connect(database_url).await?; + + (pool, Some(cache_size)) } else { - None + (SqlitePoolOptions::new().connect(database_url).await?, None) }; let receipt_extractor = ReceiptExtractor::new( @@ -122,7 +130,7 @@ fn build_client( earliest_receipt_block).await?; let receipt_provider = ReceiptProvider::new( - database_url, + pool, block_provider.clone(), receipt_extractor.clone(), keep_latest_n_blocks, diff --git a/substrate/frame/revive/rpc/src/receipt_provider.rs b/substrate/frame/revive/rpc/src/receipt_provider.rs index 4b9f6392d4c6f..fd4c9e3854b43 100644 --- a/substrate/frame/revive/rpc/src/receipt_provider.rs +++ b/substrate/frame/revive/rpc/src/receipt_provider.rs @@ -65,12 +65,11 @@ impl BlockInfo for SubstrateBlock { impl ReceiptProvider { /// Create a new `ReceiptProvider` with the given database URL and block provider. pub async fn new( - database_url: &str, + pool: SqlitePool, block_provider: B, receipt_extractor: ReceiptExtractor, keep_latest_n_blocks: Option, ) -> Result { - let pool = SqlitePool::connect(database_url).await?; sqlx::migrate!().run(&pool).await?; Ok(Self { pool, From 4459a5a7a8e00c015c4326fa1fd034e36f4d5bbb Mon Sep 17 00:00:00 2001 From: "cmd[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:42:58 +0000 Subject: [PATCH 2/2] Update from github-actions[bot] running command 'prdoc --audience runtime_dev --bump patch' --- prdoc/pr_8897.prdoc | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 prdoc/pr_8897.prdoc diff --git a/prdoc/pr_8897.prdoc b/prdoc/pr_8897.prdoc new file mode 100644 index 0000000000000..2ae758c5101e4 --- /dev/null +++ b/prdoc/pr_8897.prdoc @@ -0,0 +1,9 @@ +title: '[pallet-revive-rpc] fix sqlite in-memory connection pool issue' +doc: +- audience: Runtime Dev + description: |- + Fix in-memory sqlite connection pool issue + see https://github.com/launchbadge/sqlx/issues/2510 +crates: +- name: pallet-revive-eth-rpc + bump: patch