mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-18 19:44:06 -08:00
5b8ff9b8a4
* Include tsdb tool in builds (#6085) (#6089) Add the tsdb tool to promu so that it's included in the release tarballs. Signed-off-by: Ben Kochie <superq@gmail.com> * web/ui: fix for CVE-2019-10215 (#6098) Signed-off-by: Simon Pasquier <spasquie@redhat.com> * cut 2.13 release (#6099) Signed-off-by: Krasi Georgiev <8903888+krasi-georgiev@users.noreply.github.com> * Fix panic in ARM builds of Prometheus (#6110) An extra sync.Pool was added during a refactor which caused some 64 bit, atomically accessed variables to no longer be 64 bit aligned. By moving all atomically accessed variables to the beginning of the struct they are guaranteed to be 64 bit aligned. Signed-off-by: Chris Marchbanks <csmarchbanks@gmail.com> * promql: fix potential panic in the query logger (#6094) Signed-off-by: Simon Pasquier <spasquie@redhat.com> * Cut release 2.13.1 (#6145) Signed-off-by: Krasi Georgiev <8903888+krasi-georgiev@users.noreply.github.com>
77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
// +build !amd64 appengine !gc purego
|
|
|
|
package xxhash
|
|
|
|
// Sum64 computes the 64-bit xxHash digest of b.
|
|
func Sum64(b []byte) uint64 {
|
|
// A simpler version would be
|
|
// d := New()
|
|
// d.Write(b)
|
|
// return d.Sum64()
|
|
// but this is faster, particularly for small inputs.
|
|
|
|
n := len(b)
|
|
var h uint64
|
|
|
|
if n >= 32 {
|
|
v1 := prime1v + prime2
|
|
v2 := prime2
|
|
v3 := uint64(0)
|
|
v4 := -prime1v
|
|
for len(b) >= 32 {
|
|
v1 = round(v1, u64(b[0:8:len(b)]))
|
|
v2 = round(v2, u64(b[8:16:len(b)]))
|
|
v3 = round(v3, u64(b[16:24:len(b)]))
|
|
v4 = round(v4, u64(b[24:32:len(b)]))
|
|
b = b[32:len(b):len(b)]
|
|
}
|
|
h = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)
|
|
h = mergeRound(h, v1)
|
|
h = mergeRound(h, v2)
|
|
h = mergeRound(h, v3)
|
|
h = mergeRound(h, v4)
|
|
} else {
|
|
h = prime5
|
|
}
|
|
|
|
h += uint64(n)
|
|
|
|
i, end := 0, len(b)
|
|
for ; i+8 <= end; i += 8 {
|
|
k1 := round(0, u64(b[i:i+8:len(b)]))
|
|
h ^= k1
|
|
h = rol27(h)*prime1 + prime4
|
|
}
|
|
if i+4 <= end {
|
|
h ^= uint64(u32(b[i:i+4:len(b)])) * prime1
|
|
h = rol23(h)*prime2 + prime3
|
|
i += 4
|
|
}
|
|
for ; i < end; i++ {
|
|
h ^= uint64(b[i]) * prime5
|
|
h = rol11(h) * prime1
|
|
}
|
|
|
|
h ^= h >> 33
|
|
h *= prime2
|
|
h ^= h >> 29
|
|
h *= prime3
|
|
h ^= h >> 32
|
|
|
|
return h
|
|
}
|
|
|
|
func writeBlocks(d *Digest, b []byte) int {
|
|
v1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4
|
|
n := len(b)
|
|
for len(b) >= 32 {
|
|
v1 = round(v1, u64(b[0:8:len(b)]))
|
|
v2 = round(v2, u64(b[8:16:len(b)]))
|
|
v3 = round(v3, u64(b[16:24:len(b)]))
|
|
v4 = round(v4, u64(b[24:32:len(b)]))
|
|
b = b[32:len(b):len(b)]
|
|
}
|
|
d.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4
|
|
return n - len(b)
|
|
}
|