From 0c6ce34295d8debf1ef98494e5496218486d835b Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 11 May 2024 04:52:21 +0200 Subject: [PATCH] wip --- lib/logstorage/block_result.go | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/lib/logstorage/block_result.go b/lib/logstorage/block_result.go index 7126f485a7..a677401489 100644 --- a/lib/logstorage/block_result.go +++ b/lib/logstorage/block_result.go @@ -524,6 +524,8 @@ func (br *blockResult) getBucketedTimestampValues(bf *byStatsField) []string { bucketSizeInt = 1 } bucketOffsetInt := int64(bf.bucketOffset) + + timestampPrev := int64(0) for i := range timestamps { if i > 0 && timestamps[i-1] == timestamps[i] { valuesBuf = append(valuesBuf, s) @@ -541,6 +543,12 @@ func (br *blockResult) getBucketedTimestampValues(bf *byStatsField) []string { } timestamp += bucketOffsetInt + if i > 0 && timestampPrev == timestamp { + valuesBuf = append(valuesBuf, s) + continue + } + timestampPrev = timestamp + bufLen := len(buf) buf = marshalTimestampRFC3339Nano(buf, timestamp) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -620,6 +628,7 @@ func (br *blockResult) getBucketedUint8Values(encodedValues []string, bf *byStat } bucketOffsetInt := uint64(int64(bf.bucketOffset)) + nPrev := uint64(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -631,6 +640,12 @@ func (br *blockResult) getBucketedUint8Values(encodedValues []string, bf *byStat n -= n % bucketSizeInt n += bucketOffsetInt + if i > 0 && nPrev == n { + valuesBuf = append(valuesBuf, s) + continue + } + nPrev = n + bufLen := len(buf) buf = marshalUint64(buf, n) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -672,6 +687,7 @@ func (br *blockResult) getBucketedUint16Values(encodedValues []string, bf *bySta } bucketOffsetInt := uint64(int64(bf.bucketOffset)) + nPrev := uint64(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -684,6 +700,12 @@ func (br *blockResult) getBucketedUint16Values(encodedValues []string, bf *bySta n -= n % bucketSizeInt n += bucketOffsetInt + if i > 0 && nPrev == n { + valuesBuf = append(valuesBuf, s) + continue + } + nPrev = n + bufLen := len(buf) buf = marshalUint64(buf, n) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -725,6 +747,7 @@ func (br *blockResult) getBucketedUint32Values(encodedValues []string, bf *bySta } bucketOffsetInt := uint64(int64(bf.bucketOffset)) + nPrev := uint64(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -737,6 +760,12 @@ func (br *blockResult) getBucketedUint32Values(encodedValues []string, bf *bySta n -= n % bucketSizeInt n += bucketOffsetInt + if i > 0 && nPrev == n { + valuesBuf = append(valuesBuf, s) + continue + } + nPrev = n + bufLen := len(buf) buf = marshalUint64(buf, n) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -778,6 +807,7 @@ func (br *blockResult) getBucketedUint64Values(encodedValues []string, bf *bySta } bucketOffsetInt := uint64(int64(bf.bucketOffset)) + nPrev := uint64(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -790,6 +820,12 @@ func (br *blockResult) getBucketedUint64Values(encodedValues []string, bf *bySta n -= n % bucketSizeInt n += bucketOffsetInt + if i > 0 && nPrev == n { + valuesBuf = append(valuesBuf, s) + continue + } + nPrev = n + bufLen := len(buf) buf = marshalUint64(buf, n) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -835,6 +871,8 @@ func (br *blockResult) getBucketedFloat64Values(encodedValues []string, bf *bySt _, e := decimal.FromFloat(bucketSize) p10 := math.Pow10(int(-e)) bucketSizeP10 := int64(bucketSize * p10) + + fPrev := float64(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -854,6 +892,12 @@ func (br *blockResult) getBucketedFloat64Values(encodedValues []string, bf *bySt f += bf.bucketOffset + if fPrev == f { + valuesBuf = append(valuesBuf, s) + continue + } + fPrev = f + bufLen := len(buf) buf = marshalFloat64(buf, f) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -893,6 +937,7 @@ func (br *blockResult) getBucketedIPv4Values(encodedValues []string, bf *byStats } bucketOffsetInt := uint32(int32(bf.bucketOffset)) + nPrev := uint32(0) for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { valuesBuf = append(valuesBuf, s) @@ -905,6 +950,12 @@ func (br *blockResult) getBucketedIPv4Values(encodedValues []string, bf *byStats n -= n % bucketSizeInt n += bucketOffsetInt + if i > 0 && nPrev == n { + valuesBuf = append(valuesBuf, s) + continue + } + nPrev = n + bufLen := len(buf) buf = marshalIPv4(buf, n) s = bytesutil.ToUnsafeString(buf[bufLen:]) @@ -947,6 +998,7 @@ func (br *blockResult) getBucketedTimestampISO8601Values(encodedValues []string, } bucketOffsetInt := int64(bf.bucketOffset) + timestampPrev := int64(0) bb := bbPool.Get() for i, v := range encodedValues { if i > 0 && encodedValues[i-1] == encodedValues[i] { @@ -967,6 +1019,12 @@ func (br *blockResult) getBucketedTimestampISO8601Values(encodedValues []string, timestamp -= timestamp % bucketSizeInt timestamp += bucketOffsetInt + if timestampPrev == timestamp { + valuesBuf = append(valuesBuf, s) + continue + } + timestampPrev = timestamp + bufLen := len(buf) buf = marshalTimestampISO8601(buf, int64(timestamp)) s = bytesutil.ToUnsafeString(buf[bufLen:])