public CompletableFuture<CompletedCheckpoint> triggerCheckpoint(boolean isPeriodic) {
        return triggerCheckpointFromCheckpointThread(checkpointProperties, null, isPeriodic);
    }
@Test
    void testIOExceptionForPeriodicSchedulingWithInactiveTasks() throws Exception {
        CheckpointCoordinator checkpointCoordinator =
                setupCheckpointCoordinatorWithInactiveTasks(new IOExceptionCheckpointStorage());

        final CompletableFuture<CompletedCheckpoint> onCompletionPromise =
                checkpointCoordinator.triggerCheckpoint(
                        CheckpointProperties.forCheckpoint(
                                CheckpointRetentionPolicy.NEVER_RETAIN_AFTER_TERMINATION),
                        null,
                        true);
        manuallyTriggeredScheduledExecutor.triggerAll();

        try {
            onCompletionPromise.get();
            fail("should not trigger periodic checkpoint after IOException occurred.");
        } catch (Exception e) {
            final Optional<CheckpointException> checkpointExceptionOptional =
                    ExceptionUtils.findThrowable(e, CheckpointException.class);
            if (!checkpointExceptionOptional.isPresent()
                    || checkpointExceptionOptional.get().getCheckpointFailureReason()
                            != IO_EXCEPTION) {
                throw e;
            }
        }
    }