Source:
<code>private void preValidate() { CheckpointConfig checkpointConfig = streamGraph.getCheckpointConfig(); if (checkpointConfig.isCheckpointingEnabled()) { if (streamGraph.isIterative() && !checkpointConfig.isForceCheckpointing()) { throw new UnsupportedOperationException( "Checkpointing is currently not supported by default for iterative jobs, as we cannot guarantee exactly once semantics. " + "State checkpoints happen normally, but records in-transit during the snapshot will be lost upon failure. " + "\nThe user can force enable state checkpoints with the reduced guarantees by calling: env.enableCheckpointing(interval,true)"); } if (streamGraph.isIterative() && !checkpointConfig.isForceUnalignedCheckpoints()) { <START> throw new UnsupportedOperationException("Unaligned Checkpoints are currently not supported for iterative jobs"); <END> } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); for (StreamNode node : streamGraph.getStreamNodes()) { StreamOperatorFactory operatorFactory = node.getOperatorFactory(); if (operatorFactory != null) { Class<?> operatorClass = operatorFactory.getStreamOperatorClass(classLoader); if (InputSelectable.class.isAssignableFrom(operatorClass)) { throw new UnsupportedOperationException( "Checkpointing is currently not supported for operators that implement InputSelectable:" + operatorClass.getName()); } } } } if (checkpointConfig.isUnalignedCheckpointsEnabled() && getCheckpointingMode(checkpointConfig) != CheckpointingMode.EXACTLY_ONCE) { LOG.warn("Unaligned checkpoints can only be used with checkpointing mode EXACTLY_ONCE"); checkpointConfig.enableUnalignedCheckpoints(false); } }</code><technical_language>add more details similar forcing checkpoints > "Unaligned Checkpoints currently supported for iterative jobs, Flink rescale checkpoints. " + "\nYou force enable unaligned checkpoints if intend rescale: env.setForceUnalignedCheckpoints(true)"</technical_language>

Target:
private void preValidate() { CheckpointConfig checkpointConfig = streamGraph.getCheckpointConfig(); if (checkpointConfig.isCheckpointingEnabled()) { if (streamGraph.isIterative() && !checkpointConfig.isForceCheckpointing()) { throw new UnsupportedOperationException( "Checkpointing is currently not supported by default for iterative jobs, as we cannot guarantee exactly once semantics. " + "State checkpoints happen normally, but records in-transit during the snapshot will be lost upon failure. " + "\nThe user can force enable state checkpoints with the reduced guarantees by calling: env.enableCheckpointing(interval,true)"); } if (streamGraph.isIterative() && checkpointConfig.isUnalignedCheckpointsEnabled() && !checkpointConfig.isForceUnalignedCheckpoints()) { throw new UnsupportedOperationException( "Unaligned Checkpoints are currently not supported for iterative jobs, " + " as rescaling would require alignment (in addition to the reduced checkpointing guarantees)." + "\nThe user can force Unaligned Checkpoints by using 'execution.checkpointing.unaligned.forced'"); } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); for (StreamNode node : streamGraph.getStreamNodes()) { StreamOperatorFactory operatorFactory = node.getOperatorFactory(); if (operatorFactory != null) { Class<?> operatorClass = operatorFactory.getStreamOperatorClass(classLoader); if (InputSelectable.class.isAssignableFrom(operatorClass)) { throw new UnsupportedOperationException( "Checkpointing is currently not supported for operators that implement InputSelectable:" + operatorClass.getName()); } } } } if (checkpointConfig.isUnalignedCheckpointsEnabled() && getCheckpointingMode(checkpointConfig) != CheckpointingMode.EXACTLY_ONCE) { LOG.warn("Unaligned checkpoints can only be used with checkpointing mode EXACTLY_ONCE"); checkpointConfig.enableUnalignedCheckpoints(false); } }