Exemplo n.º 1
0
  /** Retriggers a partition request. */
  public void retriggerPartitionRequest(IntermediateResultPartitionID partitionId)
      throws IOException, InterruptedException {
    synchronized (requestLock) {
      if (!isReleased) {
        final InputChannel ch = inputChannels.get(partitionId);

        checkNotNull(ch, "Unknown input channel with ID " + partitionId);

        LOG.debug(
            "Retriggering partition request {}:{}.", ch.partitionId, consumedSubpartitionIndex);

        if (ch.getClass() == RemoteInputChannel.class) {
          final RemoteInputChannel rch = (RemoteInputChannel) ch;
          rch.retriggerSubpartitionRequest(consumedSubpartitionIndex);
        } else if (ch.getClass() == LocalInputChannel.class) {
          final LocalInputChannel ich = (LocalInputChannel) ch;

          if (retriggerLocalRequestTimer == null) {
            retriggerLocalRequestTimer = new Timer(true);
          }

          ich.retriggerSubpartitionRequest(retriggerLocalRequestTimer, consumedSubpartitionIndex);
        } else {
          throw new IllegalStateException(
              "Unexpected type of channel to retrigger partition: " + ch.getClass());
        }
      }
    }
  }
Exemplo n.º 2
0
  public void setInputChannel(
      IntermediateResultPartitionID partitionId, InputChannel inputChannel) {
    synchronized (requestLock) {
      if (inputChannels.put(checkNotNull(partitionId), checkNotNull(inputChannel)) == null
          && inputChannel.getClass() == UnknownInputChannel.class) {

        numberOfUninitializedChannels++;
      }
    }
  }
Exemplo n.º 3
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();
        }
      }
    }
  }