sirdan
sirdan

Reputation: 1028

How to catch Neo4j TransientException: LockClient

I often get this kind of Exception

Exception in thread "main" org.neo4j.driver.v1.exceptions.TransientException: LockClient[21902] can't wait on resource RWLock[NODE(1423923), hash=286792765] since => LockClient[21902] <-[:HELD_BY]- RWLock[NODE(1419986), hash=869661492] <-[:WAITING_FOR]- LockClient[21905] <-[:HELD_BY]- RWLock[NODE(1423923), hash=286792765]

when I run Neo4j queries in my Java application. Now, this question has a good answer to the reason why this error occurs, and I can't do anything to improve my queries: I just need them as they are.

My question is: how can I catch this kind of exception? It occurs at this line of my code:

session.run(query, parameters);

but the Javadoc doesn't show any apparent Exception to be catched with a try-catch block.

Thanks in advance.

Upvotes: 1

Views: 1275

Answers (1)

vikarjramun
vikarjramun

Reputation: 1042

This is because TransientException is a runtime exception (E.G. a subclass of Java.lag.RuntimeException). It is not required to be in the method signature, and you are not required to put he method in a Try...Catch block. Try putting that line within a try...catch block and you should not get that exception anymore. How you handle it depends on the nature of your application. You could print a warning to log, and then error in the application, or even keep trying until the code worked.

Edit: after reading the answer you linked, I understand why you are getting these exceptions. I would put a Thread.sleep() in the catch block, then attempt the query again, in which case the error should go away. But then again, I am in no way a Neo4j expert so take my advice with a grain (truckload ) of salt

Edit 2: your code should look somewhat like this:

for(Query query : queries){
  boolean flag = false;
  while(!flag){
    try{
      query.execute();
      flag = true;
    } catch (TransientException e){
      log("Retrying query "+query);
      Thread.sleep(1*1000); //1 second
    }
  }
}

Upvotes: 3

Related Questions