Avro adapter: setPosition doesn't work with BaseVariableWidthVectors
- Linguagem predominante
- Java
- Estrelas
- 94
- Forks
- 152
- Merge médio
- 3d 16h
- PRs com merge (30d)
- 11
Descrição
### 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.
Guia de contribuição
Direção de pesquisa
Comece rastreando o comportamento de Consumer.setPosition do adaptador Avro com instâncias de VarBinaryVector e VarCharVector baseadas em BaseVariableWidthVector. Reproduza a sequência de escrita 0, 2, 1, 3 e adicione um teste de regressão; considera-se concluído quando o posicionamento não apagar mais dados escritos anteriormente nem for impedido para esses vetores.
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
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 35/100