apache / apache/datasketches-java

Non-deterministic result when merging an empty KllFloatsSketch with two others

Offen
#693 13 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
958
Forks
226
Ø Merge
3 T. 9 Std.
Gemergte PRs (30 T.)
8

Beschreibung

Merging an empty KllFloatsSketch with two KllFloatsSketch, with 1 and 200 "items" respectively, does not always produce the same result

I would have expected the following test scenario to pass:

```
@Test
public void test() throws NoSuchAlgorithmException {

KllFloatsSketch t1 = KllFloatsSketch.newHeapInstance();
t1.update(1f);
byte[] tb1 = t1.toByteArray();

KllFloatsSketch t2 = KllFloatsSketch.newHeapInstance();
for(int i=0; i<200; i++) {
t2.update(1f*i);
}
byte[] tb2 = t2.toByteArray();

HashSet digests = new HashSet<>();
for(int i=0; i<30; i++) {
KllFloatsSketch start = KllFloatsSketch.newHeapInstance();

byte[] h1 = Arrays.copyOf(tb1, tb1.length);
byte[] h2 = Arrays.copyOf(tb2, tb2.length);

KllFloatsSketch kll1 = KllFloatsSketch.heapify(MemorySegment.ofArray(h1));
start.merge(kll1);

KllFloatsSketch kll2 = KllFloatsSketch.heapify(MemorySegment.ofArray(h2));
start.merge(kll2);

MessageDigest md5 = MessageDigest.getInstance("MD5");

BigInteger digest = new BigInteger(md5.digest(start.toByteArray()));
digests.add(digest);
System.out.println(digest);
}
assertEquals(1, digests.size());
}
```

The digests are:
```
115710133967357289505160160937439690295
-100233422360292323003164315945381734567
-100233422360292323003164315945381734567
-100233422360292323003164315945381734567
115710133967357289505160160937439690295
115710133967357289505160160937439690295
...
```

And therefore the test throws:
```
java.lang.AssertionError:
Expected :2
Actual :1
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne damit, den bereitgestellten Test rund um KllFloatsSketch.newHeapInstance(), heapify(), merge() und toByteArray() zu reproduzieren. Vergleiche wiederholte serialisierte Ergebnisse beim Zusammenführen der Skizzen, die 1 bzw. 200 Elemente enthalten, und verfolge anschließend das Verhalten beim Zusammenführen und Serialisieren. Abgeschlossen ist die Aufgabe, wenn der wiederholte Test einen einzigen deterministischen Digest erzeugt und konsistent besteht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
data
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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