Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[Server] Clean leader reassignment can leave divergent WAL in an ISR replica

オープン
#4,269 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

  • #4273 @platinumhamburg による — マージされずにクローズ

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
30/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
活発
技術スタック
java

調査の方向性

ReassignmentLeaderElectionとレプリケーションプロトコルから始め、次にissueで説明されている3レプリカのシーケンスを再現します。再割り当て中のリーダー変更、フォロワーHW、ローカルLEOを追跡します。完了の条件は、acks=-1の書き込みが確認応答される前に、クリーンな移行によって共通のログプレフィックスが確立されることです。

索引モデルが issue の本文から書いたものです。

説明

Search before asking
  • I searched in the issues and found nothing similar.
Fluss version

0.9.0 (latest release)

Please describe the bug 🐞

A clean leader reassignment can leave replicas with different records at the same offsets, while the new leader acknowledges writes with acks=-1 and all replicas remain in the ISR.

This was reproduced using a regular Log Table without secondary indexes.

Steps to reproduce

Use three replicas, A, B, and C, with A as leader and ISR [A, B, C]. All offset ranges below are half-open.

  1. Append and commit a common prefix [0,10) on all three replicas.
  2. Append another batch [10,15) to A with acks=1. Deliver its replication response only to C. B remains at offset 10 and stays in the ISR; A's HW remains 10.
  3. Perform a clean leader reassignment to B using ReassignmentLeaderElection.
  4. Append different records to B. Since B's LEO is 10, these records occupy [10,15).
  5. Resume replication from B to A and C.

Actual behavior

The write in step 4 completes successfully with acks=-1, but the replicas contain:

Replica HW Records at offsets 10–14
A 15 New records from B
B, current leader 15 New records
C, still in ISR 15 Old records from A

The previously committed prefix [0,10) remains intact. The inconsistency affects the replacement records acknowledged by the new leader.

Solution

The replication protocol needs to establish a common log prefix when leadership changes, rather than treating matching offsets as proof of matching history. Leader-epoch-based reconciliation and the relationship between follower HW and local LEO need to be considered together.

Append offset-continuity checks alone would not detect this case because the divergent records occupy the same offsets.

Related work

Tracked under #673.

This issue documents a reproducible WAL divergence during a normal,
clean ISR leader migration: a write can be acknowledged while ISR
replicas retain different records at the same offsets.

Related implementation work: #778, #788, and #789.

Are you willing to submit a PR?
  • I'm willing to submit a PR!
主要言語
Java
スター
2.2k
フォーク
656
平均マージ
1日 21時間
マージ済み PR(30日)
127

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/fluss のほかの issue

apache/fluss の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。