docs: public boolean updateCatalog(String diffCmds,
                                   CatalogContext context,
                                   boolean requiresSnapshotIsolationboolean,
                                   boolean isMPI,
                                   long txnId,
                                   long uniqueId,
                                   long spHandle,
                                   boolean isReplay,
                                   boolean requireCatalogDiffCmdsApplyToEE,
                                   boolean requiresNewExportGeneration)
      {
          CatalogContext oldContext = m_context;
          m_context = context;
          m_ee.setBatchTimeout(m_context.cluster.getDeployment().get("deployment").
                  getSystemsettings().get("systemsettings").getQuerytimeout());
          m_loadedProcedures.loadProcedures(m_context, isReplay);
          m_ee.loadFunctions(m_context);
  
          if (isMPI) {
              // the rest of the work applies to sites with real EEs
              return true;
          }
  
          if (requireCatalogDiffCmdsApplyToEE == false) {
              // empty diff cmds for the EE to apply, so skip the JNI call
              hostLog.debug("Skipped applying diff commands on EE.");
              return true;
          }
  
          CatalogMap<Table> tables = m_context.catalog.getClusters().get("cluster").getDatabases().get("database").getTables();
  
          boolean DRCatalogChange = false;
          for (Table t : tables) {
              if (t.getIsdred()) {
                  DRCatalogChange |= diffCmds.contains("tables#" + t.getTypeName());
                  if (DRCatalogChange) {
                      break;
                  }
              }
          }
  
          if (!DRCatalogChange) { // Check against old catalog for deletions
              CatalogMap<Table> oldTables = oldContext.catalog.getClusters().get("cluster").getDatabases().get("database").getTables();
              for (Table t : oldTables) {
                  if (t.getIsdred()) {
                      DRCatalogChange |= diffCmds.contains(CatalogSerializer.getDeleteDiffStatement(t, "tables"));
                      if (DRCatalogChange) {
                          break;
                      }
                  }
              }
          }
  
          // if a snapshot is in process, wait for it to finish
          // don't bother if this isn't a schema change
          //
          if (requiresSnapshotIsolationboolean && m_snapshotter.isEESnapshotting()) {
              hostLog.info(String.format("Site %d performing schema change operation must block until snapshot is locally complete.",
                      CoreUtils.getSiteIdFromHSId(m_siteId)));
              try {
                  m_snapshotter.completeSnapshotWork(m_sysprocContext);
                  hostLog.info(String.format("Site %d locally finished snapshot. Will update catalog now.",
                          CoreUtils.getSiteIdFromHSId(m_siteId)));
              }
              catch (InterruptedException e) {
                  VoltDB.crashLocalVoltDB("Unexpected Interrupted Exception while finishing a snapshot for a catalog update.", true, e);
              }
          }
  
          //Necessary to quiesce before updating the catalog
          //so export data for the old generation is pushed to Java.
          //No need to quiesce as there is no rolling of generation OLD datasources will be polled and pushed until there is no more data.
          //m_ee.quiesce(m_lastCommittedSpHandle);
          m_ee.updateCatalog(m_context.m_genId, requiresNewExportGeneration, diffCmds);
          if (DRCatalogChange) {
              final DRCatalogCommands catalogCommands = DRCatalogDiffEngine.serializeCatalogCommandsForDr(m_context.catalog, -1);
              generateDREvent(EventType.CATALOG_UPDATE, txnId, uniqueId, m_lastCommittedSpHandle,
                      spHandle, catalogCommands.commands.getBytes(Charsets.UTF_8));
          }
  
          return true;
      }