protected TPushPipeMetaRespExceptionMessage handleDropPipeInternal(final String pipeName) {
    // Do nothing if node is removing or removed
    if (isShutdown()) {
      return null;
    }

    try {
      dropPipe(pipeName);
      return null;
    } catch (final Exception e) {
      final String errorMessage =
          String.format("Failed to drop pipe %s, because %s", pipeName, e.getMessage());
      LOGGER.warn("Failed to drop pipe {}", pipeName, e);
      return new TPushPipeMetaRespExceptionMessage(
          pipeName, errorMessage, System.currentTimeMillis());
    }
  }
State transition diagram of a pipe task:

<p><code>
|----------------|                     |---------| --> stop  pipe --> |---------|                   |---------|
| initial status | --> create pipe --> | RUNNING |                    | STOPPED | --> drop pipe --> | DROPPED |
|----------------|                     |---------| <-- start pipe <-- |---------|                   |---------|
                                            |                                                            |
                                            | ----------------------> drop pipe -----------------------> |
</code>

<p>Other transitions are not allowed, will be ignored when received in the {@link PipeTaskAgent}.
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/agent/task/PipeTaskAgent.java