[英]Creating an atomic process for a netconf edit-config request
我正在創建一個自定義系統,當用戶提交 netconf edit-config
時,它將在我的系統中啟動一組操作,這些操作將自動更改我們系統的配置,然后向用戶提交成功或失敗通知.
把它想象成一個大的 SQL 事務,最后要么提交要么回滾。
所以,步驟
edit-config
我們實現這一點的工作想法(可能不是最好的想法)是通過接受edit-config
向 go 提出這一點,然后在 sysrepo 中,我們將使用成功或失敗標志編輯部分葉子,它們將在同一session 作為初始更改。 我們希望這將使一切保持原子性; 通過在 session 之外進行編輯,多個配置更改可能會相互沖突。
我們不確定 go 是否使用純 netconf 或直接利用 sysrepo。 我們注意到所有這些為 sysrepo 制作的插件/綁定,並認為這些可以直接用於與我們的數據存儲區通信。
但話雖如此,我們的工作想法很可能不是最佳實踐方法。 實現這一目標的最佳方法是什么?
我們的系統是:
而我們的yang文件是
module rxmbn {
namespace "urn:com:zug:rxmbn";
prefix rxmbn;
container rxmbn-config {
config true;
leaf raw {
type string;
}
leaf raw_hashCode {
type int32;
}
leaf odl_last_processed_hashCode {
type int32;
}
leaf processed {
type boolean;
default "false";
}
}
}
目前我們可以:
但是我們遇到了問題
我們對 netconf 和 yang 都有些陌生,所以我確信有一些方法可以通過 netopeer Z21D6F40CFB511982E4424E0E250A8AAZ 來利用notification
api 或event
api,但我們已經足夠了解了。
如果有任何示例或實施建議可以為此創建原子事務,那將非常有用。
我對 sysrepo 一無所知,所以這是從 NETCONF 的角度來看的。
NETCONF 以請求-響應方式在單個 session 中串行處理請求,這意味着您在單個 NETCONF session 中所做的一切都應該已經是“原子的” - 您不能發送兩個請求並以相反的順序或並行應用它們你做什么。 一個表現良好的客戶端也會在發送新請求之前等待來自服務器的每個響應,特別是如果所有更新必須成功並按特定順序執行。 該協議還定義了無法取消已發送到服務器的請求的方法。
如果您需要阻止其他會話修改數據存儲,而另一個 session 正在執行多重編輯配置,您可以使用<lock>
和<unlock>
NETCONF 操作來鎖定整個數據存儲。 還有RFC5717和部分鎖定,它們只會鎖定數據存儲的特定分支。
使用通知來報告<edit-config>
的成功是非常不尋常的——這就是<rpc-reply>
和<rpc-error>
在同一個 session 中的用途。 您將使用通知來通知其他會話正在發生的事情。 事實上,配置更改有標准的基本通知。
我建議在繼續之前閱讀整個RFC6241 。 您應該了解候選數據存儲、確認提交等內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.