Exemplo n.º 1
0
  @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;
    }
  }
Exemplo n.º 2
0
 @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;
   }
 }
Exemplo n.º 3
0
  @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;
    }
  }
Exemplo n.º 4
0
 @Override
 public void databases(final LockResult lr) {
   lr.readAll = true;
 }