コード例 #1
0
  @Override
  public void sendTaskEvent(TaskEvent event) throws IOException {
    synchronized (requestLock) {
      for (InputChannel inputChannel : inputChannels.values()) {
        inputChannel.sendTaskEvent(event);
      }

      if (numberOfUninitializedChannels > 0) {
        pendingEvents.add(event);
      }
    }
  }
コード例 #2
0
  public void updateInputChannel(InputChannelDeploymentDescriptor icdd)
      throws IOException, InterruptedException {
    synchronized (requestLock) {
      if (isReleased) {
        // There was a race with a task failure/cancel
        return;
      }

      final IntermediateResultPartitionID partitionId =
          icdd.getConsumedPartitionId().getPartitionId();

      InputChannel current = inputChannels.get(partitionId);

      if (current.getClass() == UnknownInputChannel.class) {

        UnknownInputChannel unknownChannel = (UnknownInputChannel) current;

        InputChannel newChannel;

        ResultPartitionLocation partitionLocation = icdd.getConsumedPartitionLocation();

        if (partitionLocation.isLocal()) {
          newChannel = unknownChannel.toLocalInputChannel();
        } else if (partitionLocation.isRemote()) {
          newChannel = unknownChannel.toRemoteInputChannel(partitionLocation.getConnectionId());
        } else {
          throw new IllegalStateException("Tried to update unknown channel with unknown channel.");
        }

        LOG.debug("Updated unknown input channel to {}.", newChannel);

        inputChannels.put(partitionId, newChannel);

        newChannel.requestSubpartition(consumedSubpartitionIndex);

        for (TaskEvent event : pendingEvents) {
          newChannel.sendTaskEvent(event);
        }

        if (--numberOfUninitializedChannels == 0) {
          pendingEvents.clear();
        }
      }
    }
  }