問題タブ [apache-curator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
validation - 「0」文字のみを含むキュレーター ロック パス名
私は 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
ます。)
java - Zookeeper ノードで getChildren を呼び出すときにロック ノードを無視する
キュレーターを使用して Zookeeper ノードで getChildren() を呼び出す場合、ロックを表す子ノードを無視する方法はありますか?
特定の 1 つのノードのデータを使用して、すべての子を読み取りたいと考えています。したがって、最初に getChildren() を呼び出し、返された List を繰り返し処理し、そのような子ごとに getData() を呼び出します。子が途中で変更されるのを避けるために、何よりも InterProcessMutex が必要です。残念ながら、子のリストにはこのミューテックスも含まれています。
それを行うためのよりスマートな方法はありますか?それとも、ロックノードを無視しますか?
apache-zookeeper - 再接続後に Apache Curator がすべてのウォッチを失う
プロジェクトで Apache Curator を使用しています。CuratorFramework が ZooKeeper サーバーへの接続を失った後、自動的に再接続しますが、設定したすべての監視が失われたようで、通知が届かなくなりました。接続が切断されて再起動されなければ、ウォッチは期待どおりに機能します。
これはキュレーターのバグですか、それとも何か間違っていますか? 時計を設定するコードは次のとおりです。
ありがとう、
java - Zookeeper Service Discovery 接続が強制的に閉じられたキュレーター
Curator と Zookeeper を使用してサービス ディスカバリを試しています。
サービスを登録しようとすると、次のことが発生します。
関連するコードは次のとおりです: ( getDiscovery メソッドは、上記のエラーの原因となるものです)
私はこれを次のように使用しています:
以下は構成です
以下は、必要なcuratorFrameworkの初期化です
jacksonInstanceSerializer は次のとおりです。
ここで、instanceSerializerFactory は次のとおりです。
注: インスタンスの詳細は、登録しようとしている内容です (サービスの名前とアドレスなど)
java - Curator Service ディスカバリ サービスが見つからない
私は 2 つのアプリケーションを持っています。1 つは Zookeeper サービスに登録し、もう 1 つは登録されたサービスを一覧表示しようとしています。
ただし、それらをリストすると、サービスが見つかりません
次のようにサービスを登録しています
サービスを取得しようとすると、次のようになります。
myと「zookeeper」discovery.queryForNames()
を含む配列を返すことに注意してくださいserviceName
multithreading - Apacheキュレーター:ロックの取り消しが機能しない
短い: あるクライアントでロックを作成し、別のクライアントで解放したい。そのため、そのために失効を使用しようとしています。機能していません。詳細 (および私のコード) は以下のとおりです。どんな助けでも大歓迎です!
long: 1 つのスレッド (独自のクライアントを使用) が最初のロック (更新) を設定し、次に 2 番目のスレッド (クライアントが元のクライアントと同じである場合もそうでない場合もある) が 2 番目のロックを設定するシステムがあります。次に、いくつかの作業を行い、そのロックを解放してから、最初のロックを解放します。このコードは、2 つの異なるクライアントにロックを取得させることで、2 つのスレッドをシミュレートします。
ただし、2 番目のクライアントは最初のクライアントからのロックを取り消すことができません。「失効リスナー」がトリガーされることはありません。ウェブを精査しましたが、例が見つかりませんでした。このコードは、ローカル ホストのポート 2181 で Zookeeper サーバーが実行されていることを前提としています。
理想的には、ロックが設定されているかどうかをすぐに確認するために別の場所からも調べたいと思いますが、おそらく非常に短いタイムアウト (5 ミリ秒) での取得がそれを実現します。
また、ロックを解放した後にロックを取得することは良い考えですか? (システムを詰まらせないために?)
ありがとう
-ジル
追伸: apache curator user mailing list にも投稿されました
回答があればクロスポストします。
メーリング リストから 1 つの回答を得ました: Jordan Zimmerman 8:46 PM (13 時間前) 多くの問題があります。
- ドキュメントはこれについて明確ではありませんが、ロックが取得される前に makeRevocable() を呼び出す必要があります。ドキュメントを修正するには、Jira/PR を送信してください。
- テストでは、Revoker.attemptRevoke が間違ったパスを使用していました。これはロックのパスである必要があるため、「Revoker.attemptRevoke(client2, ipMutex.getLockPath());」</li>
- InterProcessMutex は、ロックを所有するスレッドを追跡します。したがって、lock.release(); リボーカーでは機能しません。代わりに InterProcessSemaphoreMutex を使用することをお勧めします。
java - Zookeeper が実行されているかどうかをプログラムで確認する方法は?
Zookeeper インスタンスに接続するために CuratorFramework (私はまだ初心者です) を使用しています。構成をインポートしたいのですが、その前に自分のプログラムが Zookeeper に接続できることをテストしたいと思います。これまでのところ、私はそのようなものを持っています:
ローカル マシンで ZooKeeper を既に開始しており、zkCli との接続を確認したところ、クライアントは接続できました。ZookeeperCon 変数は "127.0.0.1:2181" に設定されています (localhost:2181 でも試しました)。問題は、zkServer が稼働しているにもかかわらず、上記のメソッドが常に false を返すことです。おそらく、構文が正しくありませんが、オンラインで解決策を見つけることができませんでした。上記のコードが稼働中の zkServer を見つけられない理由を教えてください。
apache-zookeeper - Apache Zookeeper データの永続性。CreateMode.Persistent で作成されたノードは、クラスターの完全な再起動に耐えられますか?
CreateMode.Persistent を使用して、Windows で apache curator ライブラリを使用してノードを作成しています。クラスターを完全に再起動した後、ノードが存在する場合があることに気付きました。他の時にはそうではありません。Zookeeper は、そのように作成されたノードが再起動後も保持されることを保証しますか?
apache - Zookeeper から Web サーバーへの結果の転送
私のプロジェクトでは、飼育係の労働者に関する約 10 ~ 100 mbs のデータを計算しています。次に、HTTP PUT を使用してワーカー プロセスから Web サーバーにデータを転送し、最終的にクライアントに配信します。とにかく、Zookeeper または Curator を使用してそのデータを転送することはありますか?それとも、データを Worker プロセスからアンサンブル外のプロセスに取得するのは自分自身ですか?
apache-zookeeper - ConnectionStateListener からキュレーターの SUSPEND 状態を処理する最良の方法
SUSPEND状態の扱いについて質問したいです。
背景は次のとおりです。
同時実行ジョブのリストのタスク コーディネーターとして curator/zk を使用しています。毎分、すべてのワーカー (個別の VM で実行される各作業) は、以下を呼び出して zk からタスク (ロック) を取得しようとします。
作業がロックを取得すると、タスクが実行されます。
リトリーバー ロック/タスクを担当するクラスは、ConnectionStateListener インターフェイスを実装します。以下は現在の実装です。
RECONNECT : ワーカーは ZK 接続ステータスに関係なくロックを取得しようとするため、何もしません。
LOST : 接続が失われたため、ロックを解除します。
サスペンド:??????
SUSPEND 状態についての質問なのですが、SUSPEND に入ったときにロックを解除する (基本的には紛失扱い) か、それとも別のことをすべきでしょうか?
SUSPEND 状態を処理するためのベスト プラクティスは何ですか?
ありがとう、