apache / apache/datasketches-java

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

Aberta
#693 13 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Java
Estrelas
958
Forks
226
Merge médio
3d 40min
PRs com merge (30d)
13

Descrição

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
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Direção de pesquisa

Comece reproduzindo o teste fornecido em torno de KllFloatsSketch.newHeapInstance(), heapify(), merge() e toByteArray(). Compare os resultados serializados repetidos ao mesclar os sketches que contêm 1 e 200 itens e, em seguida, rastreie o comportamento da mesclagem e da serialização. O trabalho estará concluído quando o teste repetido produzir um único digest determinístico e passar consistentemente.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
java
Domínio
data
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.