use of org.sirix.node.interfaces.Node in project sirix by sirixdb.
the class XdmResourceManager method beginNodeWriteTrx.
@Override
public synchronized XdmNodeWriteTrx beginNodeWriteTrx(@Nonnegative final int maxNodeCount, @Nonnull final TimeUnit timeUnit, @Nonnegative final int maxTime) {
// Checks.
assertAccess(mLastCommittedUberPage.get().getRevision());
if (maxNodeCount < 0 || maxTime < 0) {
throw new SirixUsageException("maxNodeCount may not be < 0!");
}
checkNotNull(timeUnit);
// Make sure not to exceed available number of write transactions.
try {
if (!mWriteSemaphore.tryAcquire(20, TimeUnit.SECONDS)) {
throw new SirixUsageException("No write transaction available, please close the write transaction first.");
}
} catch (final InterruptedException e) {
throw new SirixThreadedException(e);
}
// Create new page write transaction (shares the same ID with the node write trx).
final long currentTrxID = mNodeTrxIDCounter.incrementAndGet();
final int lastRev = mLastCommittedUberPage.get().getRevisionNumber();
final PageWriteTrx<Long, Record, UnorderedKeyValuePage> pageWtx = createPageWriteTransaction(currentTrxID, lastRev, lastRev, Abort.NO);
final Node documentNode = getDocumentNode(pageWtx);
// Create new node write transaction.
final XdmNodeWriteTrx wtx = new XdmNodeWriterTrxImpl(currentTrxID, this, pageWtx, maxNodeCount, timeUnit, maxTime, documentNode);
// Remember node transaction for debugging and safe close.
if (mNodeReaderMap.put(currentTrxID, wtx) != null || mNodePageTrxMap.put(currentTrxID, pageWtx) != null) {
throw new SirixThreadedException("ID generation is bogus because of duplicate ID.");
}
return wtx;
}
use of org.sirix.node.interfaces.Node in project sirix by sirixdb.
the class PageWriteTrxImpl method removeEntry.
@Override
public void removeEntry(final Long recordKey, @Nonnull final PageKind pageKind, final int index, final Optional<UnorderedKeyValuePage> keyValuePage) throws SirixIOException {
mPageRtx.assertNotClosed();
final long nodePageKey = mPageRtx.pageKey(recordKey);
final PageContainer cont = prepareRecordPage(nodePageKey, index, pageKind);
final Optional<Record> node = getRecord(recordKey, pageKind, index);
if (node.isPresent()) {
final Record nodeToDel = node.get();
final Node delNode = new DeletedNode(new NodeDelegate(nodeToDel.getNodeKey(), -1, -1, -1, Optional.<SirixDeweyID>empty()));
((UnorderedKeyValuePage) cont.getModified()).setEntry(delNode.getNodeKey(), delNode);
((UnorderedKeyValuePage) cont.getComplete()).setEntry(delNode.getNodeKey(), delNode);
} else {
throw new IllegalStateException("Node not found!");
}
}
Aggregations