app/vmselect/promql: add test to ensure 8-byte alignment (#3948)

See 0af9e2b693
This commit is contained in:
oliverpool 2023-03-16 17:01:42 +01:00 committed by Aliaksandr Valialkin
parent 95f5d4780d
commit 48ee15ac42
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1

View file

@ -4,6 +4,7 @@ import (
"os"
"reflect"
"testing"
"unsafe"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage"
)
@ -24,6 +25,26 @@ func TestMarshalTimeseriesFast(t *testing.T) {
if !reflect.DeepEqual(tss, tss2) {
t.Fatalf("unexpected timeseries unmarshaled\ngot\n%#v\nwant\n%#v", tss2[0], tss[0])
}
// Check 8-byte alignment.
// This prevents from SIGBUS error on arm architectures.
// See https://github.com/VictoriaMetrics/VictoriaMetrics/pull/3927
for _, ts := range tss2 {
if len(ts.Values) == 0 {
continue
}
// check float64 alignment
addr := uintptr(unsafe.Pointer(&ts.Values[0]))
if mod := addr % unsafe.Alignof(ts.Values[0]); mod != 0 {
t.Fatalf("mis-aligned; &ts.Values[0]=%p; mod=%d", &ts.Values[0], mod)
}
// check int64 alignment
addr = uintptr(unsafe.Pointer(&ts.Timestamps[0]))
if mod := addr % unsafe.Alignof(ts.Timestamps[0]); mod != 0 {
t.Fatalf("mis-aligned; &ts.Timestamps[0]=%p; mod=%d", &ts.Timestamps[0], mod)
}
}
}
// Single series