Avro adapter: setPosition doesn't work with BaseVariableWidthVectors
- Lingua principale
- Java
- Stelle
- 94
- Fork
- 152
- Merge medio
- 3g 16h
- PR unite (30g)
- 11
Descrizione
### Describe the bug, including details regarding any error messages, version, and platform.
`BaseVariableWidthVector`-based vectors (`VarBinaryVector`, `VarCharVector`) expect the data to be written sequentially. This means `Consumer.setPosition` is not safe to use. Imagine the following scenario:
- write index 0
- write index 2
- write index 1
- write index 3
On the last step, `BaseVariableWidthVector.fillHoles` erases the data written for the index 2:
```java
protected final void fillHoles(int index) {
for (int i = lastSet + 1; i < index; i++) {
setBytes(i, emptyByteArray, 0, emptyByteArray.length);
}
lastSet = index - 1;
}
```
Here, index would be 3, lastSet + 1 would be 2 (1 + 1), so `setBytes(2, emptyByteArray, ...)` is called.
Not sure what the right solution is here, but at a minimum, the library shouldn't allow calling `setPosition` for Consumers using `BaseVariableWidthVector` vectors.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia tracciando il comportamento di Consumer.setPosition dell’adapter Avro con istanze di VarBinaryVector e VarCharVector basate su BaseVariableWidthVector. Riproduci la sequenza di scrittura 0, 2, 1, 3 e aggiungi un test di regressione; il lavoro è completato quando il posizionamento non cancella più i dati scritti in precedenza né viene impedito per questi vettori.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java
- Ambito
- data
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 35/100