diff --git a/docs/experimenter/rollouts.md b/docs/experimenter/rollouts.md new file mode 100644 index 000000000..358471879 --- /dev/null +++ b/docs/experimenter/rollouts.md @@ -0,0 +1,1281 @@ +## Create + +A new rollout which has yet to be sent for review or put into preview is marked for Draft. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + title Draft (Create) + Note over Rollout Owner: An owner is ready to create
a new rollout
and clicks the create button + + rect rgb(255,204,255) + Rollout Owner->>Experimenter UI: Create rollout + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Preview + +A draft rollout that has been validly completed is marked for Preview, is published to the preview collection in Remote Settings, and is then accessible to specially configured clients. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Preview + Note over Rollout Owner: An owner is ready to publish
their draft rollout
to Preview + + rect rgb(255,204,255) + Rollout Owner->>Experimenter UI: Send to Preview + Experimenter UI->>Experimenter Backend: Update to Preview
Status: Preview
Publish status: Idle
Status next:
Phase: None
Phase Next: None + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds all Preview
rollouts. Any Preview
items not in Remote Settings are
created. Any non-Preview items
in RS are deleted. + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Send to Preview + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Create Record
RS status: to-review + Experimenter Worker->>Remote Settings Backend: Delete Record
RS status: to-review + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (approve/approve) + +A draft rollout that has been validly completed is reviewed and approved in Experimenter, is reviewed and approved in Remote Settings, and is then accessible to clients. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Publish (Approve/Approve) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Review button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
approve button + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Approved
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
to publish, and creates the new published
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Draft
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Create Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Waiting
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and approves
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer approves in
Remote Settings + Reviewer->>Remote Settings UI: Approve + Remote Settings UI->>Remote Settings Backend: Approve + Remote Settings Backend->>Remote Settings UI: RS status: to-sign + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
rollout approved
in the RS collection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase 1
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (reject/----) + +A draft rollout that has been validly completed is rejected by a reviewer in Experimenter. A rejection reason is captured in Experimenter and is displayed to the owner in Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Publish (Reject/------) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Launch button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
reject button. + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer rejects in Experimenter + Reviewer->>Experimenter UI: Reject + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (approve/reject) + +A draft rollout that has been validly completed is reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. A rejection reason is captured in Remote Settings and is displayed to the owner in Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Publish (Approve/Reject) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Launch button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
approve button. + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Approved
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
to publish, and creates the new published
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Draft
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Create Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Waiting
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
rollout in
work-in-progress, collects the
rejection message, and rolls back + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: Rollback
RS status: work-in-progress + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (approve/reject) + manual rollback + +A draft rollout that has been validly completed is reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. The reviewer **manually rolls back** the Remote Settings collection. A rejection reason is captured in Remote Settings but is **unable to be recovered by Experimenter** because the collection was manually rolled back **before Experimenter could query its status**, and so Experimenter shows a generic rejection reason. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Publish (Approve/Reject + Manual Rollback) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Launch button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
approve button. + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Approved
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
to publish, and creates the new published
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Draft
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Create Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Waiting
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + Remote Settings UI->>Remote Settings Backend: RS status: to-rollback + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
collection in to-sign with no
record of the rejection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout)
RS status: to-sign + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (approve/timed out) + +A draft rollout that has been validly completed is reviewed and approved in Experimenter, is published to Remote Settings, and the collection is marked for review. Before the reviewer is able to review it in Remote Settings, the scheduled celery task is invoked and finds that the collection is blocked from further changes by having an unattended review pending. It rolls back the pending review to allow other queued changes to be made. This prevents unattended reviews in a collection from blocking other queued changes. The rollout returns to Idle so the owner must request review again. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Publish (Approve/Timeout) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Launch button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
approve button. + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Approved
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
to publish, and creates the new published
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Draft
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Create Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Waiting
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task is
invoked, finds a pending unattended review,
rolls back, and reverts the rollout
back to idle so the owner must request review again + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: RS status: to-rollback + Experimenter Worker->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +%%{init:{'themeCSS':'g:nth-of-type(1) .note { stroke: purple ;fill: white; };'}}%% +``` + +## Launch (cancel) + +When a draft rollout has requested review in Experimenter, the review can also be canceled in Experimenter. The review can only be canceled before it has been reviewed in Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Cancel from Draft (Cancel ------/------) + Note over Rollout Owner: An owner is ready to launch
their draft rollout
from draft and clicks the
Review button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner cancels the review request
in Experimenter + Rollout Owner->>Experimenter UI: Cancel the Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +``` + +This can also be canceled when a rollout is in the Preview state and requests to be launched. When the review is canceled, the Preview rollout is sent back to Draft. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Cancel from Preview (Cancel ------/------) + + Note over Rollout Owner: An owner is ready to publish
their draft rollout
to Preview + + rect rgb(255,204,255) + Rollout Owner->>Experimenter UI: Send to Preview + Experimenter UI->>Experimenter Backend: Update to Preview
Status: Preview
Publish status: Idle
Status next:
Phase: None
Phase Next: None + end + + Note over Rollout Owner: An owner is ready to launch
their rollout
from preview and clicks the
Launch button + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner launches in Experimenter + Rollout Owner->>Experimenter UI: Send to Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Review
Status next: Live
Phase: None
Phase Next: Phase 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner cancels the review request
in Experimenter + Rollout Owner->>Experimenter UI: Cancel the Review + Experimenter UI->>Experimenter Backend: Status: Draft
Publish status: Idle
Status next:
Phase: None
Phase Next: None
+ changelog + end +``` + +## Change Phase (Approve/Approve) + +A live rollout can have its next phase pushed to its state while remaining Live. This phase change must be reviewed in order to be published to the user, following the same flow to be approved in both Experimenter and Remote Settings. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Approve/Approve) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
phase change to publish, and updates the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Update Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and approves
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer approves in
Remote Settings + Reviewer->>Remote Settings UI: Approve + Remote Settings UI->>Remote Settings Backend: Approve + Remote Settings Backend->>Remote Settings UI: RS status: to-sign + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the rollout
approved in the RS collection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X + 1
Phase Next: None
+ changelog + end +``` + +## Change Phase (Reject/------) + +A live rollout phase change is reviewed and rejected in Experimenter. A rejection reason is captured in Experimenter and is displayed to the owner in Experimenter. The rollout remains in its current phase after the rejection. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Reject/------) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
reject button. + + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer rejects in Experimenter + Reviewer->>Experimenter UI: Reject + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Change Phase (Approve/Reject) + +A live rollout phase change is reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. A rejection reason is captured in Remote Settings and is displayed to the owner in Experimenter. The rollout remains in its current phase after the rejection. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Approve/Reject) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
phase change to publish, and updates the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Update Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
rollout in
work-in-progress, collects the
rejection message, and rolls back + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: Rollback
RS status: work-in-progress + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Change Phase (Approve/Reject) + manual rollback + +A live rollout phase change is reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. The reviewer **manually rolls back** the Remote Settings collection. A rejection reason is captured in Remote Settings but is **unable to be recovered by Experimenter** because the collection was manually rolled back **before Experimenter could query its status**, and so Experimenter shows a generic rejection reason. The rollout remains in its current phase after the rejection. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Approve/Reject + Manual Rollback) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
phase change to publish, and updates the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Update Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + Remote Settings UI->>Remote Settings Backend: RS status: to-rollback + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
collection in to-sign with no
record of the rejection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout)
RS status: to-sign + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Change Phase (Approve/Timeout) + +A live rollout phase change is reviewed and approved in Experimenter, is published to Remote Settings, and the collection is marked for review. Before the reviewer is able to review it in Remote Settings, the scheduled celery task is invoked and finds that the collection is blocked from further changes by having an unattended review pending. It rolls back the pending review to allow other queued changes to be made. This prevents unattended reviews in a collection from blocking other queued changes. The rollout returns to Idle, remains in its current phase, and the owner must request review again. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Approve/Timeout) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
phase change to publish, and updates the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Update Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Note over Experimenter Backend: The scheduled background task is
invoked, finds a pending unattended review,
rolls back, and reverts the rollout
back to idle so the owner must request review again + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: RS status: to-rollback + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Change Phase (Cancel ------/------) + +A live rollout phase change can be requested while the rollout remains Live. These phase changes must be reviewed in order to be published to the user, following the same flow to be approved in both Experimenter and Remote Settings. Like the publish flow, these reviews can be canceled from Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Update (Cancel ------/------) + + Note over Rollout Owner: An owner is ready to start
the next phase of their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner requests the next phase in Experimenter + Rollout Owner->>Experimenter UI: Start Next Phase + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: Phase X + 1
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner cancels the review request
in Experimenter + Rollout Owner->>Experimenter UI: Cancel the Review + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Approve/Approve) + +A live rollout that is published in Remote Settings is requested to be disabled by the owner, reviewed and approved in Experimenter, reviewed and approved in Remote Settings, is unpublished from the collection, and is then no longer accessible by clients. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Approve/Approve) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
disable request and unpublishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Disabled + Note over Experimenter Worker: Worker unpublishes from
Remote Settings + Experimenter Worker->>Remote Settings Backend: Unpublish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and approves
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer approves in
Remote Settings + Reviewer->>Remote Settings UI: Approve + Remote Settings UI->>Remote Settings Backend: Approve + Remote Settings Backend->>Remote Settings UI: RS status: to-sign + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the rollout
approved in the RS collection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Reject/------) + +A live rollout that is published in Remote Settings is requested to be disabled by the owner, and is then reviewed and rejected in Experimenter. A rejection reason is captured in Experimenter and is displayed to the owner in Experimenter. No change is made to Remote Settings and the rollout remains published. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Reject/------) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
reject button. + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer rejects in Experimenter + Reviewer->>Experimenter UI: Reject + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Approve/Reject) + +A live rollout that is published in Remote Settings is requested to be disabled by the owner, reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. No change is made to Remote Settings and clients will continue to access the published rollout. A rejection reason is captured in Remote Settings and is displayed to the owner in Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Approve/Reject) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
disable request and unpublishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Disabled + Note over Experimenter Worker: Worker unpublishes from
Remote Settings + Experimenter Worker->>Remote Settings Backend: Unpublish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
rollout in
work-in-progress, collects the
rejection message, and rolls back + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: Rollback
RS status: work-in-progress + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Approve/Reject) + manual rollback + +A live rollout that is published in Remote Settings is requested to be disabled by the owner, reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. The reviewer **manually rolls back** the Remote Settings collection. A rejection reason is captured in Remote Settings but is **unable to be recovered by Experimenter** because the collection was manually rolled back **before Experimenter could query its status**, and so Experimenter shows a generic rejection reason. No change is made to Remote Settings and the rollout remains published. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Approve/Reject + Manual Rollback) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
disable request and unpublishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Disabled + Note over Experimenter Worker: Worker unpublishes from
Remote Settings + Experimenter Worker->>Remote Settings Backend: Unpublish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + Remote Settings UI->>Remote Settings Backend: RS status: to-rollback + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
collection in to-sign with no
record of the rejection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout)
RS status: to-sign + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Approve/Timeout) + +A live rollout that is published in Remote Settings is requested to be disabled by the owner, reviewed and approved in Experimenter, and the unpublish change is pushed to Remote Settings. Before the reviewer is able to review it in Remote Settings, the scheduled celery task is invoked and finds that the collection is blocked from further changes by having an unattended review pending. It rolls back the pending review to allow other queued changes to be made. This prevents unattended reviews in a collection from blocking other queued changes. The rollout remains published in Remote Settings, returns to Idle, and the owner must request review again. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Approve/Timeout) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Approved
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
disable request and unpublishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Live
Publish status: Approved
Status next: Disabled + Note over Experimenter Worker: Worker unpublishes from
Remote Settings + Experimenter Worker->>Remote Settings Backend: Unpublish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Waiting
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task is
invoked, finds a pending unattended review,
rolls back, and reverts the rollout
back to idle so the owner must request review again + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: RS status: to-rollback + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Disable (Cancel ------/------) + +A live rollout that is published in Remote Settings is requested to be disabled by the owner. The disable request can be canceled before it is approved in Experimenter. No change is made to Remote Settings and the rollout remains published. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Disable (Cancel ------/------) + + Note over Rollout Owner: An owner is ready to disable
their live rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner disables in Experimenter + Rollout Owner->>Experimenter UI: Disable + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Review
Status next: Disabled
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner cancels the review request
in Experimenter + Rollout Owner->>Experimenter UI: Cancel the Review + Experimenter UI->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Approve/Approve) + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner, reviewed and approved in Experimenter, reviewed and approved in Remote Settings, is published to the collection, and is then accessible to clients. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Approve/Approve) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
enable request and publishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Disabled
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Publish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and approves
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer approves in
Remote Settings + Reviewer->>Remote Settings UI: Approve + Remote Settings UI->>Remote Settings Backend: Approve + Remote Settings Backend->>Remote Settings UI: RS status: to-sign + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the rollout
approved in the RS collection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Experimenter Backend: Status: Live
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Reject/------) + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner, and is then reviewed and rejected in Experimenter. A rejection reason is captured in Experimenter and is displayed to the owner in Experimenter. No change is made to Remote Settings and the rollout remains unpublished. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Reject/------) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the
rollout's details on the
summary page and clicks the
reject button. + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer rejects in Experimenter + Reviewer->>Experimenter UI: Reject + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Approve/Reject) + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner, reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. No change is made to Remote Settings and the rollout remains unpublished. A rejection reason is captured in Remote Settings and is displayed to the owner in Experimenter. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Approve/Reject) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
enable request and publishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Disabled
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Publish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
rollout in
work-in-progress, collects the
rejection message, and rolls back + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: Rollback
RS status: work-in-progress + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Approve/Reject) + manual rollback + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner, reviewed and approved in Experimenter, and is then reviewed and rejected in Remote Settings. The reviewer **manually rolls back** the Remote Settings collection. A rejection reason is captured in Remote Settings but is **unable to be recovered by Experimenter** because the collection was manually rolled back **before Experimenter could query its status**, and so Experimenter shows a generic rejection reason. No change is made to Remote Settings and the rollout remains unpublished. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Approve/Reject + Manual Rollback) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
enable request and publishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Disabled
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Publish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review in Remote Settings + + Note over Reviewer: The reviewer opens Remote
Settings and rejects
the change in the collection. + + rect rgb(255,255,204) + Note right of Reviewer: Reviewer rejects in
Remote Settings + Reviewer->>Remote Settings UI: Reject + Remote Settings UI->>Remote Settings Backend: RS status: to-rollback + end + + Note over Experimenter Backend: The scheduled background task
is invoked and finds the
collection in to-sign with no
record of the rejection + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout)
RS status: to-sign + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Approve/Timeout) + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner, reviewed and approved in Experimenter, and the publish change is pushed to Remote Settings. Before the reviewer is able to review it in Remote Settings, the scheduled celery task is invoked and finds that the collection is blocked from further changes by having an unattended review pending. It rolls back the pending review to allow other queued changes to be made. This prevents unattended reviews in a collection from blocking other queued changes. The rollout remains unpublished in Remote Settings, returns to Idle, and the owner must request review again. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Approve/Timeout) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + Note over Reviewer: The reviewer reviews the rollout's
details on the summary page
and clicks the approve button + + rect rgb(255,255,204) + Note over Rollout Owner: Reviewer approves in Experimenter + Reviewer->>Experimenter UI: Approve + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Approved
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task
is invoked, finds an approved rollout
enable request and publishes the
record with the serialized DTO + + rect rgb(204,255,255) + Experimenter Backend->>Experimenter Worker: Find rollouts:
Status: Disabled
Publish status: Approved
Status next: Live + Note over Experimenter Worker: Worker publishes to
Remote Settings + Experimenter Worker->>Remote Settings Backend: Publish Record
RS status: to-review + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Waiting
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Note over Experimenter Backend: The scheduled background task is
invoked, finds a pending unattended review,
rolls back, and reverts the rollout
back to idle so the owner must request review again + + rect rgb(204,255,255) + Note over Experimenter Worker: Worker updates
rollout + Experimenter Worker->>Remote Settings Backend: Check collection (timeout) + Experimenter Worker->>Remote Settings Backend: RS status: to-rollback + Experimenter Worker->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +``` + +## Enable (Cancel ------/------) + +A disabled rollout that is not published in Remote Settings is requested to be enabled by the owner. The enable request can be canceled before it is approved in Experimenter. No change is made to Remote Settings and the rollout remains unpublished. + +```mermaid + sequenceDiagram + participant Reviewer + participant Rollout Owner + participant Experimenter UI + participant Experimenter Backend + participant Experimenter Worker + participant Remote Settings UI + participant Remote Settings Backend + title Enable (Cancel ------/------) + + Note over Rollout Owner: An owner is ready to enable
their disabled rollout + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner enables in Experimenter + Rollout Owner->>Experimenter UI: Enable + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Review
Status next: Live
Phase: Phase X
Phase Next: None
+ changelog + end + + Experimenter Backend-->>Reviewer: To review + + rect rgb(255,204,255) + Note right of Rollout Owner: Owner cancels the review request
in Experimenter + Rollout Owner->>Experimenter UI: Cancel the Review + Experimenter UI->>Experimenter Backend: Status: Disabled
Publish status: Idle
Status next:
Phase: Phase X
Phase Next: None
+ changelog + end +```