@Override
  public void processLoadSnapshot(final File snapshotDir) throws IOException {
    Exception loadPipeTaskInfoException = null;
    Exception loadPipePluginInfoException = null;

    try {
      pipeTaskInfo.processLoadSnapshot(snapshotDir);

      for (final PipeMeta pipeMeta : pipeTaskInfo.getPipeMetaList()) {
        PipeConfigNodeAgent.runtime()
            .increaseListenerReference(pipeMeta.getStaticMeta().getExtractorParameters());
      }
    } catch (final Exception ex) {
      LOGGER.error("Failed to load pipe task info from snapshot", ex);
      loadPipeTaskInfoException = ex;
    }

    try {
      pipePluginInfo.processLoadSnapshot(snapshotDir);
    } catch (final Exception ex) {
      LOGGER.error("Failed to load pipe plugin info from snapshot", ex);
      loadPipePluginInfoException = ex;
    }

    if (loadPipeTaskInfoException != null || loadPipePluginInfoException != null) {
      throw new IOException(
          "Failed to load pipe info from snapshot, "
              + "loadPipeTaskInfoException="
              + loadPipeTaskInfoException
              + ", loadPipePluginInfoException="
              + loadPipePluginInfoException);
    }
  }
Note: This interface is only used for subscription and thus irrelevant to the {@link
PipeConfigNodeSubtask}. Hence, we can skip the operation of {@link PipeConfigNodeTaskAgent} and
{@link PipeConfigRegionListener} here.

@param plans An {@link OperateMultiplePipesPlanV2} consisting of many subPlans
@return result {@link TSStatus}
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/pipe/PipeInfo.java