Skip to content

Commit d758432

Browse files
authored
Updated Prometheus deps to master around 2.15.2. (#1947)
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
1 parent d9e4e0e commit d758432

File tree

9 files changed

+194
-148
lines changed

9 files changed

+194
-148
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Compactor now properly handles partial block uploads for all operation like rete
2020

2121
* Removed `thanos_compact_sync_meta_*` metrics. Use `thanos_blocks_meta_*` metrics instead.
2222
* Added `thanos_consistency_delay_seconds` and `thanos_compactor_aborted_partial_uploads_deletion_attempts_total` metrics.
23+
2324
- [#1936](https://github.com/thanos-io/thanos/pull/1936) Store: Improved synchronization of meta JSON files. Store now properly handles corrupted disk cache. Added meta.json sync metrics.
2425
- [#1856](https://github.com/thanos-io/thanos/pull/1856) Receive: close DBReadOnly after flushing to fix a memory leak.
2526
- [#1882](https://github.com/thanos-io/thanos/pull/1882) Receive: upload to object storage as 'receive' rather than 'sidecar'.
@@ -35,6 +36,14 @@ Compactor now properly handles partial block uploads for all operation like rete
3536
- [#1881](https://github.com/thanos-io/thanos/pull/1881) Store Gateway: memcached support for index cache. See [documentation](docs/components/store.md/#index-cache) for further information.
3637
- [#1904](https://github.com/thanos-io/thanos/pull/1904) Add a skip-chunks option in Store Series API to improve the response time of `/api/v1/series` endpoint.
3738

39+
### Changed
40+
41+
- [#1947](https://github.com/thanos-io/thanos/pull/1947) Upgraded Prometheus dependencies to v2.15.2. This includes:
42+
43+
* Compactor: Significant reduction of memory footprint for compaction and downsampling process.
44+
* Querier: Accepting spaces between time range and square bracket. e.g `[ 5m]`
45+
* Querier: Improved PromQL parser performance.
46+
3847
## [v0.9.0](https://github.com/thanos-io/thanos/releases/tag/v0.9.0) - 2019.12.03
3948

4049
### Added

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ require (
1616
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d
1717
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible
1818
github.com/armon/go-metrics v0.3.0
19-
github.com/aws/aws-sdk-go v1.25.35 // indirect
2019
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
2120
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b
2221
github.com/cespare/xxhash v1.1.0
@@ -71,7 +70,7 @@ require (
7170
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4
7271
github.com/prometheus/common v0.7.0
7372
github.com/prometheus/procfs v0.0.6 // indirect
74-
github.com/prometheus/prometheus v1.8.2-0.20191126064551-80ba03c67da1 // Prometheus master v2.14.0
73+
github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef // master ~ v2.15.2
7574
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da // indirect
7675
github.com/satori/go.uuid v1.2.0 // indirect
7776
github.com/smartystreets/assertions v1.0.1 // indirect

go.sum

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
8383
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
8484
github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
8585
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
86-
github.com/aws/aws-sdk-go v1.23.12/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
87-
github.com/aws/aws-sdk-go v1.25.35 h1:fe2tJnqty/v/50pyngKdNk/NP8PFphYDA1Z7N3EiiiE=
88-
github.com/aws/aws-sdk-go v1.25.35/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
86+
github.com/aws/aws-sdk-go v1.25.48 h1:J82DYDGZHOKHdhx6hD24Tm30c2C3GchYGfN0mf9iKUk=
87+
github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
8988
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
9089
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
9190
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -447,8 +446,8 @@ github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa
447446
github.com/prometheus/procfs v0.0.6 h1:0qbH+Yqu/cj1ViVLvEWCP6qMQ4efWUj6bQqOEA0V0U4=
448447
github.com/prometheus/procfs v0.0.6/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
449448
github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s=
450-
github.com/prometheus/prometheus v1.8.2-0.20191126064551-80ba03c67da1 h1:5ee1ewJCJYB7Bp314qaPcRNFaAPsdHN6BFzBC1wMVbQ=
451-
github.com/prometheus/prometheus v1.8.2-0.20191126064551-80ba03c67da1/go.mod h1:PVTKYlgELGIDbIKIyWRzD4WKjnavPynGOFLSuDpvOwU=
449+
github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef h1:pYYKXo/zGx25kyViw+Gdbxd0ItIg+vkVKpwgWUEyIc4=
450+
github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI=
452451
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
453452
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
454453
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=

pkg/block/index.go

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package block
22

33
import (
4+
"context"
45
"fmt"
56
"hash/crc32"
67
"math/rand"
@@ -282,7 +283,7 @@ func Repair(logger log.Logger, dir string, id ulid.ULID, source metadata.SourceT
282283
}
283284
defer runutil.CloseWithErrCapture(&err, chunkw, "repair chunk writer")
284285

285-
indexw, err := index.NewWriter(filepath.Join(resdir, IndexFilename))
286+
indexw, err := index.NewWriter(context.TODO(), filepath.Join(resdir, IndexFilename))
286287
if err != nil {
287288
return resid, errors.Wrap(err, "open index writer")
288289
}
@@ -406,17 +407,19 @@ func rewrite(
406407
meta *metadata.Meta,
407408
ignoreChkFns []ignoreFnType,
408409
) error {
409-
symbols, err := indexr.Symbols()
410-
if err != nil {
411-
return err
410+
symbols := indexr.Symbols()
411+
for symbols.Next() {
412+
if err := indexw.AddSymbol(symbols.At()); err != nil {
413+
return errors.Wrap(err, "add symbol")
414+
}
412415
}
413-
if err := indexw.AddSymbols(symbols); err != nil {
414-
return err
416+
if symbols.Err() != nil {
417+
return errors.Wrap(symbols.Err(), "next symbol")
415418
}
416419

417420
all, err := indexr.Postings(index.AllPostingsKey())
418421
if err != nil {
419-
return err
422+
return errors.Wrap(err, "postings")
420423
}
421424
all = indexr.SortedPostings(all)
422425

@@ -434,15 +437,15 @@ func rewrite(
434437
id := all.At()
435438

436439
if err := indexr.Series(id, &lset, &chks); err != nil {
437-
return err
440+
return errors.Wrap(err, "series")
438441
}
439442
// Make sure labels are in sorted order.
440443
sort.Sort(lset)
441444

442445
for i, c := range chks {
443446
chks[i].Chunk, err = chunkr.Chunk(c.Ref)
444447
if err != nil {
445-
return err
448+
return errors.Wrap(err, "chunk read")
446449
}
447450
}
448451

@@ -513,24 +516,6 @@ func rewrite(
513516
i++
514517
lastSet = s.lset
515518
}
516-
517-
s := make([]string, 0, 256)
518-
for n, v := range values {
519-
s = s[:0]
520-
521-
for x := range v {
522-
s = append(s, x)
523-
}
524-
if err := indexw.WriteLabelIndex([]string{n}, s); err != nil {
525-
return errors.Wrap(err, "write label index")
526-
}
527-
}
528-
529-
for _, l := range postings.SortedKeys() {
530-
if err := indexw.WritePostings(l.Name, l.Value, postings.Get(l.Name, l.Value)); err != nil {
531-
return errors.Wrap(err, "write postings")
532-
}
533-
}
534519
return nil
535520
}
536521

pkg/block/index_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package block
2+
3+
import (
4+
"context"
5+
"io/ioutil"
6+
"os"
7+
"path/filepath"
8+
"testing"
9+
10+
"github.com/go-kit/kit/log"
11+
"github.com/prometheus/prometheus/pkg/labels"
12+
"github.com/prometheus/prometheus/tsdb"
13+
"github.com/prometheus/prometheus/tsdb/chunks"
14+
"github.com/prometheus/prometheus/tsdb/index"
15+
"github.com/thanos-io/thanos/pkg/block/metadata"
16+
"github.com/thanos-io/thanos/pkg/testutil"
17+
)
18+
19+
func TestRewrite(t *testing.T) {
20+
ctx := context.Background()
21+
22+
tmpDir, err := ioutil.TempDir("", "test-indexheader")
23+
testutil.Ok(t, err)
24+
defer func() { testutil.Ok(t, os.RemoveAll(tmpDir)) }()
25+
26+
b, err := testutil.CreateBlock(ctx, tmpDir, []labels.Labels{
27+
{{Name: "a", Value: "1"}},
28+
{{Name: "a", Value: "2"}},
29+
{{Name: "a", Value: "3"}},
30+
{{Name: "a", Value: "4"}},
31+
{{Name: "a", Value: "1"}, {Name: "b", Value: "1"}},
32+
}, 150, 0, 1000, nil, 124)
33+
testutil.Ok(t, err)
34+
35+
ir, err := index.NewFileReader(filepath.Join(tmpDir, b.String(), IndexFilename))
36+
testutil.Ok(t, err)
37+
38+
defer func() { testutil.Ok(t, ir.Close()) }()
39+
40+
cr, err := chunks.NewDirReader(filepath.Join(tmpDir, b.String(), "chunks"), nil)
41+
testutil.Ok(t, err)
42+
43+
defer func() { testutil.Ok(t, cr.Close()) }()
44+
45+
m := &metadata.Meta{
46+
BlockMeta: tsdb.BlockMeta{ULID: ULID(1)},
47+
Thanos: metadata.Thanos{},
48+
}
49+
50+
testutil.Ok(t, os.MkdirAll(filepath.Join(tmpDir, m.ULID.String()), os.ModePerm))
51+
iw, err := index.NewWriter(ctx, filepath.Join(tmpDir, m.ULID.String(), IndexFilename))
52+
testutil.Ok(t, err)
53+
defer iw.Close()
54+
55+
cw, err := chunks.NewWriter(filepath.Join(tmpDir, m.ULID.String()))
56+
testutil.Ok(t, err)
57+
58+
defer cw.Close()
59+
60+
testutil.Ok(t, rewrite(log.NewNopLogger(), ir, cr, iw, cw, m, []ignoreFnType{func(mint, maxt int64, prev *chunks.Meta, curr *chunks.Meta) (bool, error) {
61+
return curr.MaxTime == 696, nil
62+
}}))
63+
64+
testutil.Ok(t, iw.Close())
65+
testutil.Ok(t, cw.Close())
66+
67+
ir2, err := index.NewFileReader(filepath.Join(tmpDir, m.ULID.String(), IndexFilename))
68+
testutil.Ok(t, err)
69+
70+
defer func() { testutil.Ok(t, ir2.Close()) }()
71+
72+
all, err := ir2.Postings(index.AllPostingsKey())
73+
testutil.Ok(t, err)
74+
75+
for p := ir2.SortedPostings(all); p.Next(); {
76+
var lset labels.Labels
77+
var chks []chunks.Meta
78+
79+
testutil.Ok(t, ir2.Series(p.At(), &lset, &chks))
80+
testutil.Equals(t, 1, len(chks))
81+
}
82+
83+
}

pkg/block/indexheader/json_reader.go

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package indexheader
33
import (
44
"context"
55
"encoding/json"
6+
"hash/crc32"
67
"io/ioutil"
78
"os"
89
"path/filepath"
@@ -13,6 +14,7 @@ import (
1314
"github.com/oklog/ulid"
1415
"github.com/pkg/errors"
1516
"github.com/prometheus/prometheus/pkg/labels"
17+
"github.com/prometheus/prometheus/tsdb/encoding"
1618
"github.com/prometheus/prometheus/tsdb/fileutil"
1719
"github.com/prometheus/prometheus/tsdb/index"
1820
"github.com/thanos-io/thanos/pkg/block"
@@ -56,6 +58,50 @@ func (b realByteSlice) Sub(start, end int) index.ByteSlice {
5658
return b[start:end]
5759
}
5860

61+
// The table gets initialized with sync.Once but may still cause a race
62+
// with any other use of the crc32 package anywhere. Thus we initialize it
63+
// before.
64+
var castagnoliTable *crc32.Table
65+
66+
func init() {
67+
castagnoliTable = crc32.MakeTable(crc32.Castagnoli)
68+
}
69+
70+
// readSymbols reads the symbol table fully into memory and allocates proper strings for them.
71+
// Strings backed by the mmap'd memory would cause memory faults if applications keep using them
72+
// after the reader is closed.
73+
func readSymbols(bs index.ByteSlice, version int, off int) ([]string, map[uint32]string, error) {
74+
if off == 0 {
75+
return nil, nil, nil
76+
}
77+
d := encoding.NewDecbufAt(bs, off, castagnoliTable)
78+
79+
var (
80+
origLen = d.Len()
81+
cnt = d.Be32int()
82+
basePos = uint32(off) + 4
83+
nextPos = basePos + uint32(origLen-d.Len())
84+
symbolSlice []string
85+
symbols = map[uint32]string{}
86+
)
87+
if version == index.FormatV2 {
88+
symbolSlice = make([]string, 0, cnt)
89+
}
90+
91+
for d.Err() == nil && d.Len() > 0 && cnt > 0 {
92+
s := d.UvarintStr()
93+
94+
if version == index.FormatV2 {
95+
symbolSlice = append(symbolSlice, s)
96+
} else {
97+
symbols[nextPos] = s
98+
nextPos = basePos + uint32(origLen-d.Len())
99+
}
100+
cnt--
101+
}
102+
return symbolSlice, symbols, errors.Wrap(d.Err(), "read symbols")
103+
}
104+
59105
func getSymbolTable(b index.ByteSlice) (map[uint32]string, error) {
60106
version := int(b.Range(4, 5)[0])
61107

@@ -68,7 +114,7 @@ func getSymbolTable(b index.ByteSlice) (map[uint32]string, error) {
68114
return nil, errors.Wrap(err, "read TOC")
69115
}
70116

71-
symbolsV2, symbolsV1, err := index.ReadSymbols(b, version, int(toc.Symbols))
117+
symbolsV2, symbolsV1, err := readSymbols(b, version, int(toc.Symbols))
72118
if err != nil {
73119
return nil, errors.Wrap(err, "read symbols")
74120
}
@@ -120,32 +166,15 @@ func WriteJSON(logger log.Logger, indexFn string, fn string) error {
120166
}
121167

122168
// Extract label value indices.
123-
lnames, err := indexr.LabelIndices()
169+
lnames, err := indexr.LabelNames()
124170
if err != nil {
125171
return errors.Wrap(err, "read label indices")
126172
}
127-
for _, lns := range lnames {
128-
if len(lns) != 1 {
129-
continue
130-
}
131-
ln := lns[0]
132-
133-
tpls, err := indexr.LabelValues(ln)
173+
for _, ln := range lnames {
174+
vals, err := indexr.LabelValues(ln)
134175
if err != nil {
135176
return errors.Wrap(err, "get label values")
136177
}
137-
vals := make([]string, 0, tpls.Len())
138-
139-
for i := 0; i < tpls.Len(); i++ {
140-
v, err := tpls.At(i)
141-
if err != nil {
142-
return errors.Wrap(err, "get label value")
143-
}
144-
if len(v) != 1 {
145-
return errors.Errorf("unexpected tuple length %d", len(v))
146-
}
147-
vals = append(vals, v[0])
148-
}
149178
v.LabelValues[ln] = vals
150179
}
151180

pkg/compact/compact_e2e_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ func TestGroup_Compact_e2e(t *testing.T) {
192192
numSamples: 100, mint: 0, maxt: 1000, extLset: extLabels, res: 124,
193193
series: []labels.Labels{
194194
{{Name: "a", Value: "1"}},
195-
{{Name: "a", Value: "2"}, {Name: "a", Value: "2"}},
195+
{{Name: "a", Value: "2"}, {Name: "b", Value: "2"}},
196196
{{Name: "a", Value: "3"}},
197197
{{Name: "a", Value: "4"}},
198198
},
@@ -247,7 +247,7 @@ func TestGroup_Compact_e2e(t *testing.T) {
247247
numSamples: 100, mint: 0, maxt: 1000, extLset: extLabels2, res: 124,
248248
series: []labels.Labels{
249249
{{Name: "a", Value: "1"}},
250-
{{Name: "a", Value: "2"}, {Name: "a", Value: "2"}},
250+
{{Name: "a", Value: "2"}, {Name: "b", Value: "2"}},
251251
{{Name: "a", Value: "3"}},
252252
{{Name: "a", Value: "4"}},
253253
},
@@ -371,7 +371,7 @@ func createAndUpload(t testing.TB, bkt objstore.Bucket, blocks []blockgenSpec) (
371371
testutil.Ok(t, err)
372372
defer func() { testutil.Ok(t, os.RemoveAll(prepareDir)) }()
373373

374-
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
374+
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
375375
defer cancel()
376376

377377
for _, b := range blocks {
@@ -407,7 +407,7 @@ func createEmptyBlock(dir string, mint int64, maxt int64, extLset labels.Labels,
407407
return ulid.ULID{}, errors.Wrap(err, "close index")
408408
}
409409

410-
w, err := index.NewWriter(path.Join(dir, uid.String(), "index"))
410+
w, err := index.NewWriter(context.Background(), path.Join(dir, uid.String(), "index"))
411411
if err != nil {
412412
return ulid.ULID{}, errors.Wrap(err, "new index")
413413
}

0 commit comments

Comments
 (0)