I had similar problems and found it was due to nested read-only
transactions where the inner tx did not call success(), but the outer one
did. I blogged the details
here:
http://blog.amanzi.org/2014/08/neo4j-read-only-transactions-still-need.html.
Perhaps this helps.
On Friday, January 3, 2014 4:03:52 PM UTC+1, M. David Allen wrote:
>
> OK, so here's an exception stack for a failed transaction on a read-only
> set of operations, and attached is a full messages.log output.
>
> I've reviewed the messages.log myself, and I honestly can't find anything
> useful in there. Is there any additional setting I can use for an
> embedded database that will produce more information?
>
> Finally, to keep it simple I'm using a test stub below. I blew away the
> entire database (deleted directory from the disk) then ran a simple test
> stub which populates the database with a bunch of stuff (all of that went
> fine) and then does a few simple queries. The transaction that fails does
> so AFTER successfully executing this cypher query, and doing various kinds
> of property reading.
>
> start r=relationship:relationship_auto_index(workflow={wf}) return r limit
> 50
>
> {wf} is bound to a String value passed in as part of a
> HashMap<String,Object>. After the cypher query executes, I just create a
> bunch of domain objects, which requires reading properties from the nodes
> that come back.
>
> Jan 03, 2014 9:51:42 AM org.mitre.provenance.db.neo4j.Neo4JStorage
> getMembers
> SEVERE: Failed transaction: Unable to commit transaction
> org.neo4j.graphdb.TransactionFailureException: Unable to commit transaction
> at
> org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:134)
> at
> org.mitre.prov.db.neo4j.Neo4JStorage.getMembers(Neo4JStorage.java:503)
> at org.mitre.prov.test.Stub.main(Stub.java:25)
> Caused by: javax.transaction.RollbackException: Failed to commit,
> transaction rolled back
> at
> org.neo4j.kernel.impl.transaction.TxManager.rollbackCommit(TxManager.java:623)
> at
> org.neo4j.kernel.impl.transaction.TxManager.commit(TxManager.java:402)
> at
> org.neo4j.kernel.impl.transaction.TransactionImpl.commit(TransactionImpl.java:122)
> at
> org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:124)
> ... 2 more
>
> Thanks,
> David
>
> On Thursday, January 2, 2014 5:13:02 PM UTC-5, Mattias Persson wrote:
>>
>>
>>
>>
>> 2014/1/2 M. David Allen <[email protected]>
>>
>>> So this was kind of my thinking as well. I'll play with messages and
>>> see if I can get more information to post on the source of the bug.
>>>
>> Cool
>>
>>>
>>> The other thing that's a big pain in the butt about calling success() is
>>> that it breaks a certain coding pattern. I used to have code that looked
>>> like this, for example:
>>>
>>> try (Transaction tx = db.beginTx()) {
>>> return new MyObject(myNode.getProperty("foo"),
>>> myNode.getProperty("bar"));
>>> }
>>>
>>> See the getProperty() call has to be wrapped in a transaction, so I
>>> can't just return something that calls getProperty(), instead I have to do
>>> this:
>>>
>>> try (Transaction tx = db.beginTx()) {
>>> String foo = ""+myNode.getProperty("foo");
>>> String bar = ""+myNode.getProperty("bar");
>>> tx.success();
>>> return new MyObject(foo, bar)
>>> }
>>>
>>> For code like that, the old finally { tx.finish(); } block was a lot
>>> easier.
>>>
>>
>> True, although that pattern existed before as well, but not for pure
>> read-transactions. You can actually leave out tx.success() for pure
>> read-transactions since commit/rollback will not have any persistence
>> effects either way, but it would introduce an assumption that might change
>> later on.
>>
>>
>>>
>>> David
>>>
>>>
>>> On Thursday, January 2, 2014 1:14:59 PM UTC-5, Johannes Mockenhaupt
>>> wrote:
>>>
>>>> Now that I think about it again, why should a call to tx.success() be
>>>> needed at all on a r/o tx? Default is to not commit and rollback. Only
>>>> close() needs to be called to clean up resources. Maybe Neo4j throws
>>>> because you want it to commit something when there's nothing to commit
>>>> ;-) Seriously though, with or without a call to success(), a r/o
>>>> transaction shouldn't throw I think, so this might be a bug ...
>>>> hopefully someone from Neo can enlighten us.
>>>>
>>>> On 01/02/2014 03:30 PM, M. David Allen wrote:
>>>> > Sorry, this was my mistake on the original post -- I'm not calling
>>>> > tx.finish() at all, but rather tx.success() at the end of the try
>>>> block.
>>>> >
>>>> > The original question stands though - what are the various reasons
>>>> why a
>>>> > transaction would fail when nothing inside of the transaction is
>>>> > modifying the graph in any way? E.g. when it says "failed to
>>>> commit"
>>>> > -- exactly what is being committed in a set of operations that
>>>> > theoretically should all be read-only?
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > On Tuesday, December 31, 2013 1:53:29 PM UTC-5, Johannes Mockenhaupt
>>>> wrote:
>>>> >
>>>> > You need to call tx.success() at the end of the block rather than
>>>> > tx.finish(). The latter is done through the try-with-resources
>>>> > statement.
>>>> > For further details see the JavaDoc of the Transaction class,
>>>> which
>>>> > explains this nicely with an example.
>>>> >
>>>> > On 12/31/2013 07:05 PM, M. David Allen wrote:
>>>> > > As I'm updating code for 2.0.0, I'm wrapping a lot of old code
>>>> that
>>>> > > only serves to inspect a graph (not update it) in
>>>> transactions,
>>>> > using
>>>> > > the new idiom:
>>>> > >
>>>> > > try ( Transaction tx = myDb.beginTx() ) {
>>>> > > accessSomeData();
>>>> > > tx.finish();
>>>> > > }
>>>> > >
>>>> > > After the try block finishes, I'm getting exceptions of this
>>>> form:
>>>> > >
>>>> > > org.neo4j.graphdb.TransactionFailureException: Unable to
>>>> commit
>>>> > > transaction
>>>> > > at
>>>> > >
>>>> >
>>>> > org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:134)
>>>>
>>>> >
>>>> > > at blah.blah.mycode
>>>> > >
>>>> > > Caused by: javax.transaction.RollbackException: Failed to
>>>> commit,
>>>> > > transaction rolled back
>>>> > > at
>>>> > >
>>>> > org.neo4j.kernel.impl.transaction.TxManager.
>>>> rollbackCommit(TxManager.java:623)
>>>> >
>>>> > > at
>>>> > >
>>>> >
>>>> > org.neo4j.kernel.impl.transaction.TxManager.commit(TxManager.java:402)
>>>>
>>>> > > at
>>>> > >
>>>> > org.neo4j.kernel.impl.transaction.TransactionImpl.
>>>> commit(TransactionImpl.java:122)
>>>> >
>>>> > > at
>>>> > >
>>>> >
>>>> > org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:124)
>>>>
>>>> >
>>>> > > ... 70 more
>>>> > >
>>>> > > What are the various causes of this, and how can I
>>>> troubleshoot
>>>> > them?
>>>> > >
>>>> > > This is all code that ran without any problem on 1.9.3 - so
>>>> I'm
>>>> > > thinking I should look into areas of difference there.
>>>> > >
>>>> > > Sometimes this happens when iterating over the results of
>>>> > executing a
>>>> > > cypher query from java. Sometimes it happens when I'm using a
>>>> > > TraversalDescription I built.
>>>> > >
>>>> > > Strangely enough, since these are read-only operations, I can
>>>> > *ignore*
>>>> > > the failure exception, and everything seems peachy (the data
>>>> came
>>>> > back
>>>> > > from the graph database just fine). I'm just wondering why
>>>> they're
>>>> > > happening.
>>>> > >
>>>> > > Any suggestions or pointers?
>>>> > >
>>>> > >
>>>> > > --
>>>> > > You received this message because you are subscribed to the
>>>> Google
>>>> > > Groups "Neo4j" group.
>>>> > > To unsubscribe from this group and stop receiving emails from
>>>> it,
>>>> > send
>>>> > > an email to [email protected] <javascript:>.
>>>> > > For more options, visit https://groups.google.com/
>>>> groups/opt_out
>>>> > <https://groups.google.com/groups/opt_out>.
>>>> >
>>>> > --
>>>> > You received this message because you are subscribed to the Google
>>>> > Groups "Neo4j" group.
>>>> > To unsubscribe from this group and stop receiving emails from it,
>>>> send
>>>> > an email to [email protected].
>>>> > For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Neo4j" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
>>
>> --
>> Mattias Persson, [[email protected]]
>> Hacker, Neo Technology
>> www.neotechnology.com
>>
>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.