[common] Decimal#hashCode is inconsistent with Decimal#equals
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
まず Decimal の実装とその equals メソッドおよび hashCode メソッドを特定することから始めてください。提供された 1.0 対 1.00 の例を再現し、次に、等しい Decimal 値が同じハッシュコードを生成することと、HashSet の検索が成功することを確認してください。
索引モデルが issue の本文から書いたものです。
説明
Search before asking
- I searched in the issues and found nothing similar.
Fluss version
1.0.0 (latest release)
Please describe the bug 🐞
Decimal#equals compares values numerically via compareTo, so 1.0 and 1.00 are equal. But Decimal#hashCode returns toBigDecimal().hashCode(), and BigDecimal#hashCode depends on the scale, so equal values get different hash codes, which violates the hashCode contract.
Decimal a = Decimal.fromBigDecimal(new BigDecimal("1.0"), 5, 1); Decimal b = Decimal.fromBigDecimal(new BigDecimal("1.00"), 5, 2); a.equals(b); // true a.hashCode() == b.hashCode(); // false (311 vs 3102) new HashSet<>(Collections.singleton(a)).contains(b); // false
Decimal is @PublicStable, so users putting values in a HashSet/HashMap can silently miss equal values. Fix: hash toBigDecimal().stripTrailingZeros(). I'm willing to submit a PR.
Solution
No response
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 ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/fluss のほかの issue
-
[lake/iceberg] Reserved write-mode properties can be set and reset through their `iceberg.` key対応中かも @aphenix-r7 が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/fluss#4658 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[security] PlainSaslServerProvider conflicts with Hadoop SASL provider causing authentication failure対応中かも @xinzhang-hello が 19 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
[server] KV snapshot scheduling stops permanently after a transient snapshot-init failure対応中かも @zhang-arvin が 19 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
apache/fluss#4489 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
[docs] Document advertised-resource and ACL principal ignore-case options対応中かも @EchoLee5 が 31 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
-
[client] LimitBatchScanner leaks Arrow read context on log-table LIMIT scan対応中かも @EchoLee5 が 31 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/rocketmq-dashboard#6896 ·
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
OpenIntegrationEngine/engine#496 ·
メンテナーはふだん 1 日以内に返信
-
enhancement good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
SasanLabs/VulnerableApp#836 ·
メンテナーはふだん 1 日以内に返信