Merge pull request #575 from prometheus/beorn7/release

Cut 0.12.0.
This commit is contained in:
Björn Rabenstein 2015-03-04 13:58:57 +01:00
commit 55dcb55498
6 changed files with 69 additions and 19 deletions

View File

@ -1,3 +1,18 @@
## 0.12.0 / 2015-03-04
* [CHANGE] Use client_golang v0.3.1. THIS CHANGES FINGERPRINTING AND INVALIDATES
ALL PERSISTED FINGERPRINTS. You have to wipe your storage to use this or
later versions. There is a version guard in place that will prevent you to
run Prometheus with the stored data of an older Prometheus.
* [BUGFIX] The change above fixes a weakness in the fingerprinting algorithm.
* [ENHANCEMENT] The change above makes fingerprinting faster and less allocation
intensive.
* [FEATURE] OR operator and vector matching options. See docs for details.
* [ENHANCEMENT] Scientific notation and special float values (Inf, NaN) now
supported by the expression language.
* [CHANGE] Dockerfile makes Prometheus use the Docker volume to store data
(rather than /tmp/metrics).
* [CHANGE] Makefile uses Go 1.4.2.
## 0.11.1 / 2015-02-27
* [BUGFIX] Make series maintenance complete again. (Ever since 0.9.0rc4,
or commit 0851945, series would not be archived, chunk descriptors would

16
Godeps/Godeps.json generated
View File

@ -29,23 +29,23 @@
},
{
"ImportPath": "github.com/prometheus/client_golang/extraction",
"Comment": "0.3.0",
"Rev": "dbbb6c9e1dbb3bf19d0f9a61baa852cbfcee1896"
"Comment": "0.3.1",
"Rev": "f688948916633c167d810a9548d4b775da43b0b0"
},
{
"ImportPath": "github.com/prometheus/client_golang/model",
"Comment": "0.3.0",
"Rev": "dbbb6c9e1dbb3bf19d0f9a61baa852cbfcee1896"
"Comment": "0.3.1",
"Rev": "f688948916633c167d810a9548d4b775da43b0b0"
},
{
"ImportPath": "github.com/prometheus/client_golang/prometheus",
"Comment": "0.3.0",
"Rev": "dbbb6c9e1dbb3bf19d0f9a61baa852cbfcee1896"
"Comment": "0.3.1",
"Rev": "f688948916633c167d810a9548d4b775da43b0b0"
},
{
"ImportPath": "github.com/prometheus/client_golang/text",
"Comment": "0.3.0",
"Rev": "dbbb6c9e1dbb3bf19d0f9a61baa852cbfcee1896"
"Comment": "0.3.1",
"Rev": "f688948916633c167d810a9548d4b775da43b0b0"
},
{
"ImportPath": "github.com/prometheus/client_model/go",

View File

@ -17,6 +17,7 @@ import (
"bytes"
"hash"
"hash/fnv"
"sync"
)
// SeparatorByte is a byte that cannot occur in valid UTF-8 sequences and is
@ -28,7 +29,7 @@ var (
// cache the signature of an empty label set.
emptyLabelSignature = fnv.New64a().Sum64()
hashAndBufPool = make(chan *hashAndBuf, 1024)
hashAndBufPool sync.Pool
)
type hashAndBuf struct {
@ -37,19 +38,15 @@ type hashAndBuf struct {
}
func getHashAndBuf() *hashAndBuf {
select {
case hb := <-hashAndBufPool:
return hb
default:
hb := hashAndBufPool.Get()
if hb == nil {
return &hashAndBuf{h: fnv.New64a()}
}
return hb.(*hashAndBuf)
}
func putHashAndBuf(hb *hashAndBuf) {
select {
case hashAndBufPool <- hb:
default:
}
hashAndBufPool.Put(hb)
}
// LabelsToSignature returns a unique signature (i.e., fingerprint) for a given

View File

@ -15,6 +15,7 @@ package model
import (
"runtime"
"sync"
"testing"
)
@ -216,3 +217,40 @@ func TestEmptyLabelSignature(t *testing.T) {
t.Fatal("expected LabelsToSignature with empty labels not to perform allocations")
}
}
func benchmarkMetricToFingerprintConc(b *testing.B, m Metric, e Fingerprint, concLevel int) {
var start, end sync.WaitGroup
start.Add(1)
end.Add(concLevel)
for i := 0; i < concLevel; i++ {
go func() {
start.Wait()
for j := b.N / concLevel; j >= 0; j-- {
if a := metricToFingerprint(m); a != e {
b.Fatalf("expected signature of %d for %s, got %d", e, m, a)
}
}
end.Done()
}()
}
b.ResetTimer()
start.Done()
end.Wait()
}
func BenchmarkMetricToFingerprintTripleConc1(b *testing.B) {
benchmarkMetricToFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 1)
}
func BenchmarkMetricToFingerprintTripleConc2(b *testing.B) {
benchmarkMetricToFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 2)
}
func BenchmarkMetricToFingerprintTripleConc4(b *testing.B) {
benchmarkMetricToFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 4)
}
func BenchmarkMetricToFingerprintTripleConc8(b *testing.B) {
benchmarkMetricToFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 8)
}

View File

@ -385,7 +385,7 @@ request_duration_microseconds_count 2693
},
},
},
},
},
}
for i, scenario := range scenarios {

View File

@ -1 +1 @@
0.11.1
0.12.0