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

Reply via email to