@Override
  protected void serializeAttributes(DataOutputStream stream) throws IOException {
    PlanNodeType.EXCHANGE.serialize(stream);
    ReadWriteIOUtils.write(upstreamEndpoint.getIp(), stream);
    ReadWriteIOUtils.write(upstreamEndpoint.getPort(), stream);
    upstreamInstanceId.serialize(stream);
    upstreamPlanNodeId.serialize(stream);
    ReadWriteIOUtils.write(outputColumnNames.size(), stream);
    for (String outputColumnName : outputColumnNames) {
      ReadWriteIOUtils.write(outputColumnName, stream);
    }
    ReadWriteIOUtils.write(indexOfUpstreamSinkHandle, stream);
  }
Exchange needs to know which child of IdentitySinkNode/ShuffleSinkNode it matches
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/ExchangeNode.java