A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/ below:

Durable Objects migrations · Cloudflare Durable Objects docs

A migration is a mapping process from a class name to a runtime state. This process communicates the changes to the Workers runtime and provides the runtime with instructions on how to deal with those changes.

To apply a migration, you need to:

  1. Edit your wrangler.toml / wrangler.json file, as explained below.
  2. Re-deploy your Worker using npx wrangler deploy.

You must initiate a migration process when you:

Note

Updating the code for an existing Durable Object class does not require a migration. To update the code for an existing Durable Object class, run npx wrangler deploy. This is true even for changes to how the code interacts with persistent storage. Because of global uniqueness, you do not have to be concerned about old and new code interacting with the same storage simultaneously. However, it is your responsibility to ensure that the new code is backwards compatible with existing stored data.

The most common migration performed is a new class migration, which informs the runtime that a new Durable Object class is being uploaded. This is also the migration you need when creating your first Durable Object class.

To apply a Create migration:

  1. Add the following lines to your wrangler.toml / wrangler.json file:

    {

    "migrations": [

    {

    "tag": "<v1>",

    "new_sqlite_classes": [

    "<NewDurableObjectClass>"

    ]

    }

    ]

    }

    [[migrations]]

    tag = "<v1>" # Migration identifier. This should be unique for each migration entry

    new_sqlite_classes = ["<NewDurableObjectClass>"] # Array of new classes

    # For SQLite storage backend use new_sqlite_classes=["<NewDurableObjectClass>"] instead

    The Create migration contains:

  2. Ensure you reference the correct name of the Durable Object class in your Worker code.

  3. Deploy the Worker.

Create migration example

To create a new Durable Object binding DURABLE_OBJECT_A, your wrangler.toml / wrangler.json file should look like the following:

{

"durable_objects": {

"bindings": [

{

"name": "DURABLE_OBJECT_A",

"class_name": "DurableObjectAClass"

}

]

},

"migrations": [

{

"tag": "v1",

"new_sqlite_classes": [

"DurableObjectAClass"

]

}

]

}

# Creating a new Durable Object class

[[durable_objects.bindings]]

name = "DURABLE_OBJECT_A"

class_name = "DurableObjectAClass"

# Add the lines below for a Create migration.

[[migrations]]

tag = "v1"

new_sqlite_classes = ["DurableObjectAClass"]

Create Durable Object class with key-value storage

Recommended SQLite-backed Durable Objects

Cloudflare recommends all new Durable Object namespaces use the SQLite storage backend. These Durable Objects can continue to use storage key-value API.

Additionally, SQLite-backed Durable Objects allow you to store more types of data (such as tables), and offers Point In Time Recovery API which can restore a Durable Object's embedded SQLite database contents (both SQL data and key-value data) to any point in the past 30 days.

The key-value storage backend remains for backwards compatibility, and a migration path from KV storage backend to SQLite storage backend for existing Durable Object namespaces will be available in the future.

Use new_classes on the migration in your Worker's Wrangler file to create a Durable Object class with the key-value storage backend:

{

"migrations": [

{

"tag": "v1",

"new_classes": [

"MyDurableObject"

]

}

]

}

[[migrations]]

tag = "v1" # Should be unique for each entry

new_classes = ["MyDurableObject"] # Array of new classes

Note

Durable Objects are available both on Workers Free and Workers Paid plans.

If you wish to downgrade from a Workers Paid plan to a Workers Free plan, you must first ensure that you have deleted all Durable Object namespaces with the key-value storage backend.

Running a Delete migration will delete all Durable Objects associated with the deleted class, including all of their stored data.

To apply a Delete migration:

  1. Remove the binding for the class you wish to delete from the wrangler.toml / wrangler.json file.

  2. Remove references for the class you wish to delete from your Worker code.

  3. Add the following lines to your wrangler.toml / wrangler.json file.

    {

    "migrations": [

    {

    "tag": "<v2>",

    "deleted_classes": [

    "<ClassToDelete>"

    ]

    }

    ]

    }

    [[migrations]]

    tag = "<v2>" # Migration identifier. This should be unique for each migration entry

    deleted_classes = ["<ClassToDelete>"] # Array of deleted class names

    The Delete migration contains:

  4. Deploy the Worker.

Delete migration example

To delete a Durable Object binding DEPRECATED_OBJECT, your wrangler.toml / wrangler.json file should look like the following:

{

"migrations": [

{

"tag": "v3",

"deleted_classes": [

"DeprecatedObjectClass"

]

}

]

}

# Remove the binding for the DeprecatedObjectClass DO

#[[durable_objects.bindings]]

#name = "DEPRECATED_OBJECT"

#class_name = "DeprecatedObjectClass"

[[migrations]]

tag = "v3" # Should be unique for each entry

deleted_classes = ["DeprecatedObjectClass"] # Array of deleted classes

Rename migrations are used to transfer stored Durable Objects between two Durable Object classes in the same Worker code file.

To apply a Rename migration:

  1. Update the previous class name to the new class name by editing your wrangler.toml / wrangler.json file in the following way:

    {

    "durable_objects": {

    "bindings": [

    {

    "name": "<MY_DURABLE_OBJECT>",

    "class_name": "<UpdatedDurableObject>"

    }

    ]

    },

    "migrations": [

    {

    "tag": "<v3>",

    "renamed_classes": [

    {

    "from": "<OldDurableObject>",

    "to": "<UpdatedDurableObject>"

    }

    ]

    }

    ]

    }

    [[durable_objects.bindings]]

    name = "<MY_DURABLE_OBJECT>"

    class_name = "<UpdatedDurableObject>" # Update the class name to the new class name

    [[migrations]]

    tag = "<v3>" # Migration identifier. This should be unique for each migration entry

    renamed_classes = [{from = "<OldDurableObject>", to = "<UpdatedDurableObject>" }] # Array of rename directives

    The Rename migration contains:

  2. Reference the new Durable Object class name in your Worker code.

  3. Deploy the Worker.

Rename migration example

To rename a Durable Object class, from OldName to UpdatedName, your wrangler.toml / wrangler.json file should look like the following:

{

"durable_objects": {

"bindings": [

{

"name": "MY_DURABLE_OBJECT",

"class_name": "UpdatedName"

}

]

},

"migrations": [

{

"tag": "v3",

"renamed_classes": [

{

"from": "OldName",

"to": "UpdatedName"

}

]

}

]

}

# Before deleting the `DeprecatedClass` remove the binding for the `DeprecatedClass`.

# Update the binding for the `DurableObjectExample` to the new class name `UpdatedName`.

[[durable_objects.bindings]]

name = "MY_DURABLE_OBJECT"

class_name = "UpdatedName"

# Renaming classes

[[migrations]]

tag = "v3"

renamed_classes = [{from = "OldName", to = "UpdatedName" }] # Array of rename directives

Transfer migrations are used to transfer stored Durable Objects between two Durable Object classes in different Worker code files.

If you want to transfer stored Durable Objects between two Durable Object classes in the same Worker code file, use Rename migrations instead.

Note

Do not run a Create migration for the destination class before running a Transfer migration. The Transfer migration will create the destination class for you.

To apply a Transfer migration:

  1. Edit your wrangler.toml / wrangler.json file in the following way:

    {

    "durable_objects": {

    "bindings": [

    {

    "name": "<MY_DURABLE_OBJECT>",

    "class_name": "<DestinationDurableObjectClass>"

    }

    ]

    },

    "migrations": [

    {

    "tag": "<v4>",

    "transferred_classes": [

    {

    "from": "<SourceDurableObjectClass>",

    "from_script": "<SourceWorkerScript>",

    "to": "<DestinationDurableObjectClass>"

    }

    ]

    }

    ]

    }

    [[durable_objects.bindings]]

    name = "<MY_DURABLE_OBJECT>"

    class_name = "<DestinationDurableObjectClass>"

    [[migrations]]

    tag = "<v4>" # Migration identifier. This should be unique for each migration entry

    transferred_classes = [{from = "<SourceDurableObjectClass>", from_script = "<SourceWorkerScript>", to = "<DestinationDurableObjectClass>" }]

    The Transfer migration contains:

  2. Ensure you reference the name of the new, destination Durable Object class in your Worker code.

  3. Deploy the Worker.

Transfer migration example

You can transfer stored Durable Objects from DurableObjectExample to TransferredClass from a Worker script named OldWorkerScript. The configuration of the wrangler.toml / wrangler.json file for your new Worker code (destination Worker code) would look like this:

{

"durable_objects": {

"bindings": [

{

"name": "MY_DURABLE_OBJECT",

"class_name": "TransferredClass"

}

]

},

"migrations": [

{

"tag": "v4",

"transferred_classes": [

{

"from": "DurableObjectExample",

"from_script": "OldWorkerScript",

"to": "TransferredClass"

}

]

}

]

}

# destination worker

[[durable_objects.bindings]]

name = "MY_DURABLE_OBJECT"

class_name = "TransferredClass"

# Transferring class

[[migrations]]

tag = "v4"

transferred_classes = [{from = "DurableObjectExample", from_script = "OldWorkerScript", to = "TransferredClass" }]

Migration Wrangler configuration

Important

Note

Note that .toml files do not allow line breaks in inline tables (the {key = "value"} syntax), but line breaks in the surrounding inline array are acceptable.

You cannot enable a SQLite storage backend on an existing, deployed Durable Object class, so setting new_sqlite_classes on later migrations will fail with an error. Automatic migration of deployed classes from their key-value storage backend to SQLite storage backend will be available in the future.

Important

Durable Object migrations are atomic operations and cannot be gradually deployed. To provide early feedback to developers, new Worker versions with new migrations cannot be uploaded. Refer to Gradual deployments for Durable Objects for more information.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4