From efe64b004c490b57f03054f3647922154c074dff Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Fri, 20 Mar 2026 13:00:34 -0400 Subject: [PATCH 1/3] simple db source, add fail-all-connections --- .../harvard/iq/dataverse/util/DataSourceProducer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index 62cd318706f..a81975e1705 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -12,10 +12,8 @@ name = "java:app/jdbc/dataverse", // The app server (Payara) deploys a managed pool for this data source for us. // We don't need to deal with this on our own. - // - // HINT: PGSimpleDataSource would work too, but as we use a connection pool, go with a javax.sql.ConnectionPoolDataSource - // HINT: PGXADataSource is unnecessary (no distributed transactions used) and breaks ingest. - className = "org.postgresql.ds.PGConnectionPoolDataSource", + + className = "org.postgresql.ds.PGSimpleDataSource", // BEWARE: as this resource is created before defaults are read from META-INF/microprofile-config.properties, // defaults must be provided in this Payara-proprietary manner. @@ -56,7 +54,9 @@ // LOGGING, SLOWNESS, PERFORMANCE "fish.payara.statement-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-timeout-in-seconds:-1}", "fish.payara.slow-query-threshold-in-seconds=${MPCONFIG=dataverse.db.slow-query-threshold-in-seconds:-1}", - "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls:false}" + "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls:false}", + // OTHER OPTIONS + "fish.payara.fail-all-connections=${MPCONFIG=dataverse.db.fail-all-connections:true}" }) public class DataSourceProducer { From f005b5ebfeecfe7bf56a64dd3e4f2b41befc356c Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Fri, 20 Mar 2026 17:00:56 -0400 Subject: [PATCH 2/3] docs/release note --- doc/release-notes/12241-simple db connector.md | 1 + doc/sphinx-guides/source/installation/config.rst | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 doc/release-notes/12241-simple db connector.md diff --git a/doc/release-notes/12241-simple db connector.md b/doc/release-notes/12241-simple db connector.md new file mode 100644 index 00000000000..daa3cc57cb9 --- /dev/null +++ b/doc/release-notes/12241-simple db connector.md @@ -0,0 +1 @@ +This version of Dataverse changes the class used for connecting with Postgres. This should help avoid problems seen under high load and potentially improve performance. See #12241 for details. \ No newline at end of file diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index e5ed52acb83..9d47aa71aaf 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -949,6 +949,9 @@ Connection Validation * - dataverse.db.validate-atmost-once-period-in-seconds - Specifies the time interval in seconds between successive requests to validate a connection at most once. - ``0`` (disabled) + * - dataverse.db.fail-all-connections + - When true, refreshes all connections when one fails, speeding recover vs. detecting and refreshing connections individually. + - ``true`` (enabled) Connection & Statement Leaks ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 2769c2df76e44a831eb86a3603d45d96c8c64dbe Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Fri, 20 Mar 2026 17:16:54 -0400 Subject: [PATCH 3/3] shuffle order to match docs --- .../edu/harvard/iq/dataverse/util/DataSourceProducer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java index a81975e1705..5816d8edd91 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/DataSourceProducer.java @@ -46,6 +46,7 @@ "fish.payara.validation-table-name=${MPCONFIG=dataverse.db.validation-table-name:}", "fish.payara.validation-classname=${MPCONFIG=dataverse.db.validation-classname:}", "fish.payara.validate-atmost-once-period-in-seconds=${MPCONFIG=dataverse.db.validate-atmost-once-period-in-seconds:0}", + "fish.payara.fail-all-connections=${MPCONFIG=dataverse.db.fail-all-connections:true}", // LEAK DETECTION "fish.payara.connection-leak-timeout-in-seconds=${MPCONFIG=dataverse.db.connection-leak-timeout-in-seconds:0}", "fish.payara.connection-leak-reclaim=${MPCONFIG=dataverse.db.connection-leak-reclaim:false}", @@ -54,9 +55,8 @@ // LOGGING, SLOWNESS, PERFORMANCE "fish.payara.statement-timeout-in-seconds=${MPCONFIG=dataverse.db.statement-timeout-in-seconds:-1}", "fish.payara.slow-query-threshold-in-seconds=${MPCONFIG=dataverse.db.slow-query-threshold-in-seconds:-1}", - "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls:false}", - // OTHER OPTIONS - "fish.payara.fail-all-connections=${MPCONFIG=dataverse.db.fail-all-connections:true}" + "fish.payara.log-jdbc-calls=${MPCONFIG=dataverse.db.log-jdbc-calls:false}" + }) public class DataSourceProducer {