Files
antigravity-skills-reference/skills/dbos-python/references/advanced-versioning.md
Max dml 7e5abd504f feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building
reliable, fault-tolerant applications with durable workflows.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:26:51 +01:00

67 lines
1.6 KiB
Markdown

---
title: Use Versioning for Blue-Green Deployments
impact: LOW
impactDescription: Safely deploy new code with version tagging
tags: versioning, blue-green, deployment, recovery
---
## Use Versioning for Blue-Green Deployments
DBOS versions workflows to prevent unsafe recovery. Use blue-green deployments to safely upgrade.
**Incorrect (deploying breaking changes without versioning):**
```python
# Deploying new code directly kills in-progress workflows
# because their checkpoints don't match the new code
# Old code
@DBOS.workflow()
def workflow():
step_a()
step_b()
# New code replaces old immediately - breaks recovery!
@DBOS.workflow()
def workflow():
step_a()
step_c() # Changed step - old workflows can't recover
```
**Correct (using versioning with blue-green deployment):**
```python
# Set explicit version in config
config: DBOSConfig = {
"name": "my-app",
"application_version": "2.0.0", # New version
}
DBOS(config=config)
# Deploy new version alongside old version
# New traffic goes to v2.0.0, old workflows drain on v1.0.0
# Check for remaining old workflows before retiring v1.0.0
old_workflows = DBOS.list_workflows(
app_version="1.0.0",
status=["PENDING", "ENQUEUED"]
)
if len(old_workflows) == 0:
# Safe to retire old version
pass
```
Fork a workflow to run on a new version:
```python
# Fork workflow from step 5 on version 2.0.0
new_handle = DBOS.fork_workflow(
workflow_id="old-workflow-id",
start_step=5,
application_version="2.0.0"
)
```
Reference: [Versioning](https://docs.dbos.dev/python/tutorials/upgrading-workflows#versioning)