キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
669
閲覧回数
15
いいね!
0
コメント
Tomonobu Okada
Cisco Employee
Cisco Employee

wait-for-lock とは

NSO 4.4.2 からデバイスの sync-from/sync-to/check-sync/partial-sync-from アクションに wait-for-lock パラメータが追加されました。compare-config に関しては NSO 4.5 から追加されています。wait-for-lock は他のアクションが実行されていてデバイスが lock されている場合、lock がリリースされるまでどのくらい待つかを指定するものです。意味合いとしてはアクション同士の排他制御のようなものです。wait-for-lock を指定しない場合に lock が既に取得されていた場合は、すぐにエラーとなります。

 

CLI での実行例

以下のようにアクションの後にパラメータとして指定します。

admin@ncs# devices device c3650 check-sync ?
Possible completions:
wait-for-lock The action can't be performed while the device is being committed to (or waiting in the commit queue).
| Output modifiers
<cr>
admin@ncs# devices device c3650 check-sync wait-for-lock {
Possible completions:
infinity Wait infinitely for the lock, this is the default.
timeout Specifies a maximum number of seconds to wait for the device to be locked.
} The action can't be performed while the device is being committed to (or waiting in the commit queue).
admin@ncs#
admin@ncs# devices device c3650 check-sync wait-for-lock { timeout 10 }

まずは wait-for-lock を指定しないで2つのアクションを同時に実行してみます。バックグラウンドで 5 秒程度かかる sync-from を実行しています。

admin@ncs# devices device c3650 check-sync
result error
info c3650: Device is locked in a sync-from operation by session 91

他のアクションによって lock されているのですぐにエラーとなりました。

次は wait-for-lock を 10 に指定して実行してみます。

admin@ncs# devices device c3650 check-sync wait-for-lock { timeout 10 }
result in-sync

バックグラウンドの sync-from の完了を待って check-sync も正常に実行されました。

 

Python API での実行例

wait-for-lock は CLI 以外の API でも指定可能です。ここでは Python のサンプルを実行してみます。

#cat sync.py
import ncs

with ncs.maapi.Maapi() as m:
with ncs.maapi.Session(m, 'admin', 'python'):
with m.start_write_trans() as t:
root = ncs.maagic.get_root(t)
device = root.devices.device['c3650']
input = device.check_sync.get_input()
input.wait_for_lock.create()
input.wait_for_lock.timeout = 10
result = device.check_sync(input)
print result.result
print result.info

先程の例と同様にバックグラウンドで sync-from を実行しながらテストします。

#python sync.py
in-sync
None

正常に完了しました。では wait-for-lock を指定しないで実行してみます。

#python sync.py
error
c3650: Device is locked in a sync-from operation by session 91

やはり他のアクションにより lock されているのですぐにエラーとなりました。

 

まとめ

デバイスアクション同士の排他制御はアクションが競合してしまうことにより想定されない結果となってしまうことを防ぐために実装されました(in-sync なのに out-of-sync と判断されてしまうなど)。wait-for-lock を活用することによりユーザアプリケーション側でリトライなどをせずに競合をハンドルすることが可能になりますので、試してみてください。

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします