code: public ListenableFuture<KeyValue> compareAndSet(String key, SetValue setValue) {
          checkThatDistributedStoreIsActive();
          KayVeeCommand.CASCommand casCommand = new KayVeeCommand.CASCommand(getCommandId(), key, setValue.getExpectedValue(), setValue.getNewValue());
          return issueCommandToCluster(casCommand);
      }
docs: Issue a {@link KayVeeCommand.CASCommand}.
  Set the new value for a key iff its current value matches the expected value.
  This method can be used to create keys if the expected
  value is null, or delete keys if the new value is null.
  
  @param key key for which the CAS is performed
  @param setValue instance of {@code SetValue} from which the expected value and new value are extracted
  the rules for a CAS are specified in the KayVee README.md
  @return future that will be triggered when the command is successfully
  <strong>committed</strong> to replicated storage or is <strong>known</strong>
  to have failed. This future <strong>may not</strong> be triggered. Callers
  are advised <strong>not</strong> to wait indefinitely, and instead, use
  timed waits.