はじめに
NSOは、ユーザーからリクエストを受けると、トランザクションと呼ばれる論理単位で一連の処理を実行します。トランザクションは、全ての対象デバイス及び CDB に対し、一貫性やアトミック性等を提供します。本記事は、トランザクションの処理の概要を、図を使用し紹介します。
トランザクションが実行される順序
変更が Commit されると、次のような順序で処理が実行されます。

ユーザー側からみたイメージ

ユーザーからみた変更の適用
1. (オペレーターがログインし) セッション開始
2. (オペレーターが) 変更を入力
3. (オペレーターが) "commit"を送信し変更の適用をリクエストする
4. NSO は Fail か Success の何れかの結果を返す
トランザクション: Lock から Prepare まで

Transaction Lock が取得されると、transaction hook を開始します。ここでは、現行モデルやサービスインスタンスを基に変更を計算していきます。計算の結果、トランザクションの内容は更新されます。また、validation では、生成した変更が適用可能か検証します。

Prepare では変更が書き込まれますが、まだ適用されません。ここでは更に、southbound diff が生成され、NEDを介し変更をデバイスへ送信します。エラーが返らないことを確認します。
トランザクション: Commit から Unlock まで

ここまでの処理が問題なく実行されていれば、実際に commit の処理へ進みます。問題が発生した場合は、abort 処理が開始されます。

commit の処理では、ロールバックファイルが更新されて、prepare で書き込んだ内容が確定されます。対象のデバイスが NETCONF であれば、"commit" を送信しますが、トランザクションをサポートしないデバイスは既に変更を送信済みのため、特に何もしません。Notifyでは、Kickers や subscribers に変更の完了を知らせます。最後に transaction lock が解放され、次のトランザクションが処理を開始します。
*commit queueについては、下記参考情報もご参照ください。abort の処理については、追記予定です。
参考情報
Secrets of the NSO Transaction Phases
https://community.cisco.com/t5/-/-/ba-p/3663993
NSO: Progress Trace について
https://community.cisco.com/t5/-/-/ta-p/3374775
NSO Developer Days 2020: Demystifying NSO Commit Queues
https://www.youtube.com/watch?v=9pEdvZS5yE0