Skip to content

Comments

複合障害が発生した場合 lerna-util-sequence で正常な採番ができない場合がある問題を修正#71

Merged
tksugimoto merged 46 commits intomainfrom
feature/fix-sequence-factory
Oct 18, 2021
Merged

複合障害が発生した場合 lerna-util-sequence で正常な採番ができない場合がある問題を修正#71
tksugimoto merged 46 commits intomainfrom
feature/fix-sequence-factory

Conversation

negokaz-tis and others added 30 commits September 23, 2021 16:14
テストケース抽出ツール pict を使って洗い出しました
after_remainAmount を削除したので、after_remainAmount によって決まる @after_freeAmount が代わりに因子になる
*.pict ファイルへのテストケース書き出しを自動化
PICT の生成結果を .pict ファイルに追記するスクリプトを作成
isStarving, generated.isStarving, generated.isOverflow, @採番値予約, @採番値リセット が不要になりました。
リトライ部分は処理ロジック的にはリスクを感じるほど複雑ではないため、コードレビュー + 既存のテストケースでカバーします
#57

その他含まれる変更
- SequenceFactoryWorker の SequenceStore の応答があるまで追加の採番値を予約するのを控える実装を廃止します
- SequenceFactoryWorker は採番できる値があるのか、あるいは無いのかの基準でのみ振る舞いを変えます
- SequenceFactoryWorker が SequenceStore の状態によらず採番値を予約するようになったことにより Cassandra へのクエリ発行の頻度が高くなることが予想されます。
- 前のバージョンから存在していた問題ですが、採番値の予約時に余分に 1 つ多く採番値が予約されてしまう問題を解消しました
- 前のバージョンでは maxSequenceValue を超えた採番値予約も許可していました(ただし、採番時に採番しない制御をしていた)が、 仕様の複雑性を軽減するため、そもそも maxSequenceValue を超えた採番値の予約を行わないよう変更しました
@received.isEmpty は Store からのリプライを受けた直後であり、採番の有無による影響を受けないため
No  isEmpty  isOverflow  msg                msg.maxReservedValue    @received.isEmpty
14  TRUE     TRUE        SequenceReset      = ctx.maxReservedValue  FALSE
のケースでも採番できるのが仕様としては望ましいことがわかった
negokaz-tis and others added 16 commits September 28, 2021 20:41
必ずしも maxSequenceValue ぴったりまで採番できるとは限らないため
…ate-pict

SequenceFactoryWorker の採番時の振る舞いについてテストケースを洗い出し
…-reply-pict

SequenceFactoryWorker が SequenceStore から応答を受けたときの振る舞いのテストケースを検討する
… SequenceReset が返ってくることを想定するテストケースを削除
…tore-reply-pict

📚doc: オーバーフローしていない状態で msg.maxReservedValue < ctx.maxReservedValue となる SequenceReset が返ってくることを想定するテストケースを削除
コメントの意味が分かりづらかったため
incrementStep(maxNodeId) が 10 のとき、firstValue が 11 になることはない
コメントの意味が分かりづらかったため
…est/SequenceFactoryWorker

SequenceFactoryWorker テストケース改善
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

Successfully merging this pull request may close these issues.

[lerna-util-sequence] (Cassandra) SequenceStore での処理が失敗した場合正常に採番できない場合がある

3 participants