Hi,
Thanks for all of the information.

Of course the #1 solution to this problem is to ensure all transactions are
closed before shutdown is called.  I am trying to implement some kind of
failsafe in the case that some unforeseen problem/bug causes transactions to
remain open.  What do you think of an optional parameter to shutdown() to
signify "Do your best to rollback+finish any open transactions"?  Or, could
you provide a code example of how to close an Iterable of TransactionImpls
using TransactionManager suspend and resume?

Thank you,
Adam


On Thu, Dec 10, 2009 at 4:46 AM, Johan Svensson <jo...@neotechnology.com>wrote:

> Hi Adam,
>
> On Wed, Dec 9, 2009 at 4:37 PM, Adam Rabung <adamrab...@gmail.com> wrote:
> > 1. This iterator will just prevent duplicates from being returned from
> > the iterator?  If there's a condition (bug in my code) that causes
> > shutdown w/ open transactions, will the Lucene indexes continue to
> > double until they're huge?
> >
>
> Yes, currently the index may get duplicate entries for each non clean
> shutdown.
>
> > 2. Would it be possible to detect this situation, and rebuild the
> > indexes?  I guess this is a losing cause if the app is regularly
> > corrupting the data.
> >
>
> Yes, it is possible to rebuild the index if everything that needs
> re-index is reachable and stored in the graph.
>
> > 3. Could you allow me to close transacations from different threads?
> > Yesterday, I wrote something that tracks tx opens and closes, and
> > could iterate through all open transactions and call finish() on them.
> >  But TransactionImpl.finish seems to assume the calling thread is the
> > creating thread, which is not the case here.
> >
>
> I would recommend not to do this. It is better to make sure each
> thread opening up a transaction manages that transaction and closes it
> properly. You can however change thread for a transaction using the
> TransactionManager's suspend() and resume() methods.
>
> > 4. Better yet, expose API for me to force-finish all open
> > transactions?  I'd rather have a botched transaction than a corrupt
> > index.
> >
>
> I do not think that is a good solution. What if some thread detected
> that the running transaction has to be rolled back? If you
> concurrently force commit from another thread then... Something that
> may be possible to do is to force rollback any running transactions in
> shutdown and wait for any transaction that has reached the
> prepared/committing state to complete.
>
> > 5. Is the only condition for this open transactions + a Lucene
> > shutdown (via shutdown() OR abrubt process termination)?  In further
> > testing, it seems I can't reproduce the problem w/ a clean or dirty
> > shutdown if all transactions are closed.
> >
>
> Correct, this will only happen after a crash/non clean shutdown
> marking the logical log as dirty (meaning recovery will be run on next
> startup replaying the logical log).
>
> > 6. I assume your iterator fix will make b11?  What are the chances the
> > root cause will be fixed in b11?  Do you have a tentative release date
> > for b11?
> >
>
> We are planing to release in mid december/before christmas. A real fix
> for this problem will not make it into that release so for now I would
> suggest to properly close the transactions in the thread that opens
> them.
>
> Regards,
> -Johan
> _______________________________________________
> Neo mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to