| 
									
										
										
										
											2017-04-11 02:59:45 +08:00
										 |  |  | // Copyright 2017 The Prometheus Authors
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 	"bufio" | 
					
						
							| 
									
										
										
										
											2020-02-06 23:58:38 +08:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"io" | 
					
						
							| 
									
										
										
										
											2021-07-02 18:08:52 +08:00
										 |  |  | 	"math" | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	"os" | 
					
						
							|  |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"runtime" | 
					
						
							|  |  |  | 	"runtime/pprof" | 
					
						
							| 
									
										
										
										
											2017-12-19 07:32:39 +08:00
										 |  |  | 	"sort" | 
					
						
							| 
									
										
										
										
											2018-05-08 19:35:06 +08:00
										 |  |  | 	"strconv" | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 	"strings" | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	"sync" | 
					
						
							| 
									
										
										
										
											2017-10-20 00:14:37 +08:00
										 |  |  | 	"text/tabwriter" | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-06 18:10:04 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/storage" | 
					
						
							| 
									
										
										
										
											2021-11-29 15:54:23 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/tsdb/chunkenc" | 
					
						
							| 
									
										
										
										
											2021-11-06 18:10:04 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/tsdb/index" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-13 05:15:40 +08:00
										 |  |  | 	"github.com/alecthomas/units" | 
					
						
							| 
									
										
										
										
											2021-06-12 00:17:59 +08:00
										 |  |  | 	"github.com/go-kit/log" | 
					
						
							| 
									
										
										
										
											2020-10-22 17:00:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-08 22:23:17 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/model/labels" | 
					
						
							| 
									
										
										
										
											2019-08-13 16:34:14 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/tsdb" | 
					
						
							|  |  |  | 	"github.com/prometheus/prometheus/tsdb/chunks" | 
					
						
							|  |  |  | 	tsdb_errors "github.com/prometheus/prometheus/tsdb/errors" | 
					
						
							| 
									
										
										
										
											2020-12-09 04:55:45 +08:00
										 |  |  | 	"github.com/prometheus/prometheus/tsdb/fileutil" | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | const timeDelta = 30000 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | type writeBenchmark struct { | 
					
						
							| 
									
										
										
										
											2017-09-09 19:11:12 +08:00
										 |  |  | 	outPath     string | 
					
						
							|  |  |  | 	samplesFile string | 
					
						
							|  |  |  | 	cleanup     bool | 
					
						
							|  |  |  | 	numMetrics  int | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 23:04:37 +08:00
										 |  |  | 	storage *tsdb.DB | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	cpuprof   *os.File | 
					
						
							|  |  |  | 	memprof   *os.File | 
					
						
							|  |  |  | 	blockprof *os.File | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 	mtxprof   *os.File | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	logger    log.Logger | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 18:14:17 +08:00
										 |  |  | func benchmarkWrite(outPath, samplesFile string, numMetrics, numScrapes int) error { | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	b := &writeBenchmark{ | 
					
						
							|  |  |  | 		outPath:     outPath, | 
					
						
							|  |  |  | 		samplesFile: samplesFile, | 
					
						
							|  |  |  | 		numMetrics:  numMetrics, | 
					
						
							|  |  |  | 		logger:      log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)), | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	if b.outPath == "" { | 
					
						
							| 
									
										
										
										
											2022-03-08 21:08:53 +08:00
										 |  |  | 		dir, err := os.MkdirTemp("", "tsdb_bench") | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		b.outPath = dir | 
					
						
							|  |  |  | 		b.cleanup = true | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if err := os.RemoveAll(b.outPath); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-10-22 16:06:44 +08:00
										 |  |  | 	if err := os.MkdirAll(b.outPath, 0o777); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	dir := filepath.Join(b.outPath, "storage") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	l := log.With(b.logger, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) | 
					
						
							| 
									
										
										
										
											2017-09-19 16:20:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	st, err := tsdb.Open(dir, l, nil, &tsdb.Options{ | 
					
						
							| 
									
										
										
										
											2020-02-12 00:34:09 +08:00
										 |  |  | 		RetentionDuration: int64(15 * 24 * time.Hour / time.Millisecond), | 
					
						
							|  |  |  | 		MinBlockDuration:  int64(2 * time.Hour / time.Millisecond), | 
					
						
							| 
									
										
										
										
											2021-06-05 22:29:32 +08:00
										 |  |  | 	}, tsdb.NewDBStats()) | 
					
						
							| 
									
										
										
										
											2016-12-21 07:02:37 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	st.DisableCompactions() | 
					
						
							| 
									
										
										
										
											2016-12-21 07:02:37 +08:00
										 |  |  | 	b.storage = st | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	var lbs []labels.Labels | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	if _, err = measureTime("readData", func() error { | 
					
						
							| 
									
										
										
										
											2017-09-09 19:11:12 +08:00
										 |  |  | 		f, err := os.Open(b.samplesFile) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		defer f.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 		lbs, err = readPrometheusLabels(f, b.numMetrics) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return nil | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	}); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 22:29:48 +08:00
										 |  |  | 	var total uint64 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	dur, err := measureTime("ingestScrapes", func() error { | 
					
						
							| 
									
										
										
										
											2019-08-13 16:34:14 +08:00
										 |  |  | 		if err := b.startProfiling(); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2021-03-09 18:14:17 +08:00
										 |  |  | 		total, err = b.ingestScrapes(lbs, numScrapes) | 
					
						
							| 
									
										
										
										
											2017-02-01 22:29:48 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-02-01 22:29:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Println(" > total samples:", total) | 
					
						
							|  |  |  | 	fmt.Println(" > samples/sec:", float64(total)/dur.Seconds()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	if _, err = measureTime("stopStorage", func() error { | 
					
						
							| 
									
										
										
										
											2016-12-21 07:02:37 +08:00
										 |  |  | 		if err := b.storage.Close(); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		return b.stopProfiling() | 
					
						
							|  |  |  | 	}); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 22:29:48 +08:00
										 |  |  | func (b *writeBenchmark) ingestScrapes(lbls []labels.Labels, scrapeCount int) (uint64, error) { | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 	var mu sync.Mutex | 
					
						
							|  |  |  | 	var total uint64 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-02 18:09:19 +08:00
										 |  |  | 	for i := 0; i < scrapeCount; i += 100 { | 
					
						
							|  |  |  | 		var wg sync.WaitGroup | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 		lbls := lbls | 
					
						
							|  |  |  | 		for len(lbls) > 0 { | 
					
						
							|  |  |  | 			l := 1000 | 
					
						
							|  |  |  | 			if len(lbls) < 1000 { | 
					
						
							|  |  |  | 				l = len(lbls) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 			batch := lbls[:l] | 
					
						
							|  |  |  | 			lbls = lbls[l:] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			wg.Add(1) | 
					
						
							|  |  |  | 			go func() { | 
					
						
							| 
									
										
										
										
											2017-06-07 19:42:53 +08:00
										 |  |  | 				n, err := b.ingestScrapesShard(batch, 100, int64(timeDelta*i)) | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 				if err != nil { | 
					
						
							|  |  |  | 					// exitWithError(err)
 | 
					
						
							|  |  |  | 					fmt.Println(" err", err) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				mu.Lock() | 
					
						
							|  |  |  | 				total += n | 
					
						
							|  |  |  | 				mu.Unlock() | 
					
						
							|  |  |  | 				wg.Done() | 
					
						
							|  |  |  | 			}() | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		wg.Wait() | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-07-13 22:15:13 +08:00
										 |  |  | 	fmt.Println("ingestion completed") | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 22:29:48 +08:00
										 |  |  | 	return total, nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-14 16:44:32 +08:00
										 |  |  | func (b *writeBenchmark) ingestScrapesShard(lbls []labels.Labels, scrapeCount int, baset int64) (uint64, error) { | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 	ts := baset | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 	type sample struct { | 
					
						
							| 
									
										
										
										
											2016-12-21 16:39:01 +08:00
										 |  |  | 		labels labels.Labels | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 		value  int64 | 
					
						
							| 
									
										
										
										
											2021-11-06 18:10:04 +08:00
										 |  |  | 		ref    *storage.SeriesRef | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-14 16:44:32 +08:00
										 |  |  | 	scrape := make([]*sample, 0, len(lbls)) | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-14 16:44:32 +08:00
										 |  |  | 	for _, m := range lbls { | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 		scrape = append(scrape, &sample{ | 
					
						
							|  |  |  | 			labels: m, | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 			value:  123456789, | 
					
						
							| 
									
										
										
										
											2017-01-11 19:54:18 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 	total := uint64(0) | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	for i := 0; i < scrapeCount; i++ { | 
					
						
							| 
									
										
										
										
											2020-07-24 22:10:51 +08:00
										 |  |  | 		app := b.storage.Appender(context.TODO()) | 
					
						
							| 
									
										
										
										
											2017-06-07 19:42:53 +08:00
										 |  |  | 		ts += timeDelta | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-08 17:04:24 +08:00
										 |  |  | 		for _, s := range scrape { | 
					
						
							| 
									
										
										
										
											2016-12-09 17:00:14 +08:00
										 |  |  | 			s.value += 1000 | 
					
						
							| 
									
										
										
										
											2017-01-13 02:18:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-06 18:10:04 +08:00
										 |  |  | 			var ref storage.SeriesRef | 
					
						
							| 
									
										
										
										
											2021-02-18 20:07:00 +08:00
										 |  |  | 			if s.ref != nil { | 
					
						
							|  |  |  | 				ref = *s.ref | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-02-02 18:09:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-18 20:07:00 +08:00
										 |  |  | 			ref, err := app.Append(ref, s.labels, ts, float64(s.value)) | 
					
						
							|  |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				panic(err) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-13 02:18:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-18 20:07:00 +08:00
										 |  |  | 			if s.ref == nil { | 
					
						
							| 
									
										
										
										
											2017-01-13 02:18:51 +08:00
										 |  |  | 				s.ref = &ref | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 			total++ | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-21 07:02:37 +08:00
										 |  |  | 		if err := app.Commit(); err != nil { | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 			return total, err | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-10 18:17:37 +08:00
										 |  |  | 	return total, nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | func (b *writeBenchmark) startProfiling() error { | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	var err error | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Start CPU profiling.
 | 
					
						
							|  |  |  | 	b.cpuprof, err = os.Create(filepath.Join(b.outPath, "cpu.prof")) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return fmt.Errorf("bench: could not create cpu profile: %w", err) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 	if err := pprof.StartCPUProfile(b.cpuprof); err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return fmt.Errorf("bench: could not start CPU profile: %w", err) | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Start memory profiling.
 | 
					
						
							|  |  |  | 	b.memprof, err = os.Create(filepath.Join(b.outPath, "mem.prof")) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return fmt.Errorf("bench: could not create memory profile: %w", err) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 	runtime.MemProfileRate = 64 * 1024 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Start fatal profiling.
 | 
					
						
							|  |  |  | 	b.blockprof, err = os.Create(filepath.Join(b.outPath, "block.prof")) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return fmt.Errorf("bench: could not create block profile: %w", err) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 	runtime.SetBlockProfileRate(20) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	b.mtxprof, err = os.Create(filepath.Join(b.outPath, "mutex.prof")) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return fmt.Errorf("bench: could not create mutex profile: %w", err) | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	runtime.SetMutexProfileFraction(20) | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | func (b *writeBenchmark) stopProfiling() error { | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	if b.cpuprof != nil { | 
					
						
							|  |  |  | 		pprof.StopCPUProfile() | 
					
						
							|  |  |  | 		b.cpuprof.Close() | 
					
						
							|  |  |  | 		b.cpuprof = nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if b.memprof != nil { | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		if err := pprof.Lookup("heap").WriteTo(b.memprof, 0); err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 			return fmt.Errorf("error writing mem profile: %w", err) | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		b.memprof.Close() | 
					
						
							|  |  |  | 		b.memprof = nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if b.blockprof != nil { | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		if err := pprof.Lookup("block").WriteTo(b.blockprof, 0); err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 			return fmt.Errorf("error writing block profile: %w", err) | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		b.blockprof.Close() | 
					
						
							|  |  |  | 		b.blockprof = nil | 
					
						
							|  |  |  | 		runtime.SetBlockProfileRate(0) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 	if b.mtxprof != nil { | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		if err := pprof.Lookup("mutex").WriteTo(b.mtxprof, 0); err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 			return fmt.Errorf("error writing mutex profile: %w", err) | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-05-14 17:51:56 +08:00
										 |  |  | 		b.mtxprof.Close() | 
					
						
							|  |  |  | 		b.mtxprof = nil | 
					
						
							|  |  |  | 		runtime.SetMutexProfileFraction(0) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-09-20 16:33:52 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | func measureTime(stage string, f func() error) (time.Duration, error) { | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	fmt.Printf(">> start stage=%s\n", stage) | 
					
						
							|  |  |  | 	start := time.Now() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	if err := f(); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return 0, err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	fmt.Printf(">> completed stage=%s duration=%s\n", stage, time.Since(start)) | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	return time.Since(start), nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | func readPrometheusLabels(r io.Reader, n int) ([]labels.Labels, error) { | 
					
						
							|  |  |  | 	scanner := bufio.NewScanner(r) | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-17 04:29:53 +08:00
										 |  |  | 	var mets []labels.Labels | 
					
						
							|  |  |  | 	hashes := map[uint64]struct{}{} | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 	i := 0 | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 	for scanner.Scan() && i < n { | 
					
						
							| 
									
										
										
										
											2017-01-17 04:29:53 +08:00
										 |  |  | 		m := make(labels.Labels, 0, 10) | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		r := strings.NewReplacer("\"", "", "{", "", "}", "") | 
					
						
							|  |  |  | 		s := r.Replace(scanner.Text()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		labelChunks := strings.Split(s, ",") | 
					
						
							|  |  |  | 		for _, labelChunk := range labelChunks { | 
					
						
							|  |  |  | 			split := strings.Split(labelChunk, ":") | 
					
						
							|  |  |  | 			m = append(m, labels.Label{Name: split[0], Value: split[1]}) | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-19 07:32:39 +08:00
										 |  |  | 		// Order of the k/v labels matters, don't assume we'll always receive them already sorted.
 | 
					
						
							|  |  |  | 		sort.Sort(m) | 
					
						
							| 
									
										
										
										
											2017-01-17 04:29:53 +08:00
										 |  |  | 		h := m.Hash() | 
					
						
							|  |  |  | 		if _, ok := hashes[h]; ok { | 
					
						
							|  |  |  | 			continue | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-17 04:29:53 +08:00
										 |  |  | 		mets = append(mets, m) | 
					
						
							|  |  |  | 		hashes[h] = struct{}{} | 
					
						
							|  |  |  | 		i++ | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-12-14 14:46:46 +08:00
										 |  |  | 	return mets, nil | 
					
						
							| 
									
										
										
										
											2016-12-08 00:30:10 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | func listBlocks(path string, humanReadable bool) error { | 
					
						
							|  |  |  | 	db, err := tsdb.OpenDBReadOnly(path, nil) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer func() { | 
					
						
							| 
									
										
										
										
											2020-10-28 23:24:58 +08:00
										 |  |  | 		err = tsdb_errors.NewMulti(err, db.Close()).Err() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	}() | 
					
						
							|  |  |  | 	blocks, err := db.Blocks() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-12-10 05:58:23 +08:00
										 |  |  | 	printBlocks(blocks, true, humanReadable) | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-10 05:58:23 +08:00
										 |  |  | func printBlocks(blocks []tsdb.BlockReader, writeHeader, humanReadable bool) { | 
					
						
							| 
									
										
										
										
											2020-12-28 23:51:45 +08:00
										 |  |  | 	tw := tabwriter.NewWriter(os.Stdout, 13, 0, 2, ' ', 0) | 
					
						
							| 
									
										
										
										
											2017-10-03 04:48:47 +08:00
										 |  |  | 	defer tw.Flush() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-10 05:58:23 +08:00
										 |  |  | 	if writeHeader { | 
					
						
							|  |  |  | 		fmt.Fprintln(tw, "BLOCK ULID\tMIN TIME\tMAX TIME\tDURATION\tNUM SAMPLES\tNUM CHUNKS\tNUM SERIES\tSIZE") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-03 04:48:47 +08:00
										 |  |  | 	for _, b := range blocks { | 
					
						
							| 
									
										
										
										
											2017-10-11 17:02:57 +08:00
										 |  |  | 		meta := b.Meta() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-03 04:48:47 +08:00
										 |  |  | 		fmt.Fprintf(tw, | 
					
						
							| 
									
										
										
										
											2020-10-13 05:15:40 +08:00
										 |  |  | 			"%v\t%v\t%v\t%v\t%v\t%v\t%v\t%v\n", | 
					
						
							| 
									
										
										
										
											2017-10-11 17:02:57 +08:00
										 |  |  | 			meta.ULID, | 
					
						
							| 
									
										
										
										
											2018-05-08 19:35:06 +08:00
										 |  |  | 			getFormatedTime(meta.MinTime, humanReadable), | 
					
						
							|  |  |  | 			getFormatedTime(meta.MaxTime, humanReadable), | 
					
						
							| 
									
										
										
										
											2020-07-24 21:31:20 +08:00
										 |  |  | 			time.Duration(meta.MaxTime-meta.MinTime)*time.Millisecond, | 
					
						
							| 
									
										
										
										
											2017-10-11 17:02:57 +08:00
										 |  |  | 			meta.Stats.NumSamples, | 
					
						
							|  |  |  | 			meta.Stats.NumChunks, | 
					
						
							|  |  |  | 			meta.Stats.NumSeries, | 
					
						
							| 
									
										
										
										
											2020-10-13 05:15:40 +08:00
										 |  |  | 			getFormatedBytes(b.Size(), humanReadable), | 
					
						
							| 
									
										
										
										
											2017-10-03 04:48:47 +08:00
										 |  |  | 		) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-05-08 19:35:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | func getFormatedTime(timestamp int64, humanReadable bool) string { | 
					
						
							|  |  |  | 	if humanReadable { | 
					
						
							| 
									
										
										
										
											2020-03-30 00:35:39 +08:00
										 |  |  | 		return time.Unix(timestamp/1000, 0).UTC().String() | 
					
						
							| 
									
										
										
										
											2018-05-08 19:35:06 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return strconv.FormatInt(timestamp, 10) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-13 05:15:40 +08:00
										 |  |  | func getFormatedBytes(bytes int64, humanReadable bool) string { | 
					
						
							|  |  |  | 	if humanReadable { | 
					
						
							|  |  |  | 		return units.Base2Bytes(bytes).String() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return strconv.FormatInt(bytes, 10) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | func openBlock(path, blockID string) (*tsdb.DBReadOnly, tsdb.BlockReader, error) { | 
					
						
							|  |  |  | 	db, err := tsdb.OpenDBReadOnly(path, nil) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	blocks, err := db.Blocks() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var block tsdb.BlockReader | 
					
						
							|  |  |  | 	if blockID != "" { | 
					
						
							|  |  |  | 		for _, b := range blocks { | 
					
						
							|  |  |  | 			if b.Meta().ULID.String() == blockID { | 
					
						
							|  |  |  | 				block = b | 
					
						
							|  |  |  | 				break | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else if len(blocks) > 0 { | 
					
						
							|  |  |  | 		block = blocks[len(blocks)-1] | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if block == nil { | 
					
						
							|  |  |  | 		return nil, nil, fmt.Errorf("block %s not found", blockID) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return db, block, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 16:49:00 +08:00
										 |  |  | func analyzeBlock(path, blockID string, limit int, runExtended bool) error { | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	db, block, err := openBlock(path, blockID) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer func() { | 
					
						
							| 
									
										
										
										
											2020-10-28 23:24:58 +08:00
										 |  |  | 		err = tsdb_errors.NewMulti(err, db.Close()).Err() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	}() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	meta := block.Meta() | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	fmt.Printf("Block ID: %s\n", meta.ULID) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	// Presume 1ms resolution that Prometheus uses.
 | 
					
						
							|  |  |  | 	fmt.Printf("Duration: %s\n", (time.Duration(meta.MaxTime-meta.MinTime) * 1e6).String()) | 
					
						
							|  |  |  | 	fmt.Printf("Series: %d\n", meta.Stats.NumSeries) | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	ir, err := block.Index() | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	defer ir.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	allLabelNames, err := ir.LabelNames() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	fmt.Printf("Label names: %d\n", len(allLabelNames)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	type postingInfo struct { | 
					
						
							|  |  |  | 		key    string | 
					
						
							|  |  |  | 		metric uint64 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	postingInfos := []postingInfo{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	printInfo := func(postingInfos []postingInfo) { | 
					
						
							|  |  |  | 		sort.Slice(postingInfos, func(i, j int) bool { return postingInfos[i].metric > postingInfos[j].metric }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for i, pc := range postingInfos { | 
					
						
							|  |  |  | 			if i >= limit { | 
					
						
							|  |  |  | 				break | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2020-06-22 17:38:10 +08:00
										 |  |  | 			fmt.Printf("%d %s\n", pc.metric, pc.key) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	labelsUncovered := map[string]uint64{} | 
					
						
							|  |  |  | 	labelpairsUncovered := map[string]uint64{} | 
					
						
							|  |  |  | 	labelpairsCount := map[string]uint64{} | 
					
						
							|  |  |  | 	entries := 0 | 
					
						
							|  |  |  | 	p, err := ir.Postings("", "") // The special all key.
 | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	lbls := labels.Labels{} | 
					
						
							|  |  |  | 	chks := []chunks.Meta{} | 
					
						
							|  |  |  | 	for p.Next() { | 
					
						
							| 
									
										
										
										
											2019-01-03 00:48:42 +08:00
										 |  |  | 		if err = ir.Series(p.At(), &lbls, &chks); err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2019-01-03 00:48:42 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		// Amount of the block time range not covered by this series.
 | 
					
						
							|  |  |  | 		uncovered := uint64(meta.MaxTime-meta.MinTime) - uint64(chks[len(chks)-1].MaxTime-chks[0].MinTime) | 
					
						
							|  |  |  | 		for _, lbl := range lbls { | 
					
						
							|  |  |  | 			key := lbl.Name + "=" + lbl.Value | 
					
						
							|  |  |  | 			labelsUncovered[lbl.Name] += uncovered | 
					
						
							|  |  |  | 			labelpairsUncovered[key] += uncovered | 
					
						
							| 
									
										
										
										
											2019-01-03 00:48:42 +08:00
										 |  |  | 			labelpairsCount[key]++ | 
					
						
							|  |  |  | 			entries++ | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if p.Err() != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return p.Err() | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	fmt.Printf("Postings (unique label pairs): %d\n", len(labelpairsUncovered)) | 
					
						
							|  |  |  | 	fmt.Printf("Postings entries (total label pairs): %d\n", entries) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							|  |  |  | 	for k, m := range labelpairsUncovered { | 
					
						
							|  |  |  | 		postingInfos = append(postingInfos, postingInfo{k, uint64(float64(m) / float64(meta.MaxTime-meta.MinTime))}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Printf("\nLabel pairs most involved in churning:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							|  |  |  | 	for k, m := range labelsUncovered { | 
					
						
							|  |  |  | 		postingInfos = append(postingInfos, postingInfo{k, uint64(float64(m) / float64(meta.MaxTime-meta.MinTime))}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Printf("\nLabel names most involved in churning:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							|  |  |  | 	for k, m := range labelpairsCount { | 
					
						
							|  |  |  | 		postingInfos = append(postingInfos, postingInfo{k, m}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Printf("\nMost common label pairs:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-21 16:07:50 +08:00
										 |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							|  |  |  | 	for _, n := range allLabelNames { | 
					
						
							| 
									
										
										
										
											2020-06-25 21:10:29 +08:00
										 |  |  | 		values, err := ir.SortedLabelValues(n) | 
					
						
							| 
									
										
										
										
											2019-06-21 16:07:50 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2019-06-21 16:07:50 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		var cumulativeLength uint64 | 
					
						
							| 
									
										
											  
											
												Replace StringTuples with []string
Benchmarks show slight cpu/allocs improvements.
benchmark                                                               old ns/op      new ns/op      delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               269978625      235305110      -12.84%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       129739974      121646193      -6.24%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       123826274      122056253      -1.43%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      126962188      130038235      +2.42%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             6423653989     5991126455     -6.73%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             6934647521     7033370634     +1.42%
BenchmarkPostingsForMatchers/Head/i=~""-4                               1177781285     1121497736     -4.78%
BenchmarkPostingsForMatchers/Head/i!=""-4                               7033680256     7246094991     +3.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               293702332      287440212      -2.13%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        307628268      307039964      -0.19%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         512247746      480003862      -6.29%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 361199794      367066917      +1.62%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               478863761      476037784      -0.59%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              103394659      102902098      -0.48%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        482552781      475453903      -1.47%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      559257389      589297047      +5.37%
BenchmarkPostingsForMatchers/Block/n="1"-4                              36492          37012          +1.42%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      557788         611903         +9.70%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      554443         573814         +3.49%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     553227         553826         +0.11%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            113855090      111707221      -1.89%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            133994674      136520728      +1.89%
BenchmarkPostingsForMatchers/Block/i=~""-4                              38138091       36299898       -4.82%
BenchmarkPostingsForMatchers/Block/i!=""-4                              28861213       27396723       -5.07%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              112699941      110853868      -1.64%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       113198026      111389742      -1.60%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        28994069       27363804       -5.62%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                29709406       28589223       -3.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              134695119      135736971      +0.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             26783286       25826928       -3.57%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       134733254      134116739      -0.46%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     160713937      158802768      -1.19%
benchmark                                                               old allocs     new allocs     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               36             36             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      42             40             -4.76%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             61             59             -3.28%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             100088         100087         -0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               100053         100051         -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               100087         100085         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               44             42             -4.55%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        50             48             -4.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         100076         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 100077         100075         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               100077         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              11167          11165          -0.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        100082         100080         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      111265         111261         -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              6              6              +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     15             13             -13.33%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            12             10             -16.67%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            100040         100038         -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              100045         100043         -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              100041         100039         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              17             15             -11.76%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       23             21             -8.70%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        100046         100044         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                100050         100048         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              100049         100047         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             11150          11148          -0.02%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       100055         100053         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     111238         111234         -0.00%
benchmark                                                               old bytes     new bytes     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               10887816      10887817      +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      5456792       5456712       -0.00%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             258254408     258254328     -0.00%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             273912888     273912904     +0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               17266680      17266600      -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               273912416     273912336     -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               7062578       7062498       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        7062770       7062690       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         28152346      28152266      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 22721178      22721098      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               22721336      22721224      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              3623804       3623733       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        22721480      22721400      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      24816652      24816444      -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              296           296           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     1544          1464          -5.18%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            1606114       1606045       -0.00%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            17264709      17264629      -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              17264780      17264696      -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              17264680      17264600      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              1606253       1606165       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       1606445       1606348       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        17264808      17264728      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                17264936      17264856      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              17264965      17264885      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             3148262       3148182       -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       17265141      17265061      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     20416944      20416784      -0.00%
Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
											
										 
											2020-01-01 19:38:01 +08:00
										 |  |  | 		for _, str := range values { | 
					
						
							|  |  |  | 			cumulativeLength += uint64(len(str)) | 
					
						
							| 
									
										
										
										
											2019-06-21 16:07:50 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		postingInfos = append(postingInfos, postingInfo{n, cumulativeLength}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Printf("\nLabel names with highest cumulative label value length:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							|  |  |  | 	for _, n := range allLabelNames { | 
					
						
							| 
									
										
										
										
											2020-06-25 21:10:29 +08:00
										 |  |  | 		lv, err := ir.SortedLabelValues(n) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
											  
											
												Replace StringTuples with []string
Benchmarks show slight cpu/allocs improvements.
benchmark                                                               old ns/op      new ns/op      delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               269978625      235305110      -12.84%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       129739974      121646193      -6.24%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       123826274      122056253      -1.43%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      126962188      130038235      +2.42%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             6423653989     5991126455     -6.73%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             6934647521     7033370634     +1.42%
BenchmarkPostingsForMatchers/Head/i=~""-4                               1177781285     1121497736     -4.78%
BenchmarkPostingsForMatchers/Head/i!=""-4                               7033680256     7246094991     +3.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               293702332      287440212      -2.13%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        307628268      307039964      -0.19%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         512247746      480003862      -6.29%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 361199794      367066917      +1.62%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               478863761      476037784      -0.59%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              103394659      102902098      -0.48%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        482552781      475453903      -1.47%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      559257389      589297047      +5.37%
BenchmarkPostingsForMatchers/Block/n="1"-4                              36492          37012          +1.42%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      557788         611903         +9.70%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      554443         573814         +3.49%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     553227         553826         +0.11%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            113855090      111707221      -1.89%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            133994674      136520728      +1.89%
BenchmarkPostingsForMatchers/Block/i=~""-4                              38138091       36299898       -4.82%
BenchmarkPostingsForMatchers/Block/i!=""-4                              28861213       27396723       -5.07%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              112699941      110853868      -1.64%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       113198026      111389742      -1.60%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        28994069       27363804       -5.62%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                29709406       28589223       -3.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              134695119      135736971      +0.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             26783286       25826928       -3.57%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       134733254      134116739      -0.46%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     160713937      158802768      -1.19%
benchmark                                                               old allocs     new allocs     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               36             36             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      42             40             -4.76%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             61             59             -3.28%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             100088         100087         -0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               100053         100051         -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               100087         100085         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               44             42             -4.55%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        50             48             -4.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         100076         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 100077         100075         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               100077         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              11167          11165          -0.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        100082         100080         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      111265         111261         -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              6              6              +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     15             13             -13.33%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            12             10             -16.67%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            100040         100038         -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              100045         100043         -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              100041         100039         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              17             15             -11.76%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       23             21             -8.70%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        100046         100044         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                100050         100048         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              100049         100047         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             11150          11148          -0.02%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       100055         100053         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     111238         111234         -0.00%
benchmark                                                               old bytes     new bytes     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               10887816      10887817      +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      5456792       5456712       -0.00%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             258254408     258254328     -0.00%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             273912888     273912904     +0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               17266680      17266600      -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               273912416     273912336     -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               7062578       7062498       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        7062770       7062690       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         28152346      28152266      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 22721178      22721098      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               22721336      22721224      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              3623804       3623733       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        22721480      22721400      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      24816652      24816444      -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              296           296           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     1544          1464          -5.18%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            1606114       1606045       -0.00%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            17264709      17264629      -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              17264780      17264696      -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              17264680      17264600      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              1606253       1606165       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       1606445       1606348       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        17264808      17264728      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                17264936      17264856      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              17264965      17264885      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             3148262       3148182       -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       17265141      17265061      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     20416944      20416784      -0.00%
Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
											
										 
											2020-01-01 19:38:01 +08:00
										 |  |  | 		postingInfos = append(postingInfos, postingInfo{n, uint64(len(lv))}) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	fmt.Printf("\nHighest cardinality labels:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	postingInfos = postingInfos[:0] | 
					
						
							| 
									
										
										
										
											2020-06-25 21:10:29 +08:00
										 |  |  | 	lv, err := ir.SortedLabelValues("__name__") | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
											  
											
												Replace StringTuples with []string
Benchmarks show slight cpu/allocs improvements.
benchmark                                                               old ns/op      new ns/op      delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               269978625      235305110      -12.84%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       129739974      121646193      -6.24%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       123826274      122056253      -1.43%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      126962188      130038235      +2.42%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             6423653989     5991126455     -6.73%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             6934647521     7033370634     +1.42%
BenchmarkPostingsForMatchers/Head/i=~""-4                               1177781285     1121497736     -4.78%
BenchmarkPostingsForMatchers/Head/i!=""-4                               7033680256     7246094991     +3.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               293702332      287440212      -2.13%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        307628268      307039964      -0.19%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         512247746      480003862      -6.29%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 361199794      367066917      +1.62%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               478863761      476037784      -0.59%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              103394659      102902098      -0.48%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        482552781      475453903      -1.47%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      559257389      589297047      +5.37%
BenchmarkPostingsForMatchers/Block/n="1"-4                              36492          37012          +1.42%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      557788         611903         +9.70%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      554443         573814         +3.49%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     553227         553826         +0.11%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            113855090      111707221      -1.89%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            133994674      136520728      +1.89%
BenchmarkPostingsForMatchers/Block/i=~""-4                              38138091       36299898       -4.82%
BenchmarkPostingsForMatchers/Block/i!=""-4                              28861213       27396723       -5.07%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              112699941      110853868      -1.64%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       113198026      111389742      -1.60%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        28994069       27363804       -5.62%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                29709406       28589223       -3.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              134695119      135736971      +0.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             26783286       25826928       -3.57%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       134733254      134116739      -0.46%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     160713937      158802768      -1.19%
benchmark                                                               old allocs     new allocs     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               36             36             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      42             40             -4.76%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             61             59             -3.28%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             100088         100087         -0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               100053         100051         -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               100087         100085         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               44             42             -4.55%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        50             48             -4.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         100076         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 100077         100075         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               100077         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              11167          11165          -0.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        100082         100080         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      111265         111261         -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              6              6              +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     15             13             -13.33%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            12             10             -16.67%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            100040         100038         -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              100045         100043         -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              100041         100039         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              17             15             -11.76%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       23             21             -8.70%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        100046         100044         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                100050         100048         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              100049         100047         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             11150          11148          -0.02%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       100055         100053         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     111238         111234         -0.00%
benchmark                                                               old bytes     new bytes     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               10887816      10887817      +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      5456792       5456712       -0.00%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             258254408     258254328     -0.00%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             273912888     273912904     +0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               17266680      17266600      -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               273912416     273912336     -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               7062578       7062498       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        7062770       7062690       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         28152346      28152266      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 22721178      22721098      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               22721336      22721224      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              3623804       3623733       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        22721480      22721400      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      24816652      24816444      -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              296           296           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     1544          1464          -5.18%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            1606114       1606045       -0.00%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            17264709      17264629      -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              17264780      17264696      -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              17264680      17264600      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              1606253       1606165       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       1606445       1606348       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        17264808      17264728      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                17264936      17264856      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              17264965      17264885      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             3148262       3148182       -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       17265141      17265061      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     20416944      20416784      -0.00%
Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
											
										 
											2020-01-01 19:38:01 +08:00
										 |  |  | 	for _, n := range lv { | 
					
						
							|  |  |  | 		postings, err := ir.Postings("__name__", n) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return err | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
											  
											
												Replace StringTuples with []string
Benchmarks show slight cpu/allocs improvements.
benchmark                                                               old ns/op      new ns/op      delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               269978625      235305110      -12.84%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       129739974      121646193      -6.24%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       123826274      122056253      -1.43%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      126962188      130038235      +2.42%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             6423653989     5991126455     -6.73%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             6934647521     7033370634     +1.42%
BenchmarkPostingsForMatchers/Head/i=~""-4                               1177781285     1121497736     -4.78%
BenchmarkPostingsForMatchers/Head/i!=""-4                               7033680256     7246094991     +3.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               293702332      287440212      -2.13%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        307628268      307039964      -0.19%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         512247746      480003862      -6.29%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 361199794      367066917      +1.62%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               478863761      476037784      -0.59%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              103394659      102902098      -0.48%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        482552781      475453903      -1.47%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      559257389      589297047      +5.37%
BenchmarkPostingsForMatchers/Block/n="1"-4                              36492          37012          +1.42%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      557788         611903         +9.70%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      554443         573814         +3.49%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     553227         553826         +0.11%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            113855090      111707221      -1.89%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            133994674      136520728      +1.89%
BenchmarkPostingsForMatchers/Block/i=~""-4                              38138091       36299898       -4.82%
BenchmarkPostingsForMatchers/Block/i!=""-4                              28861213       27396723       -5.07%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              112699941      110853868      -1.64%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       113198026      111389742      -1.60%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        28994069       27363804       -5.62%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                29709406       28589223       -3.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              134695119      135736971      +0.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             26783286       25826928       -3.57%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       134733254      134116739      -0.46%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     160713937      158802768      -1.19%
benchmark                                                               old allocs     new allocs     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               36             36             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      42             40             -4.76%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             61             59             -3.28%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             100088         100087         -0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               100053         100051         -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               100087         100085         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               44             42             -4.55%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        50             48             -4.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         100076         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 100077         100075         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               100077         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              11167          11165          -0.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        100082         100080         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      111265         111261         -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              6              6              +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     15             13             -13.33%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            12             10             -16.67%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            100040         100038         -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              100045         100043         -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              100041         100039         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              17             15             -11.76%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       23             21             -8.70%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        100046         100044         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                100050         100048         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              100049         100047         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             11150          11148          -0.02%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       100055         100053         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     111238         111234         -0.00%
benchmark                                                               old bytes     new bytes     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               10887816      10887817      +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      5456792       5456712       -0.00%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             258254408     258254328     -0.00%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             273912888     273912904     +0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               17266680      17266600      -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               273912416     273912336     -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               7062578       7062498       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        7062770       7062690       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         28152346      28152266      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 22721178      22721098      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               22721336      22721224      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              3623804       3623733       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        22721480      22721400      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      24816652      24816444      -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              296           296           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     1544          1464          -5.18%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            1606114       1606045       -0.00%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            17264709      17264629      -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              17264780      17264696      -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              17264680      17264600      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              1606253       1606165       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       1606445       1606348       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        17264808      17264728      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                17264936      17264856      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              17264965      17264885      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             3148262       3148182       -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       17265141      17265061      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     20416944      20416784      -0.00%
Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
											
										 
											2020-01-01 19:38:01 +08:00
										 |  |  | 		count := 0 | 
					
						
							|  |  |  | 		for postings.Next() { | 
					
						
							|  |  |  | 			count++ | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if postings.Err() != nil { | 
					
						
							|  |  |  | 			return postings.Err() | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
											  
											
												Replace StringTuples with []string
Benchmarks show slight cpu/allocs improvements.
benchmark                                                               old ns/op      new ns/op      delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               269978625      235305110      -12.84%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       129739974      121646193      -6.24%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       123826274      122056253      -1.43%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      126962188      130038235      +2.42%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             6423653989     5991126455     -6.73%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             6934647521     7033370634     +1.42%
BenchmarkPostingsForMatchers/Head/i=~""-4                               1177781285     1121497736     -4.78%
BenchmarkPostingsForMatchers/Head/i!=""-4                               7033680256     7246094991     +3.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               293702332      287440212      -2.13%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        307628268      307039964      -0.19%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         512247746      480003862      -6.29%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 361199794      367066917      +1.62%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               478863761      476037784      -0.59%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              103394659      102902098      -0.48%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        482552781      475453903      -1.47%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      559257389      589297047      +5.37%
BenchmarkPostingsForMatchers/Block/n="1"-4                              36492          37012          +1.42%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      557788         611903         +9.70%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      554443         573814         +3.49%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     553227         553826         +0.11%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            113855090      111707221      -1.89%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            133994674      136520728      +1.89%
BenchmarkPostingsForMatchers/Block/i=~""-4                              38138091       36299898       -4.82%
BenchmarkPostingsForMatchers/Block/i!=""-4                              28861213       27396723       -5.07%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              112699941      110853868      -1.64%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       113198026      111389742      -1.60%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        28994069       27363804       -5.62%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                29709406       28589223       -3.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              134695119      135736971      +0.77%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             26783286       25826928       -3.57%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       134733254      134116739      -0.46%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     160713937      158802768      -1.19%
benchmark                                                               old allocs     new allocs     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               36             36             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       38             38             +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      42             40             -4.76%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             61             59             -3.28%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             100088         100087         -0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               100053         100051         -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               100087         100085         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               44             42             -4.55%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        50             48             -4.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         100076         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 100077         100075         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               100077         100074         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              11167          11165          -0.02%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        100082         100080         -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      111265         111261         -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              6              6              +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      11             11             +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     15             13             -13.33%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            12             10             -16.67%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            100040         100038         -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              100045         100043         -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              100041         100039         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              17             15             -11.76%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       23             21             -8.70%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        100046         100044         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                100050         100048         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              100049         100047         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             11150          11148          -0.02%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       100055         100053         -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     111238         111234         -0.00%
benchmark                                                               old bytes     new bytes     delta
BenchmarkPostingsForMatchers/Head/n="1"-4                               10887816      10887817      +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j="foo"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/j="foo",n="1"-4                       5456648       5456648       +0.00%
BenchmarkPostingsForMatchers/Head/n="1",j!="foo"-4                      5456792       5456712       -0.00%
BenchmarkPostingsForMatchers/Head/i=~".*"-4                             258254408     258254328     -0.00%
BenchmarkPostingsForMatchers/Head/i=~".+"-4                             273912888     273912904     +0.00%
BenchmarkPostingsForMatchers/Head/i=~""-4                               17266680      17266600      -0.00%
BenchmarkPostingsForMatchers/Head/i!=""-4                               273912416     273912336     -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",j="foo"-4               7062578       7062498       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".*",i!="2",j="foo"-4        7062770       7062690       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!=""-4                         28152346      28152266      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i!="",j="foo"-4                 22721178      22721098      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",j="foo"-4               22721336      22721224      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~"1.+",j="foo"-4              3623804       3623733       -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!="2",j="foo"-4        22721480      22721400      -0.00%
BenchmarkPostingsForMatchers/Head/n="1",i=~".+",i!~"2.*",j="foo"-4      24816652      24816444      -0.00%
BenchmarkPostingsForMatchers/Block/n="1"-4                              296           296           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j="foo"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/j="foo",n="1"-4                      424           424           +0.00%
BenchmarkPostingsForMatchers/Block/n="1",j!="foo"-4                     1544          1464          -5.18%
BenchmarkPostingsForMatchers/Block/i=~".*"-4                            1606114       1606045       -0.00%
BenchmarkPostingsForMatchers/Block/i=~".+"-4                            17264709      17264629      -0.00%
BenchmarkPostingsForMatchers/Block/i=~""-4                              17264780      17264696      -0.00%
BenchmarkPostingsForMatchers/Block/i!=""-4                              17264680      17264600      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",j="foo"-4              1606253       1606165       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i=~".*",i!="2",j="foo"-4       1606445       1606348       -0.01%
BenchmarkPostingsForMatchers/Block/n="1",i!=""-4                        17264808      17264728      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i!="",j="foo"-4                17264936      17264856      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",j="foo"-4              17264965      17264885      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~"1.+",j="foo"-4             3148262       3148182       -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!="2",j="foo"-4       17265141      17265061      -0.00%
BenchmarkPostingsForMatchers/Block/n="1",i=~".+",i!~"2.*",j="foo"-4     20416944      20416784      -0.00%
Signed-off-by: Brian Brazil <brian.brazil@robustperception.io>
											
										 
											2020-01-01 19:38:01 +08:00
										 |  |  | 		postingInfos = append(postingInfos, postingInfo{n, uint64(count)}) | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	fmt.Printf("\nHighest cardinality metric names:\n") | 
					
						
							|  |  |  | 	printInfo(postingInfos) | 
					
						
							| 
									
										
										
										
											2021-07-02 18:08:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 16:49:00 +08:00
										 |  |  | 	if runExtended { | 
					
						
							|  |  |  | 		return analyzeCompaction(block, ir) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2021-07-02 18:08:52 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func analyzeCompaction(block tsdb.BlockReader, indexr tsdb.IndexReader) (err error) { | 
					
						
							|  |  |  | 	postingsr, err := indexr.Postings(index.AllPostingsKey()) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	chunkr, err := block.Chunks() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer func() { | 
					
						
							|  |  |  | 		err = tsdb_errors.NewMulti(err, chunkr.Close()).Err() | 
					
						
							|  |  |  | 	}() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const maxSamplesPerChunk = 120 | 
					
						
							|  |  |  | 	nBuckets := 10 | 
					
						
							|  |  |  | 	histogram := make([]int, nBuckets) | 
					
						
							|  |  |  | 	totalChunks := 0 | 
					
						
							|  |  |  | 	for postingsr.Next() { | 
					
						
							| 
									
										
										
										
											2021-10-22 16:06:44 +08:00
										 |  |  | 		lbsl := labels.Labels{} | 
					
						
							| 
									
										
										
										
											2021-07-02 18:08:52 +08:00
										 |  |  | 		var chks []chunks.Meta | 
					
						
							|  |  |  | 		if err := indexr.Series(postingsr.At(), &lbsl, &chks); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		for _, chk := range chks { | 
					
						
							|  |  |  | 			// Load the actual data of the chunk.
 | 
					
						
							| 
									
										
										
										
											2022-09-21 01:05:50 +08:00
										 |  |  | 			chk, err := chunkr.Chunk(chk) | 
					
						
							| 
									
										
										
										
											2021-07-02 18:08:52 +08:00
										 |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			chunkSize := math.Min(float64(chk.NumSamples()), maxSamplesPerChunk) | 
					
						
							|  |  |  | 			// Calculate the bucket for the chunk and increment it in the histogram.
 | 
					
						
							|  |  |  | 			bucket := int(math.Ceil(float64(nBuckets)*chunkSize/maxSamplesPerChunk)) - 1 | 
					
						
							|  |  |  | 			histogram[bucket]++ | 
					
						
							|  |  |  | 			totalChunks++ | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fmt.Printf("\nCompaction analysis:\n") | 
					
						
							|  |  |  | 	fmt.Println("Fullness: Amount of samples in chunks (100% is 120 samples)") | 
					
						
							|  |  |  | 	// Normalize absolute counts to percentages and print them out.
 | 
					
						
							|  |  |  | 	for bucket, count := range histogram { | 
					
						
							|  |  |  | 		percentage := 100.0 * count / totalChunks | 
					
						
							|  |  |  | 		fmt.Printf("%7d%%: ", (bucket+1)*10) | 
					
						
							|  |  |  | 		for j := 0; j < percentage; j++ { | 
					
						
							|  |  |  | 			fmt.Printf("#") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fmt.Println() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2018-12-29 01:06:12 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | func dumpSamples(path string, mint, maxt int64) (err error) { | 
					
						
							|  |  |  | 	db, err := tsdb.OpenDBReadOnly(path, nil) | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return err | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	defer func() { | 
					
						
							| 
									
										
										
										
											2020-10-28 23:24:58 +08:00
										 |  |  | 		err = tsdb_errors.NewMulti(err, db.Close()).Err() | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	}() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 	q, err := db.Querier(context.TODO(), mint, maxt) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer q.Close() | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-10 00:57:31 +08:00
										 |  |  | 	ss := q.Select(false, nil, labels.MustNewMatcher(labels.MatchRegexp, "", ".*")) | 
					
						
							| 
									
										
										
										
											2020-02-06 23:58:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 	for ss.Next() { | 
					
						
							|  |  |  | 		series := ss.At() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 		lbs := series.Labels() | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 		it := series.Iterator() | 
					
						
							| 
									
										
										
										
											2021-11-29 15:54:23 +08:00
										 |  |  | 		for it.Next() == chunkenc.ValFloat { | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 			ts, val := it.At() | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 			fmt.Printf("%s %g %d\n", lbs, val, ts) | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if it.Err() != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 			return ss.Err() | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-10 00:57:31 +08:00
										 |  |  | 	if ws := ss.Warnings(); len(ws) > 0 { | 
					
						
							| 
									
										
										
										
											2020-10-28 23:24:58 +08:00
										 |  |  | 		return tsdb_errors.NewMulti(ws...).Err() | 
					
						
							| 
									
										
										
										
											2020-06-10 00:57:31 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 	if ss.Err() != nil { | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 		return ss.Err() | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-07-23 16:04:48 +08:00
										 |  |  | 	return nil | 
					
						
							| 
									
										
										
										
											2019-02-25 21:51:33 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-07-24 02:35:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func checkErr(err error) int { | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fmt.Fprintln(os.Stderr, err) | 
					
						
							|  |  |  | 		return 1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return 0 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-11-26 13:07:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 16:06:44 +08:00
										 |  |  | func backfillOpenMetrics(path, outputDir string, humanReadable, quiet bool, maxBlockDuration time.Duration) int { | 
					
						
							| 
									
										
										
										
											2020-12-09 04:55:45 +08:00
										 |  |  | 	inputFile, err := fileutil.OpenMmapFile(path) | 
					
						
							| 
									
										
										
										
											2020-11-26 13:07:06 +08:00
										 |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2021-02-02 04:18:42 +08:00
										 |  |  | 		return checkErr(err) | 
					
						
							| 
									
										
										
										
											2020-11-26 13:07:06 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-12-09 16:23:39 +08:00
										 |  |  | 	defer inputFile.Close() | 
					
						
							| 
									
										
										
										
											2020-12-25 12:36:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-22 16:06:44 +08:00
										 |  |  | 	if err := os.MkdirAll(outputDir, 0o777); err != nil { | 
					
						
							| 
									
										
										
										
											2022-05-24 14:58:59 +08:00
										 |  |  | 		return checkErr(fmt.Errorf("create output dir: %w", err)) | 
					
						
							| 
									
										
										
										
											2020-12-25 12:36:36 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-12-28 23:18:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-29 17:23:38 +08:00
										 |  |  | 	return checkErr(backfill(5000, inputFile.Bytes(), outputDir, humanReadable, quiet, maxBlockDuration)) | 
					
						
							| 
									
										
										
										
											2020-11-26 13:07:06 +08:00
										 |  |  | } |