Hi Nigel, hi Mathias,
Thanks for the suggestions !
> You should try with Neo4j 2.2.5
Do you think to a specific fix released in this version which may help here ?
Anyway, I think I'll upgrade in a close future.
> I strongly suggest that you upgrade to py2neo 2.0 and, if possible, migrate to using Cypher transactions instead of batches.
Yep. It's clearly a task in my todo list ! :)
For reasons related to the planning of my project, I can't do it right now because it would need to be done in the rush and that sounds risky.
Anyway, I think I've made some good progresses:
- I've found why no exception was bubbling even with a call to submit(). Basically, the exception was silenced by some of my code handling exceptions, Arghhhhh. Stupid me !
- The scenario seems to be the following:
- a process writes a bunch of update/create with a WriteBatch
- a concurrent process tries to read some data with a CypherQuery.
- a lock is detected for the read request. As I've implemented a "retry" pattern around my calls to CypherQuery, the read request is sent again but the first one is never closed => Error message appearing in the logs of Neo4j server.
I'm currently testing this modification of the submit() method:
---------------------------------------------------------------------------------------------------------
def submit(self):
try:
responses = self._execute()
return [BatchResponse(rs).hydrated for rs in responses.json]
finally:
if responses:
responses.close()
---------------------------------------------------------------------------------------------------------
So far, results seem good but I want the processes to run on a long period.
I just want to be sure that putting the call to _execute() inside the try/except block won't have nasty side-effects (especially in case of an exception occurring in the _execute() method.
laurent