[
https://issues.apache.org/jira/browse/NIFI-13397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17854767#comment-17854767
]
Jim Steinebrey commented on NIFI-13397:
---------------------------------------
The [[email protected]|mailto:[email protected]] mailing list got this
email from a Nifi user.
{quote}I have tested the PutDatabaseRecord processor in case the database
connection fails on Nifi version 1.26.0, and I propose to handle an error with
retry policy.
{quote}
After I disconnected the database connection, I got an error message below
*ERROR* [Timer-Driven Process Thread-8] o.a.n.p.standard.PutDatabaseRecord
PutDatabaseRecord[id=bcec93b5-306b-3fec-6eac-dfd3916a5dab]
Failed to put Records to database for
StandardFlowFileRecord[uuid=ba18e9a8-2cc8-4f7e-adcd-1da757b483b1,claim=StandardContentClaim
[resourceClaim=StandardResourceClaim[id=1716964021086-21, container=default,
section=21], offset=0,
length=8450],offset=0,name=3bbaf37a-f692-4389-8cfa-59ce265ceaee,size=8450].
*Routing to failure.*
*org.apache.nifi.processor.exception.ProcessException: Connection retrieval
failed*
at
org.apache.nifi.dbcp.HikariCPConnectionPool.getConnection(HikariCPConnectionPool.java:363)
at org.apache.nifi.dbcp.DBCPService.getConnection(DBCPService.java:55)
at
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:254)
at
org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:105)
at jdk.proxy15/jdk.proxy15.$Proxy93.getConnection(Unknown Source)
at
org.apache.nifi.processors.standard.PutDatabaseRecord.onTrigger(PutDatabaseRecord.java:486)
at
org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
at
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1361)
at
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:247)
at
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:102)
at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
*Caused by: java.sql.SQLTransientConnectionException:*
HikariCPConnectionPool[id=c25182df-725f-3c25-649b-9481538a3ec2] - Connection is
not available, request timed out after 5004ms.
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:696)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
at
org.apache.nifi.dbcp.HikariCPConnectionPool.getConnection(HikariCPConnectionPool.java:354)
... 18 common frames omitted
*Caused by: java.sql.SQLRecoverableException:* IO Error: Invalid Operation, NOT
Connected
at oracle.jdbc.driver.T4CConnection.doSetNetworkTimeout(T4CConnection.java:9395)
at
oracle.jdbc.driver.PhysicalConnection.setNetworkTimeout(PhysicalConnection.java:10000)
at com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:566)
at com.zaxxer.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:173)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
... 21 common frames omitted
*Caused by: oracle.net.ns.NetException:* Invalid Operation, NOT Connected
at oracle.net.nt.TcpNTAdapter.setOption(TcpNTAdapter.java:757)
at oracle.net.ns.NSProtocol.setOption(NSProtocol.java:730)
at oracle.net.ns.NSProtocol.setSocketReadTimeout(NSProtocol.java:1045)
at oracle.jdbc.driver.T4CConnection.doSetNetworkTimeout(T4CConnection.java:9392)
... 25 common frames omitted
{quote}Then I checked on the source code of the PutDatabaseRecord processor and
found code that handles Throwable with If clause.
{quote}
I see that it only has "if(toAnalyze instanceof SQLTransientException)" but not
the ProcessException, thus, fails to catch this exception to handle as retry
relationship.
So I would like to clarify why this error routes to failure or if this is a
bug.
> PutDatabaseRecord check for cause of ProcessException being a
> SQLtransientException
> -----------------------------------------------------------------------------------
>
> Key: NIFI-13397
> URL: https://issues.apache.org/jira/browse/NIFI-13397
> Project: Apache NiFi
> Issue Type: Improvement
> Reporter: Jim Steinebrey
> Priority: Major
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)