private static boolean isAcidInputOutputFormat(String fullTableName, StorageDescriptor sd) {
    if (sd.getInputFormat() == null || sd.getOutputFormat() == null) {
      return false;
    }
    try {
      return Class.forName(Constants.ORC_INPUT_FORMAT)
                  .isAssignableFrom(Class.forName(sd.getInputFormat()))
            && Class.forName(Constants.ORC_OUTPUT_FORMAT)
                  .isAssignableFrom(Class.forName(sd.getOutputFormat()));

    } catch (ClassNotFoundException e) {
      //if a table is using some custom I/O format and it's not in the classpath, we won't mark
      //the table for Acid, but today OrcInput/OutputFormat is the only Acid format
      LOG.error("Could not determine if " + fullTableName + " can be made Acid due to: " + e.getMessage(), e);
      return false;
    }
  }
The method for altering table props; may set the table to MM, non-MM, or not affect MM.
todo: All such validation logic should be TransactionValidationListener
@param tbl object image before alter table command (or null if not retrieved yet).
@param props prop values set in this alter table command
ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java