@Override public void transactionPromotes(Transaction txnOld, Transaction txnNew) { // Switch locks. txnOld.getBaseDataset().getLock().leaveCriticalSection() ; txnNew.getBaseDataset().getLock().enterCriticalSection(Lock.READ) ; }
protected void startWriteTxn() { lock.enterCriticalSection(Lock.WRITE); } protected void finishReadTxn() { lock.leaveCriticalSection(); }
protected void finishReadTxn() { lock.leaveCriticalSection(); } protected void finishWriteTxn() { lock.leaveCriticalSection(); }
protected void startWriteTxn() { lock.enterCriticalSection(Lock.WRITE); } protected void finishReadTxn() { lock.leaveCriticalSection(); }
protected void finishWriteTxn() { lock.leaveCriticalSection(); }
private void _promote(boolean readCommited) { // Outside lock. if ( ! readCommited && version.get() != generation.get() ) { // This tests for any commited writers since this transaction started. // This does not catch the case of a currently active writer // that has not gone to commit or abort yet. // The final test is after we obtain the transactionLock. throw new JenaTransactionException("Dataset changed - can't promote") ; } // Blocking on other writers. transactionLock.enterCriticalSection(Lock.WRITE); // Check again now we are inside the lock. if ( ! readCommited && version.get() != generation.get() ) { // Can't promote - release the lock. transactionLock.leaveCriticalSection(); throw new JenaTransactionException("Concurrent writer changed the dataset : can't promote") ; } // We have the lock and we have promoted! transactionMode(WRITE); _begin(transactionType(), ReadWrite.WRITE) ; }
protected void startReadTxn() { lock.enterCriticalSection(Lock.READ); } protected void startWriteTxn() { lock.enterCriticalSection(Lock.WRITE); }
protected void finishReadTxn() { lock.leaveCriticalSection(); } protected void finishWriteTxn() { lock.leaveCriticalSection(); }
@Override public WonMessage process(final WonMessage message) throws WonMessageProcessingException { Dataset dataset = message.getCompleteDataset(); StringBuilder errorMessage = new StringBuilder("Message is not valid, failed at check "); boolean valid = false; try { dataset.getLock().enterCriticalSection(true); valid = validator.validate(dataset, errorMessage); } finally { dataset.getLock().leaveCriticalSection(); } if (!valid) { logger.info(errorMessage.toString() + "\n Offending message:\n" + RdfUtils.writeDatasetToString(dataset, Lang .TRIG)); throw new WonMessageNotWellFormedException(errorMessage.toString()); } return message; }
protected void startReadTxn() { lock.enterCriticalSection(Lock.READ); } protected void startWriteTxn() { lock.enterCriticalSection(Lock.WRITE); }
protected void finishWriteTxn() { lock.leaveCriticalSection(); }
private Model construct(Dataset dataset, String namespace, String graphURI, Resource property) { dataset.getLock().enterCriticalSection(Lock.READ); try { StringBuilder buff = new StringBuilder(); buff.append("PREFIX afn: <http://jena.apache.org/ARQ/function#> \n") .append("CONSTRUCT { \n").append(" ?res <").append(property.getURI()).append("> ?o } WHERE { \n"); if (graphURI != null) { buff.append(" GRAPH ").append(graphURI).append(" { \n"); } buff.append(" ?res <").append(property.getURI()).append("> ?o \n"); buff.append(getNamespaceFilter(namespace)); if (graphURI != null) { buff.append(" } \n"); } buff.append("}"); Query constructProp = QueryFactory.create(buff.toString()); QueryExecution qe = QueryExecutionFactory.create(constructProp, dataset); try { return qe.execConstruct(); } finally { qe.close(); } } finally { dataset.getLock().leaveCriticalSection(); } }
@Override public void enterCriticalSection(boolean requestReadLock) { this.getModelLock().enterCriticalSection(requestReadLock) ; }
/** Called transaction ending code at most once per transaction. */ private void finishTransaction() { isInTransaction.remove(); transactionType.remove(); transactionMode.remove(); version.remove(); transactionLock.leaveCriticalSection(); }
/** Package access to allow for unit testing. */ void processChanges(String editorUri, Model writeModel, Model toBeAdded, Model toBeRetracted) throws Exception { Lock lock = null; log.debug("Model to be retracted is"); StringWriter sw = new StringWriter(); toBeRetracted.write(sw, "N3"); log.debug(sw.toString()); try { lock = writeModel.getLock(); lock.enterCriticalSection(Lock.WRITE); if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri, true)); } writeModel.add(toBeAdded); writeModel.remove(toBeRetracted); } catch (Throwable t) { throw new Exception("Error while modifying model \n" + t.getMessage()); } finally { if( writeModel instanceof OntModel){ ((OntModel)writeModel).getBaseModel().notifyEvent(new EditEvent(editorUri, false)); } lock.leaveCriticalSection(); } }
@Override public void enterCriticalSection(boolean requestReadLock) { this.getModelLock().enterCriticalSection(requestReadLock) ; }
protected void endOnce() { if ( isInTransaction() ) { lock.leaveCriticalSection() ; txnMode.set(null); txnType.set(null); inTransaction.set(false); txnMode.remove(); txnType.remove(); inTransaction.remove(); } }
protected void applyChangeSetToModel(ChangeSet changeSet, Dataset dataset) { for (ModelChange modelChange: changeSet.getModelChanges()) { dataset.getLock().enterCriticalSection(Lock.WRITE); try { Model model = (modelChange.getGraphURI() == null) ? dataset.getDefaultModel() : dataset.getNamedModel(modelChange.getGraphURI()); operateOnModel(model, modelChange, dataset); } finally { dataset.getLock().leaveCriticalSection(); } } }
@Override public void enterCriticalSection(boolean readLockRequested) { forEach(lock -> lock.enterCriticalSection(readLockRequested)); }
@Override public void leaveCriticalSection() { this.getModelLock().leaveCriticalSection() ; }