Mark Buquor created JENA-324:
--------------------------------

             Summary: An exception thrown from commit() leaves the 
StoreConnection in an inconsistent state.
                 Key: JENA-324
                 URL: https://issues.apache.org/jira/browse/JENA-324
             Project: Apache Jena
          Issue Type: Bug
          Components: TDB
    Affects Versions: TDB 0.9.3, TDB 0.9.2, TDB 0.9.1, TDB 0.9.4
            Reporter: Mark Buquor


An exception thrown from commit() leaves the StoreConnection in an inconsistent 
state.

Example: After a commit() throws an IOException in prepare() due to 
insufficient disk space, I see the following behavior:
    dataset.isInTransaction() == false
    dataset.abort() throws TDBTransactionException: "Transaction has already 
committed or aborted"
    dataset.end() appears OK
    dataset.begin(ReadWrite.READ) appears OK
    dataset.begin(ReadWrite.WRITE) blocks on writersWaiting.acquire()

 
The debugger shows that the transaction is stuck in limbo: active, closed, and 
unfinished.
    TransactionManager.activeWriters: 1
    TransactionManager.activeTransactions: 1
        [Transaction: 151 : Mode=WRITE : State=CLOSED : X:\RELM1\]
            changesPending=true
            outcome=UNFINISHED


Short of a fix, it looks like the only option to clear the stuck transaction is 
StoreConnection.expel(location, true), which has the comment "testing only".


There's also the indeterminacy of ending a transaction that, as far as I can 
tell at the Dataset level, may or may not be committed ("Transaction has 
already committed or aborted").

Rough outline of a commit:
    state == TxnState.PREPARING
    -- commitPrepare()
    -- journal.write()
    -- journal.sync() // Commit point.
    state == TxnState.COMMITED
    -- noteTxnCommit()
    -- currentReaderView.set(null)
    -- writersWaiting.release()

noteTxnCommit() is called after the commit and performs IO, so it appears that 
if commit() throws an exception, it's not necessarily true that the transaction 
is effectively aborted.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to