私は ZooKeeper を初めて使用しますが、同僚が本番環境の問題をデバッグするのを手伝っているときに、予想外のことがわかりました。システム内の既存のコードは Curator InterProcessMutex を使用しています。アプリは、たとえば、パスを使用してロックを作成します/TEST/ABC
。次に、コードの別の部分でパスを使用してさらにロックを作成します/TEST/ABC/[some integer]
が、整数は UI から入力されたオブジェクト ID です。これは数か月間機能していましたが、最近突然機能しなくなりました。
スレッド ダンプを取得したところ、パスTEST/ABC
を使用してロックを取得しようとしてスレッドがブロックされていることがわかりました。これは、パスが作成されるたびに発生することがわかりまし/TEST/ABC/0000
た (0 のみが含まれている限り、0 の数は関係ありません)。どうやらある日、何人かのテスターが偽の ID をシステムに入力することを決定し、システムを停止させたようです。これは修正されましたが、なぜこれが当てはまるのか、誰かが光を当てることができるかどうか興味がありますか?
質問:TEST/ABC/0000
ロックとロックが同じなのはなぜTEST/ABC
ですか?
(ゼロの数は実際には問題ではありません。何かが にマップされTEST/ABC
ます。)