Skip to content

Commit

Permalink
[hotfix][network,tests] Add new unit test for RemoteInputChannel#retr…
Browse files Browse the repository at this point in the history
…iggerSubpartitionRequest

It is necessary for flip1 to make sure the PartitionNotFoundException would be setted on the RemoteInputChannel while retriggering partition request,
so a new unit test is added to cover this case.
  • Loading branch information
zhijiangW authored and tillrohrmann committed May 23, 2019
1 parent 0189db4 commit 9f2338c
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.flink.runtime.io.network;

/**
* A dummy implementation of the {@link ConnectionManager} which is mainly used for creating
* {@link PartitionRequestClient} instance in tests.
*/
public class TestingConnectionManager implements ConnectionManager {

@Override
public void start() {}

@Override
public PartitionRequestClient createPartitionRequestClient(ConnectionID connectionId) {
return new TestingPartitionRequestClient();
}

@Override
public void closeOpenChannelConnections(ConnectionID connectionId) {}

@Override
public int getNumberOfActiveConnections() {
return 0;
}

@Override
public int getDataPort() {
return -1;
}

@Override
public void shutdown() {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.flink.runtime.io.network;

import org.apache.flink.runtime.event.TaskEvent;
import org.apache.flink.runtime.io.network.partition.ResultPartitionID;
import org.apache.flink.runtime.io.network.partition.consumer.RemoteInputChannel;

/**
* A dummy implementation of the {@link PartitionRequestClient} instance which is mainly used
* for tests to avoid mock.
*/
public class TestingPartitionRequestClient implements PartitionRequestClient {

@Override
public void requestSubpartition(
ResultPartitionID partitionId,
int subpartitionIndex,
RemoteInputChannel inputChannel,
int delayMs) {
}

@Override
public void notifyCreditAvailable(RemoteInputChannel inputChannel) {
}

@Override
public void sendTaskEvent(ResultPartitionID partitionId, TaskEvent event, RemoteInputChannel inputChannel) {
}

@Override
public void close(RemoteInputChannel inputChannel) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@
import org.apache.flink.runtime.io.network.ConnectionID;
import org.apache.flink.runtime.io.network.ConnectionManager;
import org.apache.flink.runtime.io.network.PartitionRequestClient;
import org.apache.flink.runtime.io.network.TestingConnectionManager;
import org.apache.flink.runtime.io.network.buffer.Buffer;
import org.apache.flink.runtime.io.network.buffer.BufferListener.NotificationResult;
import org.apache.flink.runtime.io.network.buffer.BufferPool;
import org.apache.flink.runtime.io.network.buffer.NetworkBufferPool;
import org.apache.flink.runtime.io.network.partition.InputChannelTestUtils;
import org.apache.flink.runtime.io.network.partition.PartitionNotFoundException;
import org.apache.flink.runtime.io.network.partition.ProducerFailedException;
import org.apache.flink.runtime.io.network.partition.ResultPartitionID;
import org.apache.flink.runtime.io.network.util.TestBufferFactory;
Expand All @@ -51,6 +53,7 @@
import static org.apache.flink.runtime.io.network.partition.InputChannelTestUtils.createSingleInputGate;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isA;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
Expand Down Expand Up @@ -991,6 +994,28 @@ public void testConcurrentRecycleAndRelease2() throws Exception {
}
}

/**
* Tests that {@link RemoteInputChannel#retriggerSubpartitionRequest(int)} would throw
* the {@link PartitionNotFoundException} if backoff is 0.
*/
@Test
public void testPartitionNotFoundExceptionWhileRetriggeringRequest() throws Exception {
final RemoteInputChannel inputChannel = InputChannelTestUtils.createRemoteInputChannel(
createSingleInputGate(1), 0, new TestingConnectionManager());

// Request partition to initialize client to avoid illegal state after retriggering partition
inputChannel.requestSubpartition(0);
// The default backoff is 0 then it would set PartitionNotFoundException on this channel
inputChannel.retriggerSubpartitionRequest(0);
try {
inputChannel.checkError();

fail("Should throw a PartitionNotFoundException.");
} catch (PartitionNotFoundException notFound) {
assertThat(inputChannel.getPartitionId(), is(notFound.getPartitionId()));
}
}

// ---------------------------------------------------------------------------------------------

private RemoteInputChannel createRemoteInputChannel(SingleInputGate inputGate)
Expand Down

0 comments on commit 9f2338c

Please sign in to comment.