void retriggerSubpartitionRequest(Timer timer) {
        synchronized (requestLock) {
            checkState(subpartitionView == null, "already requested partition");

            timer.schedule(
                    new TimerTask() {
                        @Override
                        public void run() {
                            try {
                                requestSubpartitions();
                            } catch (Throwable t) {
                                setError(t);
                            }
                        }
                    },
                    getCurrentBackoff());
        }
    }
@Test
    void testChannelErrorWhileRetriggeringRequest() {
        final SingleInputGate inputGate = createSingleInputGate(1);
        final LocalInputChannel localChannel =
                createLocalInputChannel(inputGate, new ResultPartitionManager());

        final Timer timer =
                new Timer(true) {
                    @Override
                    public void schedule(TimerTask task, long delay) {
                        task.run();
                        assertThatThrownBy(localChannel::checkError)
                                .isInstanceOfSatisfying(
                                        PartitionNotFoundException.class,
                                        notFound ->
                                                assertThat(localChannel.partitionId)
                                                        .isEqualTo(notFound.getPartitionId()));
                    }
                };

        try {
            localChannel.retriggerSubpartitionRequest(timer);
        } finally {
            timer.cancel();
        }
    }