private void sendRequest(LockRequest request) throws ACIDException {

    switch (request.requestType) {
      case RequestType.LOCK:
        try {
          lockMgr.lock(
              request.datasetIdObj, request.entityHashValue, request.lockMode, request.txnContext);
        } catch (ACIDException e) {
          if (request.txnContext.isTimeout()) {
            if (request.txnContext.getTxnState() != ITransactionManager.ABORTED) {
              request.txnContext.setTxnState(ITransactionManager.ABORTED);
              log("*** " + request.txnContext.getJobId() + " lock request causing deadlock ***");
              log("Abort --> Releasing all locks acquired by " + request.txnContext.getJobId());
              try {
                lockMgr.releaseLocks(request.txnContext);
              } catch (ACIDException e1) {
                e1.printStackTrace();
              }
              log("Abort --> Released all locks acquired by " + request.txnContext.getJobId());
            }
            isDone = true;
          } else {
            throw e;
          }
        }
        break;
      case RequestType.INSTANT_LOCK:
        try {
          lockMgr.instantLock(
              request.datasetIdObj, request.entityHashValue, request.lockMode, request.txnContext);
        } catch (ACIDException e) {
          if (request.txnContext.isTimeout()) {
            if (request.txnContext.getTxnState() != ITransactionManager.ABORTED) {
              request.txnContext.setTxnState(ITransactionManager.ABORTED);
              log("*** " + request.txnContext.getJobId() + " lock request causing deadlock ***");
              log("Abort --> Releasing all locks acquired by " + request.txnContext.getJobId());
              try {
                lockMgr.releaseLocks(request.txnContext);
              } catch (ACIDException e1) {
                e1.printStackTrace();
              }
              log("Abort --> Released all locks acquired by " + request.txnContext.getJobId());
            }
            isDone = true;
          } else {
            throw e;
          }
        }
        break;
      case RequestType.TRY_LOCK:
        request.isTryLockFailed =
            !lockMgr.tryLock(
                request.datasetIdObj,
                request.entityHashValue,
                request.lockMode,
                request.txnContext);
        break;
      case RequestType.INSTANT_TRY_LOCK:
        lockMgr.instantTryLock(
            request.datasetIdObj, request.entityHashValue, request.lockMode, request.txnContext);
        break;
      case RequestType.UNLOCK:
        lockMgr.unlock(
            request.datasetIdObj, request.entityHashValue, request.lockMode, request.txnContext);
        break;
      case RequestType.RELEASE_LOCKS:
        lockMgr.releaseLocks(request.txnContext);
        break;
      default:
        throw new UnsupportedOperationException("Unsupported lock method");
    }
    try {
      Thread.sleep((long) 0);
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }