Skip to content

Commit 753e121

Browse files
committed
Adapt to duroxide-pg ProviderConfig API change
new_with_schema_and_config was removed upstream in favor of new_with_config(ProviderConfig). ProviderConfig is now constructed via ProviderConfig::url(...) with schema_name and migration_policy fields set explicitly. - types.rs: backend_provider_config / worker_provider_config now take a database URL and build the full ProviderConfig (URL + schema + migration policy). - All call sites (worker, client, explain, monitoring, lib.rs test helpers) switched to PostgresProvider::new_with_config(...). - Drop now-unused DUROXIDE_SCHEMA imports in client/explain/monitoring. - cargo update -p duroxide-pg to pick up the new branch HEAD.
1 parent 86566f9 commit 753e121

7 files changed

Lines changed: 65 additions & 116 deletions

File tree

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use duroxide_pg::PostgresProvider;
1010
use pgrx::prelude::*;
1111
use tokio::runtime::Runtime;
1212

13-
use crate::types::{backend_provider_config, postgres_connection_string, DUROXIDE_SCHEMA};
13+
use crate::types::{backend_provider_config, postgres_connection_string};
1414

1515
/// Cached tokio runtime for client operations.
1616
static CLIENT_RUNTIME: OnceLock<Runtime> = OnceLock::new();
@@ -82,13 +82,9 @@ fn get_duroxide_client() -> Result<&'static Client, String> {
8282
std::env::set_var("DUROXIDE_PG_POOL_MAX", "1");
8383

8484
let store = Arc::new(
85-
PostgresProvider::new_with_schema_and_config(
86-
&pg_conn_str,
87-
Some(DUROXIDE_SCHEMA),
88-
backend_provider_config(),
89-
)
90-
.await
91-
.map_err(|e| format!("Failed to connect to duroxide store: {e}"))?,
85+
PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str))
86+
.await
87+
.map_err(|e| format!("Failed to connect to duroxide store: {e}"))?,
9288
);
9389

9490
let _ = DUROXIDE_CLIENT.set(Client::new(store));

src/explain.rs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ fn explain_instance(instance_id: &str) -> String {
121121

122122
/// Get instance info from Duroxide store
123123
fn get_duroxide_instance_info(instance_id: &str) -> (String, Option<String>) {
124-
use crate::types::{backend_provider_config, postgres_connection_string, DUROXIDE_SCHEMA};
124+
use crate::types::{backend_provider_config, postgres_connection_string};
125125
use duroxide::Client;
126126
use duroxide_pg::PostgresProvider;
127127
use std::sync::Arc;
@@ -137,16 +137,11 @@ fn get_duroxide_instance_info(instance_id: &str) -> (String, Option<String>) {
137137
};
138138

139139
rt.block_on(async {
140-
let store = match PostgresProvider::new_with_schema_and_config(
141-
&pg_conn_str,
142-
Some(DUROXIDE_SCHEMA),
143-
backend_provider_config(),
144-
)
145-
.await
146-
{
147-
Ok(s) => Arc::new(s),
148-
Err(_) => return (String::new(), None),
149-
};
140+
let store =
141+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
142+
Ok(s) => Arc::new(s),
143+
Err(_) => return (String::new(), None),
144+
};
150145

151146
let client = Client::new(store);
152147

src/lib.rs

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -809,16 +809,10 @@ mod tests {
809809
let start = Instant::now();
810810
let timeout = Duration::from_secs(10);
811811

812-
let config = backend_provider_config();
812+
let config = backend_provider_config(&pg_conn_str);
813813

814814
loop {
815-
match PostgresProvider::new_with_schema_and_config(
816-
&pg_conn_str,
817-
Some(DUROXIDE_SCHEMA),
818-
config.clone(),
819-
)
820-
.await
821-
{
815+
match PostgresProvider::new_with_config(config.clone()).await {
822816
Ok(_) => return Ok(format!("{pg_conn_str} (schema: {DUROXIDE_SCHEMA})")),
823817
Err(e) => {
824818
if start.elapsed() > timeout {
@@ -856,13 +850,9 @@ mod tests {
856850

857851
rt.block_on(async {
858852
let store = Arc::new(
859-
PostgresProvider::new_with_schema_and_config(
860-
&pg_conn_str,
861-
Some(DUROXIDE_SCHEMA),
862-
backend_provider_config(),
863-
)
864-
.await
865-
.map_err(|e| format!("Failed to connect to store: {e}"))?,
853+
PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str))
854+
.await
855+
.map_err(|e| format!("Failed to connect to store: {e}"))?,
866856
);
867857
let client = Client::new(store);
868858

@@ -917,13 +907,9 @@ mod tests {
917907

918908
rt.block_on(async {
919909
let store = Arc::new(
920-
PostgresProvider::new_with_schema_and_config(
921-
&pg_conn_str,
922-
Some(DUROXIDE_SCHEMA),
923-
backend_provider_config(),
924-
)
925-
.await
926-
.ok()?,
910+
PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str))
911+
.await
912+
.ok()?,
927913
);
928914
let client = Client::new(store);
929915
client

src/monitoring.rs

Lines changed: 26 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use duroxide::Client;
66
use pgrx::prelude::*;
77
use std::sync::Arc;
88

9-
use crate::types::{backend_provider_config, postgres_connection_string, DUROXIDE_SCHEMA};
9+
use crate::types::{backend_provider_config, postgres_connection_string};
1010
use duroxide_pg::PostgresProvider;
1111

1212
// ============================================================================
@@ -77,16 +77,11 @@ pub fn list_instances(
7777
};
7878

7979
let results = rt.block_on(async {
80-
let store = match PostgresProvider::new_with_schema_and_config(
81-
&pg_conn_str,
82-
Some(DUROXIDE_SCHEMA),
83-
backend_provider_config(),
84-
)
85-
.await
86-
{
87-
Ok(s) => Arc::new(s),
88-
Err(_) => return vec![],
89-
};
80+
let store =
81+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
82+
Ok(s) => Arc::new(s),
83+
Err(_) => return vec![],
84+
};
9085

9186
let client = Client::new(store);
9287

@@ -159,16 +154,11 @@ pub fn instance_info(
159154
};
160155

161156
let results = rt.block_on(async {
162-
let store = match PostgresProvider::new_with_schema_and_config(
163-
&pg_conn_str,
164-
Some(DUROXIDE_SCHEMA),
165-
backend_provider_config(),
166-
)
167-
.await
168-
{
169-
Ok(s) => Arc::new(s),
170-
Err(_) => return vec![],
171-
};
157+
let store =
158+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
159+
Ok(s) => Arc::new(s),
160+
Err(_) => return vec![],
161+
};
172162

173163
let client = Client::new(store);
174164

@@ -229,16 +219,11 @@ pub fn instance_executions(
229219
};
230220

231221
let results = rt.block_on(async {
232-
let store = match PostgresProvider::new_with_schema_and_config(
233-
&pg_conn_str,
234-
Some(DUROXIDE_SCHEMA),
235-
backend_provider_config(),
236-
)
237-
.await
238-
{
239-
Ok(s) => Arc::new(s),
240-
Err(_) => return vec![],
241-
};
222+
let store =
223+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
224+
Ok(s) => Arc::new(s),
225+
Err(_) => return vec![],
226+
};
242227

243228
let client = Client::new(store);
244229

@@ -298,16 +283,11 @@ pub fn metrics() -> TableIterator<
298283
};
299284

300285
let results = rt.block_on(async {
301-
let store = match PostgresProvider::new_with_schema_and_config(
302-
&pg_conn_str,
303-
Some(DUROXIDE_SCHEMA),
304-
backend_provider_config(),
305-
)
306-
.await
307-
{
308-
Ok(s) => Arc::new(s),
309-
Err(_) => return vec![],
310-
};
286+
let store =
287+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
288+
Ok(s) => Arc::new(s),
289+
Err(_) => return vec![],
290+
};
311291

312292
let client = Client::new(store);
313293

@@ -404,16 +384,11 @@ pub fn instance_nodes(
404384
};
405385

406386
let results = rt.block_on(async {
407-
let store = match PostgresProvider::new_with_schema_and_config(
408-
&pg_conn_str,
409-
Some(DUROXIDE_SCHEMA),
410-
backend_provider_config(),
411-
)
412-
.await
413-
{
414-
Ok(s) => Arc::new(s),
415-
Err(_) => return vec![],
416-
};
387+
let store =
388+
match PostgresProvider::new_with_config(backend_provider_config(&pg_conn_str)).await {
389+
Ok(s) => Arc::new(s),
390+
Err(_) => return vec![],
391+
};
417392

418393
let client = Client::new(store);
419394

src/types.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,9 @@ pub const DUROXIDE_SCHEMA: &str = "duroxide";
221221
///
222222
/// - `VerifyOnly`: never create schema/tables, reject unknown migrations.
223223
/// Backend sessions must not run DDL — the BGW owns schema lifecycle.
224-
pub fn backend_provider_config() -> duroxide_pg::ProviderConfig {
225-
let mut config = duroxide_pg::ProviderConfig::default();
224+
pub fn backend_provider_config(database_url: &str) -> duroxide_pg::ProviderConfig {
225+
let mut config = duroxide_pg::ProviderConfig::url(database_url);
226+
config.schema_name = Some(DUROXIDE_SCHEMA.to_string());
226227
config.migration_policy = duroxide_pg::MigrationPolicy::VerifyOnly;
227228
config
228229
}
@@ -232,9 +233,10 @@ pub fn backend_provider_config() -> duroxide_pg::ProviderConfig {
232233
/// - `ApplyAll`: applies pending duroxide migrations at startup; creates tables
233234
/// inside the extension-owned `duroxide` schema. Safe because the BGW verifies
234235
/// schema ownership via `pg_depend` before calling
235-
/// `PostgresProvider::new_with_schema_and_config`.
236-
pub fn worker_provider_config() -> duroxide_pg::ProviderConfig {
237-
let mut config = duroxide_pg::ProviderConfig::default();
236+
/// `PostgresProvider::new_with_config`.
237+
pub fn worker_provider_config(database_url: &str) -> duroxide_pg::ProviderConfig {
238+
let mut config = duroxide_pg::ProviderConfig::url(database_url);
239+
config.schema_name = Some(DUROXIDE_SCHEMA.to_string());
238240
config.migration_policy = duroxide_pg::MigrationPolicy::ApplyAll;
239241
config
240242
}

src/worker.rs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -457,23 +457,18 @@ async fn initialize_duroxide_runtime(
457457
}
458458
}
459459

460-
let store = match PostgresProvider::new_with_schema_and_config(
461-
pg_conn_str,
462-
Some(DUROXIDE_SCHEMA),
463-
worker_provider_config(),
464-
)
465-
.await
466-
{
467-
Ok(s) => Arc::new(s),
468-
Err(e) => {
469-
log!(
470-
"pg_durable: failed to create PostgreSQL store (will retry): {}",
471-
e
472-
);
473-
tokio::time::sleep(retry_interval).await;
474-
continue;
475-
}
476-
};
460+
let store =
461+
match PostgresProvider::new_with_config(worker_provider_config(pg_conn_str)).await {
462+
Ok(s) => Arc::new(s),
463+
Err(e) => {
464+
log!(
465+
"pg_durable: failed to create PostgreSQL store (will retry): {}",
466+
e
467+
);
468+
tokio::time::sleep(retry_interval).await;
469+
continue;
470+
}
471+
};
477472

478473
// Reuse the management pool for activities (graph loading, status updates).
479474
// The former dedicated activity pool with its df.in_workflow hook is no

0 commit comments

Comments
 (0)