3.6.6. ツリー API のロック
ツリー構造を操作するときにロックを取得するタイミングと方法を理解することは、ツリーに対して対話するクライアントアプリケーションのパフォーマンスを最大化し、同時に一貫性を維持する上で重要です。
ツリー API でのロックはノードごとに行われます。したがって、特定のノードでキー/値を置くか、または更新すると、そのノードの書き込みロックが取得されます。この場合、変更されるノードの親ノードへの書き込みロックは取得されず、子ノードのロックは取得されません。
ノードを追加または削除しても、親は書き込みにロックされません。JBoss Cache では、この動作はデフォルトでは挿入や削除に対してロックされていなかった状態で設定されました。
最後に、ノードが移動されると、移動したノードとその子のいずれかがロックされますが、ターゲットノードとその子の新しい場所もロックされます。この点をよりよく理解するには、例を見てみましょう。
このような階層があり、c/ を下方向の b/ に移動させたいとします。
最終的な結果は、以下のようになります。
これを移動するには、ロックが取得されました。
- /a/b - データが置かれる親の下にあるためです。
- /c および /c/e - 移動中のノードであるため
- /a/b/c および /a/b/c/e: 移動中のノードの新しいターゲットの場所であるためです。