[ 
https://issues.apache.org/jira/browse/FLINK-5823?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16313670#comment-16313670
 ] 

ASF GitHub Bot commented on FLINK-5823:
---------------------------------------

GitHub user StephanEwen opened a pull request:

    https://github.com/apache/flink/pull/5248

    [FLINK-5823] [checkpoints] State backends now also handle the checkpoint 
metadata

    ## What is the purpose of the change
    
    This pull requests puts the State Backends in charge of persisting the 
metadata.
    This has the following advantages:
    
      - Checkpoints become conceptually independent of File Systems. We can in 
the future implement state backends purely backed by non-file systems like 
databases or message queues.
      
      - We can simplify or drop the extra code paths implemented for 
externalized checkpoints and checkpoint metadata persisting in HA cases.
    
      - The checkpoint and savepoint configurations go purely through the state 
backends, making testing much simpler.
      
      - Because the configuration go through the state backends only, it is 
simple to let the state backends pick up a mix of configuration from the 
application code (in code config) and configuration from the cluster setup. For 
example, a programmer can pick the state backend, and the cluster can have 
default limits or checkpoint directories configured. To support that, state 
backends may implement an additional interface which lets them pick up 
configuration values from the cluster configuration.
    
      - As a followup, this will allow us to implement more efficient ways of 
dropping checkpoint state (recursive directory delete) as well as logic to 
scavenge left-over checkpoint data.
    
    ## Altered user-facing Behavior
    
      - All checkpoints are always "externalized", meaning that the metadata is 
always persisted. The notion of externalized checkpoints is dropped.
      
      - Checkpoints have no "externalization setting", but a **retention 
policy**, like
         - `RETAIN_ON_CANCELLATION`: Keep checkpoints when user manually 
cancels job, similar as the corresponding setting for externalized checkpoints
         - `RETAIN_ON_FAILURE`: Retain when the job reaches a terminal failure. 
For compatibility, this is automatically picked when the user calls the now 
deprecated method to activate externalized checkpoints.
         - `NEVER_RETAIN_AFTER_TERMINATION`: Conceptually similar to the 
behavior when no externalized checkpoints were configured.
    
      - The `MemoryStateBackend` is viewed as a FileSystem-based State Backend 
that does not create separate files for state, but just holds state inline with 
the checkpoint metadata. In the Metadata and Savepoint handling, there is no 
distinction between the `MemoryStateBackend` and the `FsStateBackend`.
         - As a special case, the MemoryStateBackend may choose to not durably 
persist the metadata (when no storage location is configured, by default), in 
which case it will not be able to support an HA mode (there is an eager check 
for that). That is merely there to support no-config getting started 
experiences and simpler in-IDE development setups.
    
    ## Followup work
    
    To make sure there is no extra persisting of the checkpoint metadata by the 
HA store (it simply references the regular persisted checkpoint metadata) we 
need some changes to the `ZooKeeperCompletedCheckpointStore`.
    
    Once we start storing shared checkpoint state (incremental checkpoints) and 
task-owned state (write-ahead sinks) in different locations, we can start 
optimizing checkpoint directory cleanup, and can start implementing scavengers 
for left-over state.
    
    ## Brief change log
    
      - The state backends introduce the concept of a `CheckpointStorage` 
(storage of bytes) and `CheckpointStorageLocation` (specific location for the 
bytes of a checkpoint/savepoint). That makes the separation of concerns in the 
state backend clear: `KeyedStateBackend` and `OperatorStatebackend` define how 
to hold and checkpoint the state, while `CheckpointStorage` defines how to 
persist bytes (data and metadata).
      
      - The `CheckpointStorage` is responsible for storing the checkpoint 
metadata. There is no implicit assumption that the checkpoint metadata is 
stored in a file systems any more.
      
      - All checkpoint directory / savepoint directory specific config settings 
are now part of the state backends. The Checkpoint Coordinator simply calls the 
relevant methods on the state backends to store metadata.
    
      - All checkpoints are addressable via a "pointer", which is interpreted 
by the state backend to find the checkpoint. For File-system based 
statebackends (all statebackends in Flink currently), this pointer is the file 
path.
      
    ## Verifying this change
    
    This change adds and adjusts many existing tests to verify the behavior.
    
    Manual verification can happen by just starting a regular Flink cluster, 
enabling checkpoints, and seeing that metadata files get persisted always.
    
    ## Does this pull request potentially affect one of the following parts:
    
      - Dependencies (does it add or upgrade a dependency): (yes / **no**)
      - The public API, i.e., is any changed class annotated with 
`@Public(Evolving)`: (**yes** / no)
      - The serializers: (yes / **no** / don't know)
      - The runtime per-record code paths (performance sensitive): (yes / 
**no** / don't know)
      - Anything that affects deployment or recovery: JobManager (and its 
components), Checkpointing, Yarn/Mesos, ZooKeeper: (**yes** / no / don't know)
      - The S3 file system connector: (yes / **no** / don't know)
    
    ## Documentation
    
      - Does this pull request introduce a new feature? Kind of, it removes teh 
concept of externalized checkpoints.
      - If yes, how is the feature documented? Not documented, yet. If 
approved, will add docs as part of the next steps.


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/StephanEwen/incubator-flink backend2

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/flink/pull/5248.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #5248
    
----
commit dfdfb7e9bba925035dcf7eecffddbdf341b90f7e
Author: Stephan Ewen <sewen@...>
Date:   2017-10-25T11:23:46Z

    [FLINK-5823] [checkpoints] Pass state backend to checkpoint coordinator

commit a47bdd2b9d8cc8c62b47b2ffec5c418e038f7c20
Author: Stephan Ewen <sewen@...>
Date:   2017-10-25T15:30:14Z

    [FLINK-7925] [checkpoints] Add CheckpointingOptions
    
    The CheckpointingOptions consolidate all checkpointing and state 
backend-related
    settings that were previously split across different classes.

commit a550e115be1616587c19d7c21225ed1467801ddf
Author: Stephan Ewen <sewen@...>
Date:   2017-10-25T15:32:17Z

    [hotfix] [core] Fix broken JavaDoc links in ConfigConstants

commit b94a261fed8233a9f7adbaf2a813e1953c9a1a28
Author: Stephan Ewen <sewen@...>
Date:   2017-10-25T17:04:10Z

    [FLINK-5823] [checkpoints] State backends define checkpoint and savepoint 
directories, improved configuration

commit 712d5b962bffeef1ec3f5a803ceb08d6409fe12e
Author: Stephan Ewen <sewen@...>
Date:   2017-10-26T12:55:28Z

    [hotfix] [rocksdb] Clean up RocksDB state backend code
    
      - arrange variables to properly express configuration (client side) 
versus runtime (task manager side)
      - make all runtime-only fields properly transient
      - fix confusing variable name for local directories

commit a7510cf56c259ba0daa1230be27e34040004d413
Author: Stephan Ewen <sewen@...>
Date:   2017-10-26T13:43:23Z

    [FLINK-5823] [checkpoints] Make RocksDB state backend configurable

commit ef5bd0c7ef3825607274ff78aa9e0ac8159828b5
Author: Stephan Ewen <sewen@...>
Date:   2017-10-26T19:26:00Z

    [FLINK-5823] [checkpoints] State backends now also handle the checkpoint 
metadata

----


> Store Checkpoint Root Metadata in StateBackend (not in HA custom store)
> -----------------------------------------------------------------------
>
>                 Key: FLINK-5823
>                 URL: https://issues.apache.org/jira/browse/FLINK-5823
>             Project: Flink
>          Issue Type: Sub-task
>          Components: State Backends, Checkpointing
>            Reporter: Stephan Ewen
>            Assignee: Stephan Ewen
>            Priority: Blocker
>             Fix For: 1.5.0
>
>




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to