code: public boolean put(PutAction putAction, HTableInterface table) {
      for (PutActionModifier putActionModifier : putActionModifiers) {
        putAction = putActionModifier.modifyPutAction(putAction);
      }
      Put put = putAction.getPut();
      if (putAction.getVersionCheckAction() != null) {
        byte[] versionBytes = null;
        long version = putAction.getVersionCheckAction().getVersion();
        if (version != 0) {
          versionBytes = Bytes.toBytes(version);
        }
        try {
          return table.checkAndPut(put.getRow(), Constants.SYS_COL_FAMILY,
              Constants.VERSION_CHECK_COL_QUALIFIER, versionBytes, put);
        } catch (IOException e) {
          throw new DatasetIOException(
              "Error putting row from table with checkAndPut", e);
        }
      } else {
        try {
          table.put(put);
          return true;
        } catch (IOException e) {
          throw new DatasetIOException("Error putting row from table", e);
        }
      }
    }
docs: Execute a Put on HBase using a pre-define HTableInterface
  
  Any PutModifers registered with registerPutModifier will be invoked before
  the Put is executed.
  
  @param putAction
  The put to execute on HBase.
  @param table
  The HTableInterface object to interface with
  @return True if the put succeeded, False if the put failed due to update
  conflict