mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Merge "Remove unused labelname -> fingerprints index."
This commit is contained in:
commit
0bb33b6525
|
@ -78,72 +78,6 @@ func GetFingerprintsForLabelSetTests(p MetricPersistence, t test.Tester) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetFingerprintsForLabelNameTests(p MetricPersistence, t test.Tester) {
|
|
||||||
testAppendSamples(p, &clientmodel.Sample{
|
|
||||||
Value: 0,
|
|
||||||
Timestamp: 0,
|
|
||||||
Metric: clientmodel.Metric{
|
|
||||||
clientmodel.MetricNameLabel: "my_metric",
|
|
||||||
"request_type": "your_mom",
|
|
||||||
"language": "english",
|
|
||||||
},
|
|
||||||
}, t)
|
|
||||||
|
|
||||||
testAppendSamples(p, &clientmodel.Sample{
|
|
||||||
Value: 0,
|
|
||||||
Timestamp: 0,
|
|
||||||
Metric: clientmodel.Metric{
|
|
||||||
clientmodel.MetricNameLabel: "my_metric",
|
|
||||||
"request_type": "your_dad",
|
|
||||||
"sprache": "deutsch",
|
|
||||||
},
|
|
||||||
}, t)
|
|
||||||
|
|
||||||
b := clientmodel.MetricNameLabel
|
|
||||||
result, err := p.GetFingerprintsForLabelName(b)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result) != 2 {
|
|
||||||
t.Errorf("Expected two elements.")
|
|
||||||
}
|
|
||||||
|
|
||||||
b = clientmodel.LabelName("request_type")
|
|
||||||
result, err = p.GetFingerprintsForLabelName(b)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result) != 2 {
|
|
||||||
t.Errorf("Expected two elements.")
|
|
||||||
}
|
|
||||||
|
|
||||||
b = clientmodel.LabelName("language")
|
|
||||||
result, err = p.GetFingerprintsForLabelName(b)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result) != 1 {
|
|
||||||
t.Errorf("Expected one element.")
|
|
||||||
}
|
|
||||||
|
|
||||||
b = clientmodel.LabelName("sprache")
|
|
||||||
result, err = p.GetFingerprintsForLabelName(b)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(result) != 1 {
|
|
||||||
t.Errorf("Expected one element.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetMetricForFingerprintTests(p MetricPersistence, t test.Tester) {
|
func GetMetricForFingerprintTests(p MetricPersistence, t test.Tester) {
|
||||||
testAppendSamples(p, &clientmodel.Sample{
|
testAppendSamples(p, &clientmodel.Sample{
|
||||||
Value: 0,
|
Value: 0,
|
||||||
|
@ -388,18 +322,6 @@ func BenchmarkLevelDBGetFingerprintsForLabelSet(b *testing.B) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var testLevelDBGetFingerprintsForLabelName = buildLevelDBTestPersistence("get_fingerprints_for_labelname", GetFingerprintsForLabelNameTests)
|
|
||||||
|
|
||||||
func TestLevelDBGetFingerprintsForLabelName(t *testing.T) {
|
|
||||||
testLevelDBGetFingerprintsForLabelName(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkLevelDBGetFingerprintsForLabelName(b *testing.B) {
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
testLevelDBGetFingerprintsForLabelName(b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var testLevelDBGetMetricForFingerprint = buildLevelDBTestPersistence("get_metric_for_fingerprint", GetMetricForFingerprintTests)
|
var testLevelDBGetMetricForFingerprint = buildLevelDBTestPersistence("get_metric_for_fingerprint", GetMetricForFingerprintTests)
|
||||||
|
|
||||||
func TestLevelDBGetMetricForFingerprint(t *testing.T) {
|
func TestLevelDBGetMetricForFingerprint(t *testing.T) {
|
||||||
|
@ -448,18 +370,6 @@ func BenchmarkMemoryGetFingerprintsForLabelSet(b *testing.B) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var testMemoryGetFingerprintsForLabelName = buildMemoryTestPersistence(GetFingerprintsForLabelNameTests)
|
|
||||||
|
|
||||||
func TestMemoryGetFingerprintsForLabelName(t *testing.T) {
|
|
||||||
testMemoryGetFingerprintsForLabelName(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkMemoryGetFingerprintsForLabelName(b *testing.B) {
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
testMemoryGetFingerprintsForLabelName(b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var testMemoryGetMetricForFingerprint = buildMemoryTestPersistence(GetMetricForFingerprintTests)
|
var testMemoryGetMetricForFingerprint = buildMemoryTestPersistence(GetMetricForFingerprintTests)
|
||||||
|
|
||||||
func TestMemoryGetMetricForFingerprint(t *testing.T) {
|
func TestMemoryGetMetricForFingerprint(t *testing.T) {
|
||||||
|
|
|
@ -96,93 +96,6 @@ func NewLevelDBFingerprintMetricIndex(o leveldb.LevelDBOptions) (*LevelDBFingerp
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// LabelNameFingerprintMapping is an in-memory map of LabelNames to
|
|
||||||
// Fingerprints.
|
|
||||||
type LabelNameFingerprintMapping map[clientmodel.LabelName]clientmodel.Fingerprints
|
|
||||||
|
|
||||||
// LabelNameFingerprintIndex models a database mapping LabelNames to
|
|
||||||
// Fingerprints.
|
|
||||||
type LabelNameFingerprintIndex interface {
|
|
||||||
raw.Database
|
|
||||||
raw.Pruner
|
|
||||||
|
|
||||||
IndexBatch(LabelNameFingerprintMapping) error
|
|
||||||
Lookup(clientmodel.LabelName) (fps clientmodel.Fingerprints, ok bool, err error)
|
|
||||||
Has(clientmodel.LabelName) (ok bool, err error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// LevelDBLabelNameFingerprintIndex implements LabelNameFingerprintIndex using
|
|
||||||
// leveldb.
|
|
||||||
type LevelDBLabelNameFingerprintIndex struct {
|
|
||||||
*leveldb.LevelDBPersistence
|
|
||||||
}
|
|
||||||
|
|
||||||
// IndexBatch implements LabelNameFingerprintIndex.
|
|
||||||
func (i *LevelDBLabelNameFingerprintIndex) IndexBatch(b LabelNameFingerprintMapping) error {
|
|
||||||
batch := leveldb.NewBatch()
|
|
||||||
defer batch.Close()
|
|
||||||
|
|
||||||
for labelName, fingerprints := range b {
|
|
||||||
sort.Sort(fingerprints)
|
|
||||||
|
|
||||||
key := &dto.LabelName{
|
|
||||||
Name: proto.String(string(labelName)),
|
|
||||||
}
|
|
||||||
value := &dto.FingerprintCollection{}
|
|
||||||
for _, fingerprint := range fingerprints {
|
|
||||||
f := &dto.Fingerprint{}
|
|
||||||
dumpFingerprint(f, fingerprint)
|
|
||||||
value.Member = append(value.Member, f)
|
|
||||||
}
|
|
||||||
|
|
||||||
batch.Put(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return i.LevelDBPersistence.Commit(batch)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup implements LabelNameFingerprintIndex.
|
|
||||||
func (i *LevelDBLabelNameFingerprintIndex) Lookup(l clientmodel.LabelName) (fps clientmodel.Fingerprints, ok bool, err error) {
|
|
||||||
k := &dto.LabelName{}
|
|
||||||
dumpLabelName(k, l)
|
|
||||||
v := &dto.FingerprintCollection{}
|
|
||||||
ok, err = i.LevelDBPersistence.Get(k, v)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, err
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
return nil, false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, m := range v.Member {
|
|
||||||
fp := &clientmodel.Fingerprint{}
|
|
||||||
loadFingerprint(fp, m)
|
|
||||||
fps = append(fps, fp)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fps, true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Has implements LabelNameFingerprintIndex.
|
|
||||||
func (i *LevelDBLabelNameFingerprintIndex) Has(l clientmodel.LabelName) (ok bool, err error) {
|
|
||||||
return i.LevelDBPersistence.Has(&dto.LabelName{
|
|
||||||
Name: proto.String(string(l)),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewLevelLabelNameFingerprintIndex returns a LevelDBLabelNameFingerprintIndex
|
|
||||||
// ready to use.
|
|
||||||
func NewLevelLabelNameFingerprintIndex(o leveldb.LevelDBOptions) (*LevelDBLabelNameFingerprintIndex, error) {
|
|
||||||
s, err := leveldb.NewLevelDBPersistence(o)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &LevelDBLabelNameFingerprintIndex{
|
|
||||||
LevelDBPersistence: s,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// LabelPairFingerprintMapping is an in-memory map of LabelPairs to
|
// LabelPairFingerprintMapping is an in-memory map of LabelPairs to
|
||||||
// Fingerprints.
|
// Fingerprints.
|
||||||
type LabelPairFingerprintMapping map[LabelPair]clientmodel.Fingerprints
|
type LabelPairFingerprintMapping map[LabelPair]clientmodel.Fingerprints
|
||||||
|
@ -557,7 +470,6 @@ func NewBufferedIndexer(i MetricIndexer, limit int) *BufferedIndexer {
|
||||||
// locking semantics to enforce this.
|
// locking semantics to enforce this.
|
||||||
type TotalIndexer struct {
|
type TotalIndexer struct {
|
||||||
FingerprintToMetric FingerprintMetricIndex
|
FingerprintToMetric FingerprintMetricIndex
|
||||||
LabelNameToFingerprint LabelNameFingerprintIndex
|
|
||||||
LabelPairToFingerprint LabelPairFingerprintIndex
|
LabelPairToFingerprint LabelPairFingerprintIndex
|
||||||
MetricMembership MetricMembershipIndex
|
MetricMembership MetricMembershipIndex
|
||||||
}
|
}
|
||||||
|
@ -578,45 +490,6 @@ func findUnindexed(i MetricMembershipIndex, b FingerprintMetricMapping) (Fingerp
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func extendLabelNameIndex(i LabelNameFingerprintIndex, b FingerprintMetricMapping) (LabelNameFingerprintMapping, error) {
|
|
||||||
collection := map[clientmodel.LabelName]utility.Set{}
|
|
||||||
|
|
||||||
for fp, m := range b {
|
|
||||||
for l := range m {
|
|
||||||
set, ok := collection[l]
|
|
||||||
if !ok {
|
|
||||||
baseFps, _, err := i.Lookup(l)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
set = utility.Set{}
|
|
||||||
|
|
||||||
for _, baseFp := range baseFps {
|
|
||||||
set.Add(*baseFp)
|
|
||||||
}
|
|
||||||
|
|
||||||
collection[l] = set
|
|
||||||
}
|
|
||||||
|
|
||||||
set.Add(fp)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
batch := LabelNameFingerprintMapping{}
|
|
||||||
for l, set := range collection {
|
|
||||||
fps := clientmodel.Fingerprints{}
|
|
||||||
for e := range set {
|
|
||||||
fp := e.(clientmodel.Fingerprint)
|
|
||||||
fps = append(fps, &fp)
|
|
||||||
}
|
|
||||||
|
|
||||||
batch[l] = fps
|
|
||||||
}
|
|
||||||
|
|
||||||
return batch, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func extendLabelPairIndex(i LabelPairFingerprintIndex, b FingerprintMetricMapping) (LabelPairFingerprintMapping, error) {
|
func extendLabelPairIndex(i LabelPairFingerprintIndex, b FingerprintMetricMapping) (LabelPairFingerprintMapping, error) {
|
||||||
collection := map[LabelPair]utility.Set{}
|
collection := map[LabelPair]utility.Set{}
|
||||||
|
|
||||||
|
@ -667,14 +540,6 @@ func (i *TotalIndexer) IndexMetrics(b FingerprintMetricMapping) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
labelNames, err := extendLabelNameIndex(i.LabelNameToFingerprint, unindexed)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := i.LabelNameToFingerprint.IndexBatch(labelNames); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
labelPairs, err := extendLabelPairIndex(i.LabelPairToFingerprint, unindexed)
|
labelPairs, err := extendLabelPairIndex(i.LabelPairToFingerprint, unindexed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -25,34 +25,30 @@ const (
|
||||||
failure = "failure"
|
failure = "failure"
|
||||||
result = "result"
|
result = "result"
|
||||||
|
|
||||||
appendFingerprints = "append_fingerprints"
|
appendFingerprints = "append_fingerprints"
|
||||||
appendLabelNameFingerprint = "append_label_name_fingerprint"
|
appendLabelPairFingerprint = "append_label_pair_fingerprint"
|
||||||
appendLabelPairFingerprint = "append_label_pair_fingerprint"
|
appendSample = "append_sample"
|
||||||
appendSample = "append_sample"
|
appendSamples = "append_samples"
|
||||||
appendSamples = "append_samples"
|
findUnindexedMetrics = "find_unindexed_metrics"
|
||||||
findUnindexedMetrics = "find_unindexed_metrics"
|
flushMemory = "flush_memory"
|
||||||
flushMemory = "flush_memory"
|
getBoundaryValues = "get_boundary_values"
|
||||||
getBoundaryValues = "get_boundary_values"
|
getFingerprintsForLabelSet = "get_fingerprints_for_labelset"
|
||||||
getFingerprintsForLabelName = "get_fingerprints_for_label_name"
|
getMetricForFingerprint = "get_metric_for_fingerprint"
|
||||||
getFingerprintsForLabelSet = "get_fingerprints_for_labelset"
|
getRangeValues = "get_range_values"
|
||||||
getLabelNameFingerprints = "get_label_name_fingerprints"
|
getValueAtTime = "get_value_at_time"
|
||||||
getMetricForFingerprint = "get_metric_for_fingerprint"
|
hasIndexMetric = "has_index_metric"
|
||||||
getRangeValues = "get_range_values"
|
hasLabelName = "has_label_name"
|
||||||
getValueAtTime = "get_value_at_time"
|
hasLabelPair = "has_label_pair"
|
||||||
hasIndexMetric = "has_index_metric"
|
indexFingerprints = "index_fingerprints"
|
||||||
hasLabelName = "has_label_name"
|
indexLabelNames = "index_label_names"
|
||||||
hasLabelPair = "has_label_pair"
|
indexLabelPairs = "index_label_pairs"
|
||||||
indexFingerprints = "index_fingerprints"
|
indexMetric = "index_metric"
|
||||||
indexLabelNames = "index_label_names"
|
indexMetrics = "index_metrics"
|
||||||
indexLabelPairs = "index_label_pairs"
|
rebuildDiskFrontier = "rebuild_disk_frontier"
|
||||||
indexMetric = "index_metric"
|
refreshHighWatermarks = "refresh_high_watermarks"
|
||||||
indexMetrics = "index_metrics"
|
renderView = "render_view"
|
||||||
rebuildDiskFrontier = "rebuild_disk_frontier"
|
setLabelPairFingerprints = "set_label_pair_fingerprints"
|
||||||
refreshHighWatermarks = "refresh_high_watermarks"
|
writeMemory = "write_memory"
|
||||||
renderView = "render_view"
|
|
||||||
setLabelNameFingerprints = "set_label_name_fingerprints"
|
|
||||||
setLabelPairFingerprints = "set_label_pair_fingerprints"
|
|
||||||
writeMemory = "write_memory"
|
|
||||||
|
|
||||||
cutOff = "recency_threshold"
|
cutOff = "recency_threshold"
|
||||||
processorName = "processor"
|
processorName = "processor"
|
||||||
|
|
|
@ -32,10 +32,6 @@ type MetricPersistence interface {
|
||||||
// provided label set.
|
// provided label set.
|
||||||
GetFingerprintsForLabelSet(clientmodel.LabelSet) (clientmodel.Fingerprints, error)
|
GetFingerprintsForLabelSet(clientmodel.LabelSet) (clientmodel.Fingerprints, error)
|
||||||
|
|
||||||
// Get all of the metric fingerprints that are associated for a given
|
|
||||||
// label name.
|
|
||||||
GetFingerprintsForLabelName(clientmodel.LabelName) (clientmodel.Fingerprints, error)
|
|
||||||
|
|
||||||
// Get the metric associated with the provided fingerprint.
|
// Get the metric associated with the provided fingerprint.
|
||||||
GetMetricForFingerprint(*clientmodel.Fingerprint) (clientmodel.Metric, error)
|
GetMetricForFingerprint(*clientmodel.Fingerprint) (clientmodel.Metric, error)
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,6 @@ const sortConcurrency = 2
|
||||||
type LevelDBMetricPersistence struct {
|
type LevelDBMetricPersistence struct {
|
||||||
CurationRemarks CurationRemarker
|
CurationRemarks CurationRemarker
|
||||||
FingerprintToMetrics FingerprintMetricIndex
|
FingerprintToMetrics FingerprintMetricIndex
|
||||||
LabelNameToFingerprints LabelNameFingerprintIndex
|
|
||||||
LabelPairToFingerprints LabelPairFingerprintIndex
|
LabelPairToFingerprints LabelPairFingerprintIndex
|
||||||
MetricHighWatermarks HighWatermarker
|
MetricHighWatermarks HighWatermarker
|
||||||
MetricMembershipIndex MetricMembershipIndex
|
MetricMembershipIndex MetricMembershipIndex
|
||||||
|
@ -52,7 +51,6 @@ type LevelDBMetricPersistence struct {
|
||||||
//
|
//
|
||||||
// type FingerprintResolver interface {
|
// type FingerprintResolver interface {
|
||||||
// GetFingerprintForMetric(clientmodel.Metric) (*clientmodel.Fingerprint, bool, error)
|
// GetFingerprintForMetric(clientmodel.Metric) (*clientmodel.Fingerprint, bool, error)
|
||||||
// GetFingerprintsForLabelName(clientmodel.LabelName) (clientmodel.Fingerprints, bool, error)
|
|
||||||
// GetFingerprintsForLabelSet(LabelPair) (clientmodel.Fingerprints, bool, error)
|
// GetFingerprintsForLabelSet(LabelPair) (clientmodel.Fingerprints, bool, error)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -69,7 +67,6 @@ var (
|
||||||
curationRemarksCacheSize = flag.Int("curationRemarksCacheSize", 5*1024*1024, "The size for the curation remarks cache (bytes).")
|
curationRemarksCacheSize = flag.Int("curationRemarksCacheSize", 5*1024*1024, "The size for the curation remarks cache (bytes).")
|
||||||
fingerprintsToLabelPairCacheSize = flag.Int("fingerprintsToLabelPairCacheSizeBytes", 25*1024*1024, "The size for the fingerprint to label pair index (bytes).")
|
fingerprintsToLabelPairCacheSize = flag.Int("fingerprintsToLabelPairCacheSizeBytes", 25*1024*1024, "The size for the fingerprint to label pair index (bytes).")
|
||||||
highWatermarkCacheSize = flag.Int("highWatermarksByFingerprintSizeBytes", 5*1024*1024, "The size for the metric high watermarks (bytes).")
|
highWatermarkCacheSize = flag.Int("highWatermarksByFingerprintSizeBytes", 5*1024*1024, "The size for the metric high watermarks (bytes).")
|
||||||
labelNameToFingerprintsCacheSize = flag.Int("labelNameToFingerprintsCacheSizeBytes", 25*1024*1024, "The size for the label name to metric fingerprint index (bytes).")
|
|
||||||
labelPairToFingerprintsCacheSize = flag.Int("labelPairToFingerprintsCacheSizeBytes", 25*1024*1024, "The size for the label pair to metric fingerprint index (bytes).")
|
labelPairToFingerprintsCacheSize = flag.Int("labelPairToFingerprintsCacheSizeBytes", 25*1024*1024, "The size for the label pair to metric fingerprint index (bytes).")
|
||||||
metricMembershipIndexCacheSize = flag.Int("metricMembershipCacheSizeBytes", 5*1024*1024, "The size for the metric membership index (bytes).")
|
metricMembershipIndexCacheSize = flag.Int("metricMembershipCacheSizeBytes", 5*1024*1024, "The size for the metric membership index (bytes).")
|
||||||
samplesByFingerprintCacheSize = flag.Int("samplesByFingerprintCacheSizeBytes", 50*1024*1024, "The size for the samples database (bytes).")
|
samplesByFingerprintCacheSize = flag.Int("samplesByFingerprintCacheSizeBytes", 50*1024*1024, "The size for the samples database (bytes).")
|
||||||
|
@ -83,7 +80,6 @@ func (l *LevelDBMetricPersistence) Close() {
|
||||||
var persistences = []raw.Database{
|
var persistences = []raw.Database{
|
||||||
l.CurationRemarks,
|
l.CurationRemarks,
|
||||||
l.FingerprintToMetrics,
|
l.FingerprintToMetrics,
|
||||||
l.LabelNameToFingerprints,
|
|
||||||
l.LabelPairToFingerprints,
|
l.LabelPairToFingerprints,
|
||||||
l.MetricHighWatermarks,
|
l.MetricHighWatermarks,
|
||||||
l.MetricMembershipIndex,
|
l.MetricMembershipIndex,
|
||||||
|
@ -110,7 +106,7 @@ func (l *LevelDBMetricPersistence) Close() {
|
||||||
// NewLevelDBMetricPersistence returns a LevelDBMetricPersistence object ready
|
// NewLevelDBMetricPersistence returns a LevelDBMetricPersistence object ready
|
||||||
// to use.
|
// to use.
|
||||||
func NewLevelDBMetricPersistence(baseDirectory string) (*LevelDBMetricPersistence, error) {
|
func NewLevelDBMetricPersistence(baseDirectory string) (*LevelDBMetricPersistence, error) {
|
||||||
workers := utility.NewUncertaintyGroup(7)
|
workers := utility.NewUncertaintyGroup(6)
|
||||||
|
|
||||||
emission := &LevelDBMetricPersistence{}
|
emission := &LevelDBMetricPersistence{}
|
||||||
|
|
||||||
|
@ -161,21 +157,6 @@ func NewLevelDBMetricPersistence(baseDirectory string) (*LevelDBMetricPersistenc
|
||||||
workers.MayFail(err)
|
workers.MayFail(err)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Fingerprints by Label Name",
|
|
||||||
func() {
|
|
||||||
var err error
|
|
||||||
emission.LabelNameToFingerprints, err = NewLevelLabelNameFingerprintIndex(
|
|
||||||
leveldb.LevelDBOptions{
|
|
||||||
Name: "Fingerprints by Label Name",
|
|
||||||
Purpose: "Index",
|
|
||||||
Path: baseDirectory + "/fingerprints_by_label_name",
|
|
||||||
CacheSizeBytes: *labelNameToFingerprintsCacheSize,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
workers.MayFail(err)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Fingerprints by Label Name and Value Pair",
|
"Fingerprints by Label Name and Value Pair",
|
||||||
func() {
|
func() {
|
||||||
|
@ -238,7 +219,6 @@ func NewLevelDBMetricPersistence(baseDirectory string) (*LevelDBMetricPersistenc
|
||||||
|
|
||||||
emission.Indexer = &TotalIndexer{
|
emission.Indexer = &TotalIndexer{
|
||||||
FingerprintToMetric: emission.FingerprintToMetrics,
|
FingerprintToMetric: emission.FingerprintToMetrics,
|
||||||
LabelNameToFingerprint: emission.LabelNameToFingerprints,
|
|
||||||
LabelPairToFingerprint: emission.LabelPairToFingerprints,
|
LabelPairToFingerprint: emission.LabelPairToFingerprints,
|
||||||
MetricMembership: emission.MetricMembershipIndex,
|
MetricMembership: emission.MetricMembershipIndex,
|
||||||
}
|
}
|
||||||
|
@ -442,20 +422,6 @@ func (l *LevelDBMetricPersistence) HasLabelPair(p *LabelPair) (value bool, err e
|
||||||
return l.LabelPairToFingerprints.Has(p)
|
return l.LabelPairToFingerprints.Has(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HasLabelName returns true if the given LabelName is present in the underlying
|
|
||||||
// LabelName index.
|
|
||||||
func (l *LevelDBMetricPersistence) HasLabelName(n clientmodel.LabelName) (value bool, err error) {
|
|
||||||
defer func(begin time.Time) {
|
|
||||||
duration := time.Since(begin)
|
|
||||||
|
|
||||||
recordOutcome(duration, err, map[string]string{operation: hasLabelName, result: success}, map[string]string{operation: hasLabelName, result: failure})
|
|
||||||
}(time.Now())
|
|
||||||
|
|
||||||
value, err = l.LabelNameToFingerprints.Has(n)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetFingerprintsForLabelSet returns the Fingerprints for the given LabelSet by
|
// GetFingerprintsForLabelSet returns the Fingerprints for the given LabelSet by
|
||||||
// querying the underlying LabelPairFingerprintIndex for each LabelPair
|
// querying the underlying LabelPairFingerprintIndex for each LabelPair
|
||||||
// contained in LabelSet. It implements the MetricPersistence interface.
|
// contained in LabelSet. It implements the MetricPersistence interface.
|
||||||
|
@ -503,22 +469,6 @@ func (l *LevelDBMetricPersistence) GetFingerprintsForLabelSet(labelSet clientmod
|
||||||
return fps, nil
|
return fps, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFingerprintsForLabelName returns the Fingerprints for the given LabelName
|
|
||||||
// from the underlying LabelNameFingerprintIndex. It implements the
|
|
||||||
// MetricPersistence interface.
|
|
||||||
func (l *LevelDBMetricPersistence) GetFingerprintsForLabelName(labelName clientmodel.LabelName) (fps clientmodel.Fingerprints, err error) {
|
|
||||||
defer func(begin time.Time) {
|
|
||||||
duration := time.Since(begin)
|
|
||||||
|
|
||||||
recordOutcome(duration, err, map[string]string{operation: getFingerprintsForLabelName, result: success}, map[string]string{operation: getFingerprintsForLabelName, result: failure})
|
|
||||||
}(time.Now())
|
|
||||||
|
|
||||||
// TODO(matt): Update signature to work with ok.
|
|
||||||
fps, _, err = l.LabelNameToFingerprints.Lookup(labelName)
|
|
||||||
|
|
||||||
return fps, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetMetricForFingerprint returns the Metric for the given Fingerprint from the
|
// GetMetricForFingerprint returns the Metric for the given Fingerprint from the
|
||||||
// underlying FingerprintMetricIndex. It implements the MetricPersistence
|
// underlying FingerprintMetricIndex. It implements the MetricPersistence
|
||||||
// interface.
|
// interface.
|
||||||
|
@ -559,7 +509,6 @@ func (l *LevelDBMetricPersistence) GetAllValuesForLabel(labelName clientmodel.La
|
||||||
func (l *LevelDBMetricPersistence) Prune() {
|
func (l *LevelDBMetricPersistence) Prune() {
|
||||||
l.CurationRemarks.Prune()
|
l.CurationRemarks.Prune()
|
||||||
l.FingerprintToMetrics.Prune()
|
l.FingerprintToMetrics.Prune()
|
||||||
l.LabelNameToFingerprints.Prune()
|
|
||||||
l.LabelPairToFingerprints.Prune()
|
l.LabelPairToFingerprints.Prune()
|
||||||
l.MetricHighWatermarks.Prune()
|
l.MetricHighWatermarks.Prune()
|
||||||
l.MetricMembershipIndex.Prune()
|
l.MetricMembershipIndex.Prune()
|
||||||
|
@ -580,11 +529,6 @@ func (l *LevelDBMetricPersistence) Sizes() (total uint64, err error) {
|
||||||
}
|
}
|
||||||
total += size
|
total += size
|
||||||
|
|
||||||
if size, err = l.LabelNameToFingerprints.Size(); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
total += size
|
|
||||||
|
|
||||||
if size, err = l.LabelPairToFingerprints.Size(); err != nil {
|
if size, err = l.LabelPairToFingerprints.Size(); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -613,7 +557,6 @@ func (l *LevelDBMetricPersistence) States() raw.DatabaseStates {
|
||||||
return raw.DatabaseStates{
|
return raw.DatabaseStates{
|
||||||
l.CurationRemarks.State(),
|
l.CurationRemarks.State(),
|
||||||
l.FingerprintToMetrics.State(),
|
l.FingerprintToMetrics.State(),
|
||||||
l.LabelNameToFingerprints.State(),
|
|
||||||
l.LabelPairToFingerprints.State(),
|
l.LabelPairToFingerprints.State(),
|
||||||
l.MetricHighWatermarks.State(),
|
l.MetricHighWatermarks.State(),
|
||||||
l.MetricMembershipIndex.State(),
|
l.MetricMembershipIndex.State(),
|
||||||
|
|
|
@ -177,7 +177,6 @@ type memorySeriesStorage struct {
|
||||||
wmCache *watermarkCache
|
wmCache *watermarkCache
|
||||||
fingerprintToSeries map[clientmodel.Fingerprint]stream
|
fingerprintToSeries map[clientmodel.Fingerprint]stream
|
||||||
labelPairToFingerprints map[LabelPair]clientmodel.Fingerprints
|
labelPairToFingerprints map[LabelPair]clientmodel.Fingerprints
|
||||||
labelNameToFingerprints map[clientmodel.LabelName]clientmodel.Fingerprints
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MemorySeriesOptions bundles options used by NewMemorySeriesStorage to create
|
// MemorySeriesOptions bundles options used by NewMemorySeriesStorage to create
|
||||||
|
@ -244,10 +243,6 @@ func (s *memorySeriesStorage) getOrCreateSeries(metric clientmodel.Metric, finge
|
||||||
labelPairValues := s.labelPairToFingerprints[labelPair]
|
labelPairValues := s.labelPairToFingerprints[labelPair]
|
||||||
labelPairValues = append(labelPairValues, fingerprint)
|
labelPairValues = append(labelPairValues, fingerprint)
|
||||||
s.labelPairToFingerprints[labelPair] = labelPairValues
|
s.labelPairToFingerprints[labelPair] = labelPairValues
|
||||||
|
|
||||||
labelNameValues := s.labelNameToFingerprints[k]
|
|
||||||
labelNameValues = append(labelNameValues, fingerprint)
|
|
||||||
s.labelNameToFingerprints[k] = labelNameValues
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return series
|
return series
|
||||||
|
@ -302,7 +297,6 @@ func (s *memorySeriesStorage) dropSeries(fingerprint *clientmodel.Fingerprint) {
|
||||||
Value: v,
|
Value: v,
|
||||||
}
|
}
|
||||||
delete(s.labelPairToFingerprints, labelPair)
|
delete(s.labelPairToFingerprints, labelPair)
|
||||||
delete(s.labelNameToFingerprints, k)
|
|
||||||
}
|
}
|
||||||
delete(s.fingerprintToSeries, *fingerprint)
|
delete(s.fingerprintToSeries, *fingerprint)
|
||||||
}
|
}
|
||||||
|
@ -357,21 +351,6 @@ func (s *memorySeriesStorage) GetFingerprintsForLabelSet(l clientmodel.LabelSet)
|
||||||
return fingerprints, nil
|
return fingerprints, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *memorySeriesStorage) GetFingerprintsForLabelName(l clientmodel.LabelName) (clientmodel.Fingerprints, error) {
|
|
||||||
s.RLock()
|
|
||||||
defer s.RUnlock()
|
|
||||||
|
|
||||||
values, ok := s.labelNameToFingerprints[l]
|
|
||||||
if !ok {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
fingerprints := make(clientmodel.Fingerprints, len(values))
|
|
||||||
copy(fingerprints, values)
|
|
||||||
|
|
||||||
return fingerprints, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *memorySeriesStorage) GetMetricForFingerprint(f *clientmodel.Fingerprint) (clientmodel.Metric, error) {
|
func (s *memorySeriesStorage) GetMetricForFingerprint(f *clientmodel.Fingerprint) (clientmodel.Metric, error) {
|
||||||
s.RLock()
|
s.RLock()
|
||||||
defer s.RUnlock()
|
defer s.RUnlock()
|
||||||
|
@ -453,7 +432,6 @@ func (s *memorySeriesStorage) Close() {
|
||||||
|
|
||||||
s.fingerprintToSeries = map[clientmodel.Fingerprint]stream{}
|
s.fingerprintToSeries = map[clientmodel.Fingerprint]stream{}
|
||||||
s.labelPairToFingerprints = map[LabelPair]clientmodel.Fingerprints{}
|
s.labelPairToFingerprints = map[LabelPair]clientmodel.Fingerprints{}
|
||||||
s.labelNameToFingerprints = map[clientmodel.LabelName]clientmodel.Fingerprints{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *memorySeriesStorage) GetAllValuesForLabel(labelName clientmodel.LabelName) (values clientmodel.LabelValues, err error) {
|
func (s *memorySeriesStorage) GetAllValuesForLabel(labelName clientmodel.LabelName) (values clientmodel.LabelValues, err error) {
|
||||||
|
@ -478,7 +456,6 @@ func NewMemorySeriesStorage(o MemorySeriesOptions) *memorySeriesStorage {
|
||||||
return &memorySeriesStorage{
|
return &memorySeriesStorage{
|
||||||
fingerprintToSeries: make(map[clientmodel.Fingerprint]stream),
|
fingerprintToSeries: make(map[clientmodel.Fingerprint]stream),
|
||||||
labelPairToFingerprints: make(map[LabelPair]clientmodel.Fingerprints),
|
labelPairToFingerprints: make(map[LabelPair]clientmodel.Fingerprints),
|
||||||
labelNameToFingerprints: make(map[clientmodel.LabelName]clientmodel.Fingerprints),
|
|
||||||
wmCache: o.WatermarkCache,
|
wmCache: o.WatermarkCache,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,29 +66,6 @@ func ReadEmptyTests(p MetricPersistence, t test.Tester) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
hasLabelName := func(x int) (success bool) {
|
|
||||||
labelName := clientmodel.LabelName(string(x))
|
|
||||||
|
|
||||||
fingerprints, err := p.GetFingerprintsForLabelName(labelName)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
success = len(fingerprints) == 0
|
|
||||||
if !success {
|
|
||||||
t.Errorf("unexpected fingerprint length %d, got %d", 0, len(fingerprints))
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = quick.Check(hasLabelName, nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppendSampleAsPureSparseAppendTests(p MetricPersistence, t test.Tester) {
|
func AppendSampleAsPureSparseAppendTests(p MetricPersistence, t test.Tester) {
|
||||||
|
@ -140,17 +117,7 @@ func AppendSampleAsSparseAppendWithReadsTests(p MetricPersistence, t test.Tester
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fingerprints, err := p.GetFingerprintsForLabelName(labelName)
|
fingerprints, err := p.GetFingerprintsForLabelSet(clientmodel.LabelSet{
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(fingerprints) != 1 {
|
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", 1, len(fingerprints))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fingerprints, err = p.GetFingerprintsForLabelSet(clientmodel.LabelSet{
|
|
||||||
labelName: labelValue,
|
labelName: labelValue,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -345,31 +312,6 @@ func StochasticTests(persistenceMaker func() (MetricPersistence, test.Closer), t
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", 0, len(fingerprints))
|
t.Errorf("expected fingerprint count of %d, got %d", 0, len(fingerprints))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
labelName := clientmodel.LabelName(fmt.Sprintf("shared_label_%d", sharedLabelIndex))
|
|
||||||
fingerprints, err = p.GetFingerprintsForLabelName(labelName)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(fingerprints) == 0 {
|
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", 0, len(fingerprints))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for sharedIndex := 0; sharedIndex < numberOfSharedLabels; sharedIndex++ {
|
|
||||||
labelName := clientmodel.LabelName(fmt.Sprintf("shared_label_%d", sharedIndex))
|
|
||||||
fingerprints, err := p.GetFingerprintsForLabelName(labelName)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(fingerprints) != numberOfMetrics {
|
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", numberOfMetrics, len(fingerprints))
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,16 +332,6 @@ func StochasticTests(persistenceMaker func() (MetricPersistence, test.Closer), t
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", 1, len(fingerprints))
|
t.Errorf("expected fingerprint count of %d, got %d", 1, len(fingerprints))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fingerprints, err = p.GetFingerprintsForLabelName(labelName)
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(fingerprints) != 1 {
|
|
||||||
t.Errorf("expected fingerprint count of %d, got %d", 1, len(fingerprints))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
metric := clientmodel.Metric{}
|
metric := clientmodel.Metric{}
|
||||||
|
|
Loading…
Reference in a new issue