@Override public void readerFinishes(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; readerFinishesWorker(txn) ; }
@Override public void writerAborts(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; writerAbortsWorker(txn) ; } }
private void checkNodesDatJrnl(String label, Transaction txn) { if ( txn != null ) { String x = txn.getBaseDataset().getLocation().getPath(label + ": nodes.dat-jrnl") ; long len = new File(x).length() ; if ( len != 0 ) log("nodes.dat-jrnl: not empty", txn) ; } }
@Override public void transactionPromotes(Transaction txnOld, Transaction txnNew) { // Switch locks. txnOld.getBaseDataset().getLock().leaveCriticalSection() ; txnNew.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ; }
@Override public void writerCommits(Transaction txn) { txn.getBaseDataset().getLock().leaveCriticalSection() ; writerCommitsWorker(txn) ; }
@Override public void writerStarts(Transaction txn) { txn.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ; }
@Override public void readerStarts(Transaction txn) { txn.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ; }
public static void replay(Transaction transaction) { if ( syslog.isDebugEnabled()) syslog.debug("Replay "+transaction.getLabel()) ; Journal journal = transaction.getJournal() ; DatasetGraphTDB dsg = transaction.getBaseDataset() ; // Currently, we (crudely) replay the whole journal. replay(journal, dsg.getConfig()) ; }
public BlockMgrJournal(Transaction txn, FileRef fileRef, BlockMgr underlyingBlockMgr) { Context context = txn.getBaseDataset().getContext() ; String mode = (null != context) ? (String) context.get(TDB.transactionJournalWriteBlockMode, "") : "" ; if ("direct".equalsIgnoreCase(mode)) writeBlockBufferAllocator = new BufferAllocatorDirect() ; else if ("mapped".equalsIgnoreCase(mode)) writeBlockBufferAllocator = new BufferAllocatorMapped(SystemTDB.BlockSize) ; else writeBlockBufferAllocator = new BufferAllocatorMem() ; reset(txn, fileRef, underlyingBlockMgr) ; if ( txn.getTxnMode() == ReadWrite.READ && underlyingBlockMgr instanceof BlockMgrJournal ) System.err.println("Two level BlockMgrJournal") ; }
synchronized /*package*/ void notifyClose(Transaction txn) { // Caution - not called if "Transactional.end() is not called." if ( txn.getState() == TxnState.ACTIVE ) { // The application error case for begin(WRITE)...end() is handled in Trasnaction.close(). // This is internal checking. String x = txn.getBaseDataset().getLocation().getDirectoryPath() ; syslog.warn("close: Transaction not commited or aborted: Transaction: "+txn.getTxnId()+" @ "+x) ; // Force abort then close txn.abort() ; txn.close() ; return ; } noteTxnClose(txn) ; }