code: @Override
      public void acquireLock(StaticBuffer key, StaticBuffer column, StaticBuffer expectedValue, StoreTransaction txh) throws BackendException {
          if (locker != null) {
              ExpectedValueCheckingTransaction tx = (ExpectedValueCheckingTransaction) txh;
              if (tx.isMutationStarted())
                  throw new PermanentLockingException("Attempted to obtain a lock after mutations had been persisted");
              KeyColumn lockID = new KeyColumn(key, column);
              log.debug("Attempting to acquireLock on {} ev={}", lockID, expectedValue);
              locker.writeLock(lockID, tx.getConsistentTx());
              tx.storeExpectedValue(this, lockID, expectedValue);
          } else {
              store.acquireLock(key, column, expectedValue, unwrapTx(txh));
          }
      }
docs: {@inheritDoc}
  <p/>
  This implementation supports locking when {@code lockStore} is non-null.
  <p/>
  Consider the following scenario. This method is called twice with
  identical key, column, and txh arguments, but with different
  expectedValue arguments in each call. In testing, it seems titan's
  graphdb requires that implementations discard the second expectedValue
  and, when checking expectedValues vs actual values just prior to mutate,
  only the initial expectedValue argument should be considered.