[Store] LIMIT_DEDUP on NO_SCAN with loadPropertyFromIndex compares BaseVertex by reference

Offen Anfängerfreundlich
#3,443 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@ShryukGrandhi arbeitet bereits daran.

Seit 03.11.2026.

  • #3451 von @ShryukGrandhi — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
75/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
java
Bereich
databases

Rechercherichtung

Lies MapLimitIterator und seinen Aufruf in BusinessHandlerImpl.scanIndex, wo transElement scanIndexToBaseElement umschließt. Füge einen Key-Extraktor zu MapLimitIterator hinzu und übergebe BaseElement::id auf diesem Pfad. Erledigt, wenn Knoten mit derselben id dedupliziert sind und bestehende Store-Tests bestehen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

In BusinessHandlerImpl.scanIndex(graph, params, dedupOption, transElement, filterTTL), the transElement branch wraps scanIndexToBaseElement in MapLimitIterator<BaseElement> for LIMIT_DEDUP. MapLimitIterator dedups with a hash set of the elements themselves. BaseEdge defines equals/hashCode on id(), but BaseVertex and BaseElement define neither, so two vertex objects with the same id both get through. DEDUP and PRECISE_DEDUP on the same branch already hash on id().asBytes().

This can't be hit today. BinaryElementSerializer.index2Element throws NotImplementedException, and StoreQueryParam always sends loadPropertyFromIndex=false. It will show up once index2Element is implemented. Search indexes, secondary indexes on collection properties and joint secondary indexes all write several entries per element, and a scan that covers more than one of them returns the same vertex once per entry.

Suggested fix: give MapLimitIterator a key extractor and pass BaseElement::id on this path. Adding equals/hashCode to BaseVertex in hugegraph-struct would also work, but it changes equality for every collection that holds vertices.

Vorherrschende Sprache
Java
Sterne
3.2k
Forks
645
Ø Merge
1 T. 3 Std.
Gemergte PRs (30 T.)
120

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/hugegraph

Alle Issues in apache/hugegraph

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.