mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
app/vlselect/logsql: skip rows without _stream reference
_stream field can be empty for the recently ingested rows because respective entry in indexdb is not yet searchable as it haven't been flushed to storage yet. This change just skips such items in the output response to make it more consistent. See: https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6042 Signed-off-by: Zakhar Bessarab <z.bessarab@victoriametrics.com>
This commit is contained in:
parent
b4d8837917
commit
971aecd1ae
1 changed files with 21 additions and 0 deletions
|
@ -48,8 +48,29 @@ func ProcessQueryRequest(w http.ResponseWriter, r *http.Request, stopCh <-chan s
|
||||||
}
|
}
|
||||||
rowsCount := len(columns[0].Values)
|
rowsCount := len(columns[0].Values)
|
||||||
|
|
||||||
|
// skip entries with empty _stream column
|
||||||
|
// _stream is empty in case indexdb entry was not flushed to the storage yet
|
||||||
|
// skipping such entries makes the result more consistent
|
||||||
|
streamCol := 0
|
||||||
|
|
||||||
|
// fast path
|
||||||
|
// _stream column is a built-in column and it is always supposed to be at the same position
|
||||||
|
if len(columns) >= 2 && columns[1].Name == "_stream" {
|
||||||
|
streamCol = 1
|
||||||
|
} else {
|
||||||
|
for i := 1; i < len(columns); i++ {
|
||||||
|
if columns[i].Name == "_stream" {
|
||||||
|
streamCol = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bb := blockResultPool.Get()
|
bb := blockResultPool.Get()
|
||||||
for rowIdx := 0; rowIdx < rowsCount; rowIdx++ {
|
for rowIdx := 0; rowIdx < rowsCount; rowIdx++ {
|
||||||
|
if columns[streamCol].Values[rowIdx] == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
WriteJSONRow(bb, columns, rowIdx)
|
WriteJSONRow(bb, columns, rowIdx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue