RemoteInputChannel extends InputChannel { void retriggerSubpartitionRequest(int subpartitionIndex) throws IOException, InterruptedException { checkState(partitionRequestClient != null, "Missing initial subpartition request."); if (increaseBackoff()) { partitionRequestClient.requestSubpartition( partitionId, subpartitionIndex, this, getCurrentBackoff()); } else { failPartitionRequest(); } } RemoteInputChannel(
			SingleInputGate inputGate,
			int channelIndex,
			ResultPartitionID partitionId,
			ConnectionID connectionId,
			ConnectionManager connectionManager);  RemoteInputChannel(
			SingleInputGate inputGate,
			int channelIndex,
			ResultPartitionID partitionId,
			ConnectionID connectionId,
			ConnectionManager connectionManager,
			Tuple2<Integer, Integer> initialAndMaxBackoff); void failPartitionRequest(); @Override String toString(); int getNumberOfQueuedBuffers(); InputChannelID getInputChannelId(); BufferProvider getBufferProvider(); void onBuffer(Buffer buffer, int sequenceNumber); void onEmptyBuffer(int sequenceNumber); void onFailedPartitionRequest(); void onError(Throwable cause);  }
@Test(expected = IllegalStateException.class) public void testRetriggerWithoutPartitionRequest() throws Exception { Tuple2<Integer, Integer> backoff = new Tuple2<Integer, Integer>(500, 3000); PartitionRequestClient connClient = mock(PartitionRequestClient.class); SingleInputGate inputGate = mock(SingleInputGate.class); RemoteInputChannel ch = createRemoteInputChannel(inputGate, connClient, backoff); ch.retriggerSubpartitionRequest(0); }