[ 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)