-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
116 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,45 @@ | ||
# Sagas | ||
# Sagas | ||
|
||
Sagas are a protocol for implementing long-running processes. The Saga protocol ensures that a process is atomic, that is, a process executes observably equivalent to completely or not at all. | ||
|
||
## Overview | ||
|
||
The booking saga workflow is responsible for coordinating the booking of a vacation package, consisting of a car, hotel, and flight reservation. In the event of a failure at any point during the booking process, the workflow will trigger compensating actions to undo any previous bookings. | ||
|
||
![](static/booking-saga.png) | ||
|
||
## Running | ||
|
||
Prerequisites: | ||
|
||
- Python >= 3.7 | ||
- [Poetry](https://python-poetry.org) | ||
- [Local Temporal server running](https://docs.temporal.io/application-development/foundations#run-a-development-cluster) | ||
|
||
With this repository cloned, run the following at the root of the directory: | ||
|
||
```bash | ||
poetry install | ||
``` | ||
That loads all required dependencies. | ||
|
||
Then run the worker and workflow. | ||
|
||
```bash | ||
poetry run python run_worker.py | ||
poetry run python run_workflow.py | ||
``` | ||
|
||
![](static/webui_success.png) | ||
![](static/success.gif) | ||
|
||
![](stat/../static/webui_failure.png) | ||
![](static/failure.gif) | ||
|
||
## Design | ||
|
||
The booking saga is implemented using the Temporal Workflow framework, which provides a robust and fault-tolerant platform for coordinating distributed transactions. | ||
|
||
The saga workflow consists of three activities: `book_car()`, `book_hotel)()`, and `book_flight)()`, each of which is responsible for making a reservation with the corresponding service provider. If any of these activities fail, the workflow will trigger the corresponding compensating action (`undo_book_car()`, `undo_book_hotel()`, or `undo_book_flight()`) to undo any previous bookings. | ||
|
||
The `non_retryable_error_types` parameter is used to specify a list of error types that should not be retried when a Workflow or Activity fails. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
# VHS documentation | ||
# | ||
# Output: | ||
# Output <path>.gif Create a GIF output at the given <path> | ||
# Output <path>.mp4 Create an MP4 output at the given <path> | ||
# Output <path>.webm Create a WebM output at the given <path> | ||
# | ||
# Require: | ||
# Require <string> Ensure a program is on the $PATH to proceed | ||
# | ||
# Settings: | ||
# Set FontSize <number> Set the font size of the terminal | ||
# Set FontFamily <string> Set the font family of the terminal | ||
# Set Height <number> Set the height of the terminal | ||
# Set Width <number> Set the width of the terminal | ||
# Set LetterSpacing <float> Set the font letter spacing (tracking) | ||
# Set LineHeight <float> Set the font line height | ||
# Set LoopOffset <float>% Set the starting frame offset for the GIF loop | ||
# Set Theme <json|string> Set the theme of the terminal | ||
# Set Padding <number> Set the padding of the terminal | ||
# Set Framerate <number> Set the framerate of the recording | ||
# Set PlaybackSpeed <float> Set the playback speed of the recording | ||
# | ||
# Sleep: | ||
# Sleep <time> Sleep for a set amount of <time> in seconds | ||
# | ||
# Type: | ||
# Type[@<time>] "<characters>" Type <characters> into the terminal with a | ||
# <time> delay between each character | ||
# | ||
# Keys: | ||
# Backspace[@<time>] [number] Press the Backspace key | ||
# Down[@<time>] [number] Press the Down key | ||
# Enter[@<time>] [number] Press the Enter key | ||
# Space[@<time>] [number] Press the Space key | ||
# Tab[@<time>] [number] Press the Tab key | ||
# Left[@<time>] [number] Press the Left Arrow key | ||
# Right[@<time>] [number] Press the Right Arrow key | ||
# Up[@<time>] [number] Press the Up Arrow key | ||
# Down[@<time>] [number] Press the Down Arrow key | ||
# PageUp[@<time>] [number] Press the Page Up key | ||
# PageDown[@<time>] [number] Press the Page Down key | ||
# Ctrl+<key> Press the Control key + <key> (e.g. Ctrl+C) | ||
# | ||
# Display: | ||
# Hide Hide the subsequent commands from the output | ||
# Show Show the subsequent commands in the output | ||
|
||
Output ../static/success.gif | ||
# Output ../static/failure.gif | ||
|
||
Require echo | ||
|
||
Set Shell "bash" | ||
Set FontSize 32 | ||
Set Width 1200 | ||
Set Height 600 | ||
|
||
Hide | ||
Type "cd ../" Enter | ||
Type "clear" Enter | ||
Show | ||
|
||
|
||
Type "poetry run python run_worker.py" Sleep 500ms Enter | ||
|
||
Sleep 5 | ||
|
||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.