[
https://issues.apache.org/jira/browse/NIFI-5790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16680407#comment-16680407
]
ASF GitHub Bot commented on NIFI-5790:
--------------------------------------
Github user patricker commented on a diff in the pull request:
https://github.com/apache/nifi/pull/3133#discussion_r232065708
--- Diff:
nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
---
@@ -93,6 +94,155 @@ public void testMaxWait() throws
InitializationException {
runner.assertValid(service);
}
+ /**
+ * Checks validity of idle limit and time settings including a default
+ */
+ @Test
+ public void testIdleConnectionsSettings() throws
InitializationException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MAX_IDLE, "2");
+ runner.setProperty(service, DBCPConnectionPool.MAX_CONN_LIFETIME,
"1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.EVICTION_RUN_PERIOD, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.MIN_EVICTABLE_IDLE_TIME, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.SOFT_MIN_EVICTABLE_IDLE_TIME, "1 secs");
+
+ runner.enableControllerService(service);
+ runner.assertValid(service);
+ }
+
+ @Test
+ public void testMinIdleCannotBeNegative() throws
InitializationException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MIN_IDLE, "-1");
+
+ runner.assertNotValid(service);
+ }
+
+ /**
+ * Checks to ensure that settings have been passed down into the DBCP
+ */
+ @Test
+ public void testIdleSettingsAreSet() throws InitializationException,
SQLException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MAX_IDLE, "6");
+ runner.setProperty(service, DBCPConnectionPool.MIN_IDLE, "4");
+ runner.setProperty(service, DBCPConnectionPool.MAX_CONN_LIFETIME,
"1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.EVICTION_RUN_PERIOD, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.MIN_EVICTABLE_IDLE_TIME, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.SOFT_MIN_EVICTABLE_IDLE_TIME, "1 secs");
+
+ runner.enableControllerService(service);
+
+ Assert.assertEquals(6, service.getDataSource().getMaxIdle());
+ Assert.assertEquals(4, service.getDataSource().getMinIdle());
+ Assert.assertEquals(1000,
service.getDataSource().getMaxConnLifetimeMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getTimeBetweenEvictionRunsMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getMinEvictableIdleTimeMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getSoftMinEvictableIdleTimeMillis());
+
+ service.getDataSource().close();
+ }
+
+ /**
+ * Creates a few connections and step closes them to see what happens
+ */
+ @Test
+ public void testIdle() throws InitializationException, SQLException,
InterruptedException {
--- End diff --
Exactly what I was hoping to see in the tests. Thanks for making these!
I think we are getting close. After @mattyb149 's requested change,
probably a good time to squash your commit's.
> DBCPConnectionPool configuration should expose underlying connection idle and
> eviction configuration
> ----------------------------------------------------------------------------------------------------
>
> Key: NIFI-5790
> URL: https://issues.apache.org/jira/browse/NIFI-5790
> Project: Apache NiFi
> Issue Type: Improvement
> Components: Extensions
> Affects Versions: 1.8.0
> Reporter: Colin Dean
> Priority: Major
> Labels: DBCP, database
>
> While investigating a fix for NIFI-5789, I noticed in the [DBCPConnectionPool
> documentation|https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-dbcp-service-nar/1.8.0/org.apache.nifi.dbcp.DBCPConnectionPool/index.html]
> that NiFi appears _not_ to have controller service configuration options
> associated with [Apache
> Commons-DBCP|https://commons.apache.org/proper/commons-dbcp/configuration.html]
> {{BasicDataSource}} parameters like {{minIdle}} and {{maxIdle}}, which I
> think should be both set to 0 in my particular use case.
> Alternatively, I think I could set {{maxConnLifetimeMillis}} to something
> even in the minutes range and satisfy my use case (a connection need not be
> released _immediately_ but within a reasonable period of time), but this
> option is also not available.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)