Skip to content

Commit ea7eaa8

Browse files
committed
Use sentence casing in headings
1 parent 241c2ea commit ea7eaa8

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

articles/azure-functions/durable/durable-functions-orchestration-versioning.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Understanding this distinction is crucial for orchestration versioning, where th
3737
- **Minimal configuration**: Built-in feature requiring only basic `host.json` configuration.
3838
- **Backend agnostic**: Feature can be used by apps leveraging any of the Durable Function's [storage backends](durable-functions-storage-providers.md).
3939

40-
### How It Works
40+
### How it works
4141

4242
The Orchestration Versioning feature operates on these core principles:
4343

@@ -57,7 +57,7 @@ The Orchestration Versioning feature operates on these core principles:
5757

5858
The most common use case for Orchestration Versioning is when you need to make breaking changes to your orchestrator logic while keeping existing in-flight orchestration instances running with their original version. All you need to do is update the `defaultVersion` in your `host.json` and modify your orchestrator code to check the orchestration version and branch execution accordingly. Let's walk through the required steps.
5959

60-
### Step 1: defaultVersion Configuration
60+
### Step 1: defaultVersion configuration
6161

6262
To configure the default version for your orchestrations, you need to add or update the `defaultVersion` setting in the `host.json` file in your Azure Functions project:
6363

@@ -79,7 +79,7 @@ The version string can follow any format that suits your versioning strategy:
7979

8080
After you set the `defaultVersion`, all new orchestration instances will be permanently associated with that version.
8181

82-
### Step 2: Orchestrator Function Logic
82+
### Step 2: Orchestrator function logic
8383

8484
To implement version-aware logic in your orchestrator function, you can use the context parameter passed to the orchestrator to access the current orchestration instance's version, which allows you to branch your orchestrator logic based on the version.
8585

@@ -118,7 +118,7 @@ public static async Task<string> RunOrchestrator(
118118
> [!TIP]
119119
> Depending on your situation, you may prefer branching on different levels. You can make a local change precisely where this change is required, like the example shows. Alternatively, you can branch at a higher level, even at the entire orchestrator implementation level, which introduces some code duplication, but may keep the execution flow clear. It's up to you to choose the approach that best fits your scenario and coding style.
120120
121-
### What Happens After Deployment
121+
### What happens after deployment
122122

123123
Here's what to expect once you deploy your updated orchestrator function with the new version logic:
124124

@@ -136,7 +136,7 @@ Here's what to expect once you deploy your updated orchestrator function with th
136136
> [!NOTE]
137137
> The behavior described in this section targets the most common situations, and this is what the default configuration provides. However, it can be modified if needed (see [Advanced usage](#advanced-usage) for details).
138138
139-
### Example: Replacing an Activity in the Sequence
139+
### Example: Replacing an activity in the sequence
140140

141141
This example shows how to replace one activity with a different activity in the middle of a sequence using Orchestration Versioning.
142142

@@ -227,7 +227,7 @@ For more sophisticated versioning scenarios, you can configure other settings to
227227
> [!TIP]
228228
> Use the default configuration (`CurrentOrOlder` with `Reject`) for most scenarios to enable safe rolling deployments while preserving orchestration state during version transitions. We recommend proceeding with the advanced configuration only if you have specific requirements that can't be met with the default behavior.
229229
230-
### Version Matching
230+
### Version matching
231231

232232
The `versionMatchStrategy` setting determines how the runtime matches orchestration versions when loading orchestrator functions. It controls which orchestration instances a worker can process based on version compatibility.
233233

@@ -260,7 +260,7 @@ When the `CurrentOrOlder` strategy is selected, the runtime compares the orchest
260260
3. If both versions can be parsed as `System.Version`, semantic comparison is used.
261261
4. Otherwise, case-insensitive string comparison is performed.
262262

263-
### Version Mismatch Handling
263+
### Version mismatch handling
264264

265265
The `versionFailureStrategy` setting determines what happens when an orchestration instance version doesn't match the current `defaultVersion`.
266266

@@ -282,7 +282,7 @@ The `versionFailureStrategy` setting determines what happens when an orchestrati
282282

283283
- **`Fail`**: Fail the orchestration. This strategy immediately terminates the orchestration instance with a failure state, which may be appropriate in scenarios where version mismatches indicate serious deployment issues.
284284

285-
### Starting New Orchestrations with Specific Versions
285+
### Starting new orchestrations with specific versions
286286

287287
By default, all new orchestration instances are created with the current `defaultVersion` specified in your `host.json` configuration. However, you may have scenarios where you need to create orchestrations with a specific version, even if it differs from the current default.
288288

@@ -319,7 +319,7 @@ public static async Task<HttpResponseData> HttpStart(
319319
> [!NOTE]
320320
> When you specify a version explicitly during orchestration creation, that version takes precedence over the `defaultVersion` in `host.json`. The orchestration instance will be permanently associated with the specified version, regardless of any future changes to the default version.
321321
322-
### Removing Legacy Code Paths
322+
### Removing legacy code paths
323323

324324
Over time, you may want to remove legacy code paths from your orchestrator functions to simplify maintenance and reduce technical debt. However, removing code must be done carefully to avoid breaking existing orchestration instances.
325325

@@ -340,27 +340,27 @@ Over time, you may want to remove legacy code paths from your orchestrator funct
340340
341341
## Best practices
342342

343-
### Version Management
343+
### Version management
344344

345345
1. **Use semantic versioning**: Adopt a consistent versioning scheme like `major.minor.patch`.
346346
1. **Document breaking changes**: Clearly document what changes require a new version.
347347
1. **Plan version lifecycle**: Define when to remove legacy code paths.
348348

349-
### Code Organization
349+
### Code organization
350350

351351
1. **Separate version logic**: Use clear branching or separate methods for different versions.
352352
1. **Preserve determinism**: Never modify existing version logic once deployed.
353353
1. **Test thoroughly**: Test all version paths, especially during transitions.
354354

355-
### Monitoring and Observability
355+
### Monitoring and observability
356356

357357
1. **Log version information**: Include version in your logging for easier debugging.
358358
1. **Monitor version distribution**: Track which versions are actively running.
359359
1. **Set up alerts**: Monitor for any version-related errors.
360360

361361
## Troubleshooting
362362

363-
### Common Issues
363+
### Common issues
364364

365365
- **Issue**: Orchestration instances created with version 1.0 are failing after deploying version 2.0
366366
- **Solution**: Ensure the version 1.0 code path in your orchestrator remains exactly the same. Any changes to the execution sequence may break deterministic replay.

0 commit comments

Comments
 (0)