public ProgressIndex restoreProgressIndex() {
    if (!progressIndexPersistFile.exists() || progressIndexPersistFile.length() == 0) {
      return progressIndex.get();
    }

    try {
      final byte[] fileData = Files.readAllBytes(progressIndexPersistFile.toPath());

      try (final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(fileData);
          final DataInputStream inputStream = new DataInputStream(byteArrayInputStream)) {
        final ProgressIndex restoredIndex = ProgressIndexType.deserializeFrom(inputStream);
        progressIndex.get().updateToMinimumEqualOrIsAfterProgressIndex(restoredIndex);
        LOGGER.info(
            "{} successfully restored progress index from [{}], current index: {}",
            this,
            progressIndexPersistFile.getAbsolutePath(),
            progressIndex.get());
      }
    } catch (final IOException e) {
      LOGGER.warn(
          "{} failed to restore progress index from [{}].",
          this,
          progressIndexPersistFile.getAbsolutePath(),
          e);
    }
    return progressIndex.get();
  }
Stores the exceptions encountered during run time of each pipe task.

<p>The exceptions are instances of {@link PipeRuntimeCriticalException}, {@link
PipeRuntimeConnectorCriticalException} and {@link PipeRuntimeNonCriticalException}.

<p>The failure of them, respectively, will lead to the stop of the pipe, the stop of the pipes
sharing the same connector, and nothing.
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/task/meta/PipeTaskMeta.java