Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mds の RPC レスポンスで leader ノードが見つからないエラーが返ってきた場合にリトライしたい #10

Open
shinnya opened this issue Apr 17, 2019 · 0 comments

Comments

@shinnya
Copy link
Contributor

shinnya commented Apr 17, 2019

frugalos プロセスが停止処理を開始すると一時的に No such node のエラーを返すことがある(理由は後述)。この場合には mds client が保持している leader をクリアして別の frugalos プロセスにリクエストをリトライすれば成功する確率が高い。No such node エラー時に leader をクリアするデメリットは特にない、はず(クラスタが stable な状態で No such node のエラーが継続的に出続けることはない)。

No such node のエラー用に ErrorKind を追加して、以下のコードのエラー処理で leader を取得しなおすよう変更すると対応できそうな感じがする。No such node のエラーが出ているタイミングではリーダー選出中の可能性が高く、リトライしたリクエストはリーダー選出待ちになることが多いはず。

return Err(track!(e, T::NAME));

No such node のエラーは以下のコードから返ってくる。

https://github.com/frugalos/frugalos/blob/8246fdb52b8a8ea5fb2ca4d2ddc2a40b76d6924a/frugalos_mds/src/server.rs#L56

エラーが発生する理由は、frugalos プロセスの停止処理中にプロセスが管理しているノード一覧が非 atomic に変動するから。その結果、mds のクライアント側が保持している leader ノードがサーバー側の frugalos プロセスにはすでにいなくなっているということが起きる。このエラーが出なくするのは非常に面倒だと予想しているので、エラー自体が出てしまうのは許容しておいた方が良さそうな印象。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant