@Override public void databases(final LockResult lr) { for (final Command c : cmds) c.databases(lr); // lock globally if context-dependent is found (context will be changed by commands) final boolean wc = lr.write.contains(DBLocking.CTX) || lr.write.contains(DBLocking.COLL); final boolean rc = lr.read.contains(DBLocking.CTX) || lr.read.contains(DBLocking.COLL); if (wc || rc && !lr.write.isEmpty()) { lr.writeAll = true; lr.readAll = true; } else if (rc) { lr.readAll = true; } }
@Override public void databases(final LockResult lr) { if (qp == null) { lr.writeAll = true; } else { qp.databases(lr); info.readLocked = lr.readAll ? null : lr.read; info.writeLocked = lr.writeAll ? null : lr.write; } }
@Override public void getWriteLock(Object resource, Transaction tx) throws DeadlockDetectedException, IllegalResourceException { // Code copied from getReadLock. Fix! LockGrabber grabber = null; if (resource instanceof Node) grabber = LockGrabber.NODE_WRITE; else if (resource instanceof Relationship) grabber = LockGrabber.RELATIONSHIP_WRITE; else if (resource instanceof GraphProperties) grabber = LockGrabber.GRAPH_WRITE; else if (resource instanceof IndexLock) grabber = LockGrabber.INDEX_WRITE; try { if (grabber == null) { super.getWriteLock(resource, tx); return; } initializeTxIfFirst(); LockResult result = null; do { int eventIdentifier = getLocalTxId(); result = databaseOperations.receive( grabber.acquireLock( broker.getMaster().first(), databaseOperations.getSlaveContext(eventIdentifier), resource)); switch (result.getStatus()) { case OK_LOCKED: super.getWriteLock(resource, tx); return; case DEAD_LOCKED: throw new DeadlockDetectedException(result.getDeadlockMessage()); } } while (result.getStatus() == LockStatus.NOT_LOCKED); } catch (RuntimeException e) { databaseOperations.exceptionHappened(e); throw e; } }
@Override public void databases(final LockResult lr) { lr.readAll = true; }