Aaron Schultz created NIFI-10265:
------------------------------------
Summary: PutDatabaseRecord hangs and keeps file in queue when DB
is unavailable instead of sending to fail
Key: NIFI-10265
URL: https://issues.apache.org/jira/browse/NIFI-10265
Project: Apache NiFi
Issue Type: Bug
Components: Extensions
Reporter: Aaron Schultz
When PutDatabaseRecord encounters an unreachable DB (tested with MSSQL), it
alerts at the processor and at the bulletin, but hangs on to the flowfile and
keeps it in queue rather than routing it to failure.
In Slack, [~exceptionfactory] suggested: It looks like PutDatabaseRecord does
not wrap the getConnection() call instead the general try-catch exception
handling. This results in the behavior observed, keeping the file in the queue
instead of sending the file to failure.
This is the dump I'm getting:
{quote}2022-07-20 11:36:17,498 ERROR [Timer-Driven Process Thread-98]
o.a.n.p.standard.PutDatabaseRecord
PutDatabaseRecord[id=d2123fa7-9cb0-1f8e-8e04-b30babb3bdf6] Processing failed
org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException:
Cannot create PoolableConnectionFactory (The TCP/IP connection to the host
hostname, port 1433 has failed. Error: "connect timed out. Verify the connection
properties. Make sure that an instance of SQL Server is running on the host
and accepting TCP/IP connections at the port. Make sure that TCP connections to
the port are not blocked by a firewall.".)
at
org.apache.nifi.dbcp.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:667)
at
org.apache.nifi.dbcp.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:644)
at org.apache.nifi.dbcp.DBCPService.getConnection(DBCPService.java:55)
at jdk.internal.reflect.GeneratedMethodAccessor1028.invoke(Unknown
Source)
at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:254)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:105)
at com.sun.proxy.$Proxy145.getConnection(Unknown Source)
at
org.apache.nifi.processors.standard.PutDatabaseRecord.onTrigger(PutDatabaseRecord.java:482)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1283)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:214)
at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:103)
at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (The
TCP/IP connection to the host hostname, port 1433 has failed. Error: "connect
timed out. Verify the connection properties. Make sure that an instance of
SQL Server is running on the host and accepting TCP/IP connections at the port.
Make sure that TCP connections to the port are not blocked by a firewall.".)
at
org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:653)
at
org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:531)
at
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
at
org.apache.nifi.dbcp.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:654)
... 20 common frames omitted
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP
connection to the host hostname, port 1433 has failed. Error: "connect timed
out. Verify the connection properties. Make sure that an instance of SQL Server
is r
unning on the host and accepting TCP/IP connections at the port. Make sure that
TCP connections to the port are not blocked by a firewall.".
at
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at
com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:241)
at
com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2243)
at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:491)
at
com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1311)
at
com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:993)
at
com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:829)
at
com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
at
org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52)
at
org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:374)
at
org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:106)
at
org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:649)
... 23 common frames omitted
{quote}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)