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

Reply via email to