Github user NicoK commented on a diff in the pull request: https://github.com/apache/flink/pull/4485#discussion_r136023768 --- Diff: flink-runtime/src/test/java/org/apache/flink/runtime/io/network/partition/consumer/SingleInputGateTest.java --- @@ -372,6 +375,52 @@ public void testRequestBackoffConfiguration() throws Exception { } } + /** + * Tests that input gate requests and assigns network buffers for remote input channel, and triggers + * this process after unknown input channel updates to remote input channel. + */ + @Test + public void testRequestBuffersForInputChannel() throws Exception { + final TaskIOMetricGroup metrics = new UnregisteredTaskMetricsGroup.DummyTaskIOMetricGroup(); + final SingleInputGate inputGate = new SingleInputGate( + "t1", + new JobID(), + new IntermediateDataSetID(), + ResultPartitionType.PIPELINED_CREDIT_BASED, + 0, + 1, + mock(TaskActions.class), + metrics); + RemoteInputChannel remote = mock(RemoteInputChannel.class); + inputGate.setInputChannel(new IntermediateResultPartitionID(), remote); + + final int buffersPerChannel = 2; + NetworkBufferPool network = mock(NetworkBufferPool.class); + inputGate.assignExclusiveSegments(network, buffersPerChannel); + + verify(network, times(1)).requestMemorySegments(buffersPerChannel); + verify(remote, times(1)).assignExclusiveSegments(anyList()); + + final UnknownInputChannel unknown = new UnknownInputChannel( + inputGate, + 0, + new ResultPartitionID(), + new ResultPartitionManager(), + new TaskEventDispatcher(), + new LocalConnectionManager(), + 0, + 0, + metrics); + inputGate.setInputChannel(unknown.partitionId.getPartitionId(), unknown); + + // Update to a remote channel and verify that requesting buffers is triggered + inputGate.updateInputChannel(new InputChannelDeploymentDescriptor( + unknown.partitionId, + ResultPartitionLocation.createRemote(mock(ConnectionID.class)))); + + verify(network, times(2)).requestMemorySegments(buffersPerChannel); --- End diff -- It would be nice if we could also verify that `assignExclusiveSegments()` is called here. For this, you'd have to return a spy in `UnknownInputChannel#toRemoteInputChannel`, I guess...
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---