Load a Savepoint from a Custom Location
On this page
Ververica Platform lets you start a deployment from a savepoint stored at any accessible storage location, not only savepoints managed within the platform. Use this when restoring state from an external source, such as a savepoint taken from a Ververica Platform 2 deployment.
Overview
When Specific State is selected in the Start Job dialog, the platform lists deployment-managed savepoints available for restore:

This page covers custom savepoints. For deployment-managed savepoints, see Manage Deployment Snapshots.
Load Using the UI
The deployment must be in a CANCELLED or SUSPENDED state before starting with a custom savepoint path.
- Open the deployment and click
Start(orRestartif the deployment is suspended). - In the Start Job dialog, select
Resume Mode, then selectOther deployment state. - From the dropdown, select
Use absolute pathand enter the full path to the savepoint, for examples3://my-bucket/savepoints/savepoint-abc123. - Click
Start. The deployment transitions toRUNNINGand restores state from the specified path.

The Other deployment state dropdown also offers Use existing Deployment & Savepoint, which lets you select a savepoint from a different deployment and checks state compatibility before restoring.

The Events tab confirms the restore from the custom savepoint path:


Load Using the Kubernetes Operator
The Kubernetes Operator supports loading from a custom savepoint location through the spec.initialSavepointSpec.savepointLocation field. This requires two sequential kubectl apply operations.
Step 1: Register the Savepoint
Apply a CR that sets the deployment state to CANCELLED and includes initialSavepointSpec:
1apiVersion: v3.ververica.platform/v1
2kind: VvpDeployment
3metadata:
4 name: my-deployment
5 namespace: vvp-system
6spec:
7 syncingMode: PATCH
8 initialSavepointSpec:
9 savepointLocation: s3://my-bucket/savepoints/savepoint-abc123
10 deployment:
11 userMetadata:
12 name: my-deployment
13 namespace: default
14 displayName: my-deployment
15 spec:
16 state: CANCELLED
17 deploymentTargetName: my-target
18 template:
19 spec:
20 artifact:
21 jarUri: file:///opt/flink/examples/streaming/MyJob.jar
22 kind: JARWait until the savepoint appears in the deployment's state history with status COMPLETED.
Step 2: Start the Deployment
Apply a second CR with state: RUNNING. Omit initialSavepointSpec in this step:
1apiVersion: v3.ververica.platform/v1
2kind: VvpDeployment
3metadata:
4 name: my-deployment
5 namespace: vvp-system
6spec:
7 syncingMode: PATCH
8 deployment:
9 userMetadata:
10 name: my-deployment
11 namespace: default
12 displayName: my-deployment
13 spec:
14 state: RUNNING
15 deploymentTargetName: my-target
16 template:
17 spec:
18 artifact:
19 jarUri: file:///opt/flink/examples/streaming/MyJob.jar
20 kind: JARThe deployment starts and restores state from the savepoint.
initialSavepointSpec is only applied when the deployment does not yet exist. Remove it from the CR after the deployment is created. If left in place and the deployment is later cancelled and recreated, the operator references the original savepoint again, overwriting any newer savepoints.
restoreStrategy must not be set to NONE. The default value LATEST_STATE is compatible with this approach.
Load Using the API
If you are not using the Kubernetes Operator, you can load a savepoint from a custom location by submitting a job through the REST API and setting restoreStrategy.kind to USER_DEFINED_STATE.
Prerequisites
- You have a savepoint from your Ververica Platform 2 deployment and know its full storage path. For instructions on creating a savepoint, see Savepoints.
- The savepoint path is accessible from the Ververica Platform 3 deployment (same storage backend and authentication).
Submit the Job
Send a POST request to the jobs start endpoint, passing the USER_DEFINED_STATE restore strategy with the savepoint path as statePath:
1curl -X POST 'https://app.ververica.cloud/api/v2/namespaces/{namespace}/jobs:start' \
2 -H 'authorization: Bearer {token}' \
3 -H 'accept: application/json' \
4 -H 'workspace: {workspace-id}' \
5 -H 'Content-Type: application/json' \
6 -d '{
7 "deploymentId": "{deployment-id}",
8 "restoreStrategy": {
9 "kind": "USER_DEFINED_STATE",
10 "statePath": "{savepoint-path}",
11 "allowNonRestoredState": false
12 },
13 "localVariables": []
14 }'Replace {namespace}, {token}, {workspace-id}, {deployment-id}, and {savepoint-path} with your values.
Supported Storage Systems
Custom savepoint paths must use one of the following URI schemes:
The underlying storage backend must be configured and reachable from the cluster. Path format and access permissions are checked at restore time, not when the path is entered.
Example: Migrate State from Ververica Platform 2 to Ververica Platform 3
- In Ververica Platform 2, trigger a savepoint on the running deployment and record the savepoint path (for example, s3://my-bucket/vvp2-jobs/namespaces/ns/jobs/abc123/savepoints/savepoint-xyz).
- In Ververica Platform 3, create a new deployment using an artifact that is compatible with the Ververica Platform 2 job's state schema.
- Load the Ververica Platform 2 savepoint path using either the Kubernetes Operator approach or the API approach described above.
- Start the deployment. It resumes from the state captured in Ververica Platform 2.