2

SUSPEND状態の扱いについて質問したいです。

背景は次のとおりです。

同時実行ジョブのリストのタスク コーディネーターとして curator/zk を使用しています。毎分、すべてのワーカー (個別の VM で実行される各作業) は、以下を呼び出して zk からタスク (ロック) を取得しようとします。

lock = new InterProcessSemaphoreMutex(zkClient, task); 
boolean hasLock = false;
hasLock = lock.acquire(1, TimeUnit.SECONDS);

作業がロックを取得すると、タスクが実行されます。

リトリーバー ロック/タスクを担当するクラスは、ConnectionStateListener インターフェイスを実装します。以下は現在の実装です。

  • RECONNECT : ワーカーは ZK 接続ステータスに関係なくロックを取得しようとするため、何もしません。

  • LOST : 接続が失われたため、ロックを解除します。

  • サスペンド:??????

SUSPEND 状態についての質問なのですが、SUSPEND に入ったときにロックを解除する (基本的には紛失扱い) か、それとも別のことをすべきでしょうか?

SUSPEND 状態を処理するためのベスト プラクティスは何ですか?

ありがとう、

4

1 に答える 1

2

このページの最後にあるコメントを見たことがあると思います。

ConnectionStateListener を追加して、SUSPENDED および LOST 状態の変化を監視することを強くお勧めします。SUSPENDED 状態が報告された場合、後で RECONNECTED 状態を受信しない限り、ロックを保持しているとは確信できません。LOST 状態が報告された場合、ロックを保持していないことは確実です。

RECONNECTED私はこれを次のように解釈します。接続が確立LOSTされ、ロックが解除されない限り、状態を受け取るまでロックを保持します。

于 2015-01-30T16:16:05.117 に答える