exceptionfactory commented on code in PR #9085:
URL: https://github.com/apache/nifi/pull/9085#discussion_r1681182305


##########
nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java:
##########
@@ -254,7 +264,132 @@ protected PropertyDescriptor 
getSupportedDynamicPropertyDescriptor(final String
      */
     @OnEnabled
     public void onConfigured(final ConfigurationContext context) {
+        dataSource = new HikariDataSource();
+        configureDataSource(context, dataSource);
+    }
+
+    private long extractMillisWithInfinite(PropertyValue prop) {
+        return "-1".equals(prop.getValue()) ? INFINITE_MILLISECONDS : 
prop.asTimePeriod(TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Shutdown pool, close all open connections.
+     * If a principal is authenticated with a KDC, that principal is logged 
out.
+     * <p>
+     * If a @{@link LoginException} occurs while attempting to log out the 
@{@link org.apache.nifi.security.krb.KerberosUser},
+     * an attempt will still be made to shut down the pool and close open 
connections.
+     *
+     */
+    @OnDisabled
+    public void shutdown() {
+        try {
+            if (kerberosUser != null) {
+                kerberosUser.logout();
+            }
+        } finally {
+            kerberosUser = null;
+            try {
+                if (dataSource != null) {
+                    dataSource.close();
+                }
+            } finally {
+                dataSource = null;
+            }
+        }
+    }
+
+    @Override
+    public Connection getConnection() throws ProcessException {
+        try {
+            final Connection con;
+            if (kerberosUser != null) {
+                KerberosAction<Connection> kerberosAction = new 
KerberosAction<>(kerberosUser, () -> dataSource.getConnection(), getLogger());
+                con = kerberosAction.execute();
+            } else {
+                con = dataSource.getConnection();
+            }
+            return con;
+        } catch (final SQLException e) {
+            // If using Kerberos,  attempt to re-login
+            if (kerberosUser != null) {
+                getLogger().info("Error getting connection, performing 
Kerberos re-login");

Review Comment:
   Recommend including the exception in the log for troubleshooting.
   ```suggestion
                   getLogger().info("Error getting connection, performing 
Kerberos re-login", e);
   ```



##########
nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java:
##########
@@ -254,7 +264,132 @@ protected PropertyDescriptor 
getSupportedDynamicPropertyDescriptor(final String
      */
     @OnEnabled
     public void onConfigured(final ConfigurationContext context) {
+        dataSource = new HikariDataSource();
+        configureDataSource(context, dataSource);
+    }
+
+    private long extractMillisWithInfinite(PropertyValue prop) {
+        return "-1".equals(prop.getValue()) ? INFINITE_MILLISECONDS : 
prop.asTimePeriod(TimeUnit.MILLISECONDS);
+    }
+
+    /**
+     * Shutdown pool, close all open connections.
+     * If a principal is authenticated with a KDC, that principal is logged 
out.
+     * <p>
+     * If a @{@link LoginException} occurs while attempting to log out the 
@{@link org.apache.nifi.security.krb.KerberosUser},
+     * an attempt will still be made to shut down the pool and close open 
connections.
+     *
+     */
+    @OnDisabled
+    public void shutdown() {
+        try {
+            if (kerberosUser != null) {
+                kerberosUser.logout();
+            }
+        } finally {
+            kerberosUser = null;
+            try {
+                if (dataSource != null) {
+                    dataSource.close();
+                }
+            } finally {
+                dataSource = null;
+            }
+        }
+    }
+
+    @Override
+    public Connection getConnection() throws ProcessException {
+        try {
+            final Connection con;
+            if (kerberosUser != null) {
+                KerberosAction<Connection> kerberosAction = new 
KerberosAction<>(kerberosUser, () -> dataSource.getConnection(), getLogger());

Review Comment:
   It looks like this can be streamlined:
   ```suggestion
                   KerberosAction<Connection> kerberosAction = new 
KerberosAction<>(kerberosUser, dataSource::getConnection, getLogger());
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to