Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[Bug] Store limit dedup emits duplicates on id-only scans because ProjectionStage mutates the stored column

未关闭 适合新手
#3,407 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@vaidikgarg-bit 已经在做这个了。

开始于 2026年10月25日。

  • #3408 来自 @vaidikgarg-bit —— 未关闭

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
78/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
java, postgresql
领域
backend, databases

调研方向

从 ProjectionStage.java 中的 BACKEND_COLUMN 分支开始,追踪 MapLimitIterator 在仅按 id 执行 PRIMARY_SCAN 且使用 LIMIT_DEDUP 时如何存储和输出列。实现提议的列替换,并添加一个回归测试:在读取下一行之前先投影每个输出行。当逐字节相同的行在投影后仍保持去重时,即表示完成;issue 报告称,不进行该修改时有 100 行,进行修改后有 200 行。

由索引模型根据 Issue 内容生成。

描述

In the review of #3404, @bitflicker64 found that MapLimitIterator keeps each emitted RocksDBSession.BackendColumn in its dedup set and passes the same object downstream. On an id-only PRIMARY_SCAN (null_property = true, no property list, condition, order-by or aggregation) with dedup_option = LIMIT_DEDUP, ProjectionStage.handle() then sets column.value = new byte[0] in place (ProjectionStage.java, the BACKEND_COLUMN branch). The stored key changes after insertion, so it no longer equals a later byte-equal row, and the duplicate is emitted again. Their probe gave 100 rows without the reset and 200 with it.

Only a gRPC client that sets dedup_option reaches this today, since StoreQueryParam fixes it to NONE.

Proposed fix: have ProjectionStage replace the column instead of mutating it (result.setColumn(BackendColumn.of(column.name, new byte[0]))), plus a regression test that runs each emitted row through the projection before reading the next. I'd like to work on this.

主要语言
Java
星标
3.2k
派生
642
平均合并
1 天 11 小时
30 天内合并 PR
103

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/hugegraph 的其他 Issue

查看 apache/hugegraph 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。