Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/chunkenc/hash_test.go

60 lines
1.3 KiB

package chunkenc
import (
"hash/fnv"
"testing"
"github.com/cespare/xxhash/v2"
"github.com/segmentio/fasthash/fnv1a"
"github.com/stretchr/testify/require"
"github.com/grafana/loki/pkg/chunkenc/testdata"
)
var res uint64
func Benchmark_fnv64a(b *testing.B) {
for n := 0; n < b.N; n++ {
for i := 0; i < len(testdata.LogsBytes); i++ {
h := fnv.New64a()
_, _ = h.Write(testdata.LogsBytes[i])
res = h.Sum64()
}
}
}
func Benchmark_fnv64a_third_party(b *testing.B) {
for n := 0; n < b.N; n++ {
for i := 0; i < len(testdata.LogsBytes); i++ {
res = fnv1a.HashBytes64(testdata.LogsBytes[i])
}
}
}
func Benchmark_xxhash(b *testing.B) {
for n := 0; n < b.N; n++ {
for i := 0; i < len(testdata.LogsBytes); i++ {
res = xxhash.Sum64(testdata.LogsBytes[i])
}
}
}
func Test_xxhash_integrity(t *testing.T) {
data := []uint64{}
for i := 0; i < len(testdata.LogsBytes); i++ {
data = append(data, xxhash.Sum64(testdata.LogsBytes[i]))
}
for i := 0; i < len(testdata.LogsBytes); i++ {
require.Equal(t, data[i], xxhash.Sum64(testdata.LogsBytes[i]))
}
unique := map[uint64]struct{}{}
for i := 0; i < len(testdata.LogsBytes); i++ {
_, ok := unique[xxhash.Sum64(testdata.LogsBytes[i])]
require.False(t, ok, string(testdata.LogsBytes[i])) // all lines have been made unique
unique[xxhash.Sum64(testdata.LogsBytes[i])] = struct{}{}
}
}