All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.runtime.checkpoint.CheckpointProperties Maven / Gradle / Ivy

/*
 * 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
 *
 *     http://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.checkpoint;

import org.apache.flink.annotation.VisibleForTesting;
import org.apache.flink.api.common.JobStatus;
import org.apache.flink.core.execution.SavepointFormatType;
import org.apache.flink.runtime.jobgraph.RestoreMode;

import java.io.Serializable;

import static org.apache.flink.util.Preconditions.checkNotNull;

/**
 * The configuration of a checkpoint. This describes whether
 *
 * 
    *
  • The checkpoint is s regular checkpoint or a savepoint. *
  • When the checkpoint should be garbage collected. *
*/ public class CheckpointProperties implements Serializable { private static final long serialVersionUID = 2L; /** Type - checkpoint / savepoint. */ private final SnapshotType checkpointType; /** * This has a misleading name and actually means whether the snapshot must be triggered, or * whether it may be rejected by the checkpoint coordinator if too many checkpoints are * currently in progress. */ private final boolean forced; private final boolean discardSubsumed; private final boolean discardFinished; private final boolean discardCancelled; private final boolean discardFailed; private final boolean discardSuspended; private final boolean unclaimed; @VisibleForTesting CheckpointProperties( boolean forced, SnapshotType checkpointType, boolean discardSubsumed, boolean discardFinished, boolean discardCancelled, boolean discardFailed, boolean discardSuspended, boolean unclaimed) { this.forced = forced; this.checkpointType = checkNotNull(checkpointType); this.discardSubsumed = discardSubsumed; this.discardFinished = discardFinished; this.discardCancelled = discardCancelled; this.discardFailed = discardFailed; this.discardSuspended = discardSuspended; this.unclaimed = unclaimed; } // ------------------------------------------------------------------------ /** * Returns whether the checkpoint should be forced. * *

Forced checkpoints ignore the configured maximum number of concurrent checkpoints and * minimum time between checkpoints. Furthermore, they are not subsumed by more recent * checkpoints as long as they are pending. * * @return true if the checkpoint should be forced; false otherwise. * @see CheckpointCoordinator * @see PendingCheckpoint */ boolean forceCheckpoint() { return forced; } /** Returns whether the checkpoint should be restored in a {@link RestoreMode#NO_CLAIM} mode. */ public boolean isUnclaimed() { return unclaimed; } // ------------------------------------------------------------------------ // Garbage collection behaviour // ------------------------------------------------------------------------ /** * Returns whether the checkpoint should be discarded when it is subsumed. * *

A checkpoint is subsumed when the maximum number of retained checkpoints is reached and a * more recent checkpoint completes.. * * @return true if the checkpoint should be discarded when it is subsumed; * false otherwise. * @see CompletedCheckpointStore */ boolean discardOnSubsumed() { return discardSubsumed; } /** * Returns whether the checkpoint should be discarded when the owning job reaches the {@link * JobStatus#FINISHED} state. * * @return true if the checkpoint should be discarded when the owning job reaches * the {@link JobStatus#FINISHED} state; false otherwise. * @see CompletedCheckpointStore */ boolean discardOnJobFinished() { return discardFinished; } /** * Returns whether the checkpoint should be discarded when the owning job reaches the {@link * JobStatus#CANCELED} state. * * @return true if the checkpoint should be discarded when the owning job reaches * the {@link JobStatus#CANCELED} state; false otherwise. * @see CompletedCheckpointStore */ boolean discardOnJobCancelled() { return discardCancelled; } /** * Returns whether the checkpoint should be discarded when the owning job reaches the {@link * JobStatus#FAILED} state. * * @return true if the checkpoint should be discarded when the owning job reaches * the {@link JobStatus#FAILED} state; false otherwise. * @see CompletedCheckpointStore */ boolean discardOnJobFailed() { return discardFailed; } /** * Returns whether the checkpoint should be discarded when the owning job reaches the {@link * JobStatus#SUSPENDED} state. * * @return true if the checkpoint should be discarded when the owning job reaches * the {@link JobStatus#SUSPENDED} state; false otherwise. * @see CompletedCheckpointStore */ boolean discardOnJobSuspended() { return discardSuspended; } /** Gets the type of the checkpoint (checkpoint / savepoint). */ public SnapshotType getCheckpointType() { return checkpointType; } /** * Returns whether the checkpoint properties describe a standard savepoint. * * @return true if the properties describe a savepoint, false * otherwise. */ public boolean isSavepoint() { return checkpointType.isSavepoint(); } /** * Returns whether the checkpoint properties describe a synchronous savepoint/checkpoint. * * @return true if the properties describe a synchronous operation, false * otherwise. */ public boolean isSynchronous() { return isSavepoint() && ((SavepointType) checkpointType).isSynchronous(); } // ------------------------------------------------------------------------ @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } CheckpointProperties that = (CheckpointProperties) o; return forced == that.forced && checkpointType.equals(that.checkpointType) && discardSubsumed == that.discardSubsumed && discardFinished == that.discardFinished && discardCancelled == that.discardCancelled && discardFailed == that.discardFailed && discardSuspended == that.discardSuspended; } @Override public int hashCode() { int result = (forced ? 1 : 0); result = 31 * result + checkpointType.hashCode(); result = 31 * result + (discardSubsumed ? 1 : 0); result = 31 * result + (discardFinished ? 1 : 0); result = 31 * result + (discardCancelled ? 1 : 0); result = 31 * result + (discardFailed ? 1 : 0); result = 31 * result + (discardSuspended ? 1 : 0); return result; } @Override public String toString() { return "CheckpointProperties{" + "forced=" + forced + ", checkpointType=" + checkpointType + ", discardSubsumed=" + discardSubsumed + ", discardFinished=" + discardFinished + ", discardCancelled=" + discardCancelled + ", discardFailed=" + discardFailed + ", discardSuspended=" + discardSuspended + '}'; } // ------------------------------------------------------------------------ // Factories and pre-configured properties // ------------------------------------------------------------------------ private static final CheckpointProperties CHECKPOINT_NEVER_RETAINED = new CheckpointProperties( false, CheckpointType.CHECKPOINT, true, true, // Delete on success true, // Delete on cancellation true, // Delete on failure true, // Delete on suspension false); private static final CheckpointProperties CHECKPOINT_RETAINED_ON_FAILURE = new CheckpointProperties( false, CheckpointType.CHECKPOINT, true, true, // Delete on success true, // Delete on cancellation false, // Retain on failure true, // Delete on suspension false); private static final CheckpointProperties CHECKPOINT_RETAINED_ON_CANCELLATION = new CheckpointProperties( false, CheckpointType.CHECKPOINT, true, true, // Delete on success false, // Retain on cancellation false, // Retain on failure false, // Retain on suspension false); /** * Creates the checkpoint properties for a (manually triggered) savepoint. * *

Savepoints are not queued due to time trigger limits. They have to be garbage collected * manually. * * @return Checkpoint properties for a (manually triggered) savepoint. */ public static CheckpointProperties forSavepoint( boolean forced, SavepointFormatType formatType) { return new CheckpointProperties( forced, SavepointType.savepoint(formatType), false, false, false, false, false, false); } /** * Creates the checkpoint properties for a snapshot restored in {@link RestoreMode#NO_CLAIM}. * Those properties should not be used when triggering a checkpoint/savepoint. They're useful * when restoring a {@link CompletedCheckpointStore} after a JM failover. * * @return Checkpoint properties for a snapshot restored in {@link RestoreMode#NO_CLAIM}. */ public static CheckpointProperties forUnclaimedSnapshot() { return new CheckpointProperties( false, // unclaimed snapshot is similar to a savepoint // we do not care about the format when restoring, the format is // necessary when triggering a savepoint SavepointType.savepoint(SavepointFormatType.CANONICAL), false, false, false, false, false, true); } public static CheckpointProperties forSyncSavepoint( boolean forced, boolean terminate, SavepointFormatType formatType) { return new CheckpointProperties( forced, terminate ? SavepointType.terminate(formatType) : SavepointType.suspend(formatType), false, false, false, false, false, false); } /** * Creates the checkpoint properties for a checkpoint. * *

Checkpoints may be queued in case too many other checkpoints are currently happening. They * are garbage collected automatically, except when the owning job terminates in state {@link * JobStatus#FAILED}. The user is required to configure the clean up behaviour on job * cancellation. * * @return Checkpoint properties for an external checkpoint. */ public static CheckpointProperties forCheckpoint(CheckpointRetentionPolicy policy) { switch (policy) { case NEVER_RETAIN_AFTER_TERMINATION: return CHECKPOINT_NEVER_RETAINED; case RETAIN_ON_FAILURE: return CHECKPOINT_RETAINED_ON_FAILURE; case RETAIN_ON_CANCELLATION: return CHECKPOINT_RETAINED_ON_CANCELLATION; default: throw new IllegalArgumentException("unknown policy: " + policy); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy