Skip to content

Commit 1d2716f

Browse files
committed
feat: update mimir-prometheus to 85aefbca2c90
Update mimir-prometheus to pick up content-addressed Parquet storage and the ReadSeriesMetadataFromReaderAt API. Replace manual Parquet row parsing in store-gateway with the new upstream reader, which handles both flat and content-addressed formats transparently. - Use ReadSeriesMetadataFromReaderAt with WithNamespaceFilter in parseResourceAttributesParquet, removing direct parquet-go usage - Update test for VersionAt behavior change (no longer falls back to first version for timestamps before MinTime) Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
1 parent 6ab4c38 commit 1d2716f

File tree

18 files changed

+777
-297
lines changed

18 files changed

+777
-297
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ require (
8888
github.com/tylertreat/BoomFilters v0.0.0-20251117164519-53813c36cc1b
8989
github.com/xlab/treeprint v1.2.0
9090
go.opentelemetry.io/collector/pdata v1.51.0
91-
go.opentelemetry.io/collector/pdata/xpdata v0.142.0
9291
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0
9392
go.opentelemetry.io/contrib/propagators/jaeger v1.40.0
9493
go.opentelemetry.io/otel v1.40.0
@@ -209,6 +208,7 @@ require (
209208
go.opentelemetry.io/collector/confmap/xconfmap v0.142.0 // indirect
210209
go.opentelemetry.io/collector/consumer v1.48.0 // indirect
211210
go.opentelemetry.io/collector/featuregate v1.51.0 // indirect
211+
go.opentelemetry.io/collector/pdata/xpdata v0.142.0 // indirect
212212
go.opentelemetry.io/collector/pipeline v1.48.0 // indirect
213213
go.opentelemetry.io/collector/processor v1.48.0 // indirect
214214
go.opentelemetry.io/contrib/bridges/prometheus v0.64.0 // indirect
@@ -368,7 +368,7 @@ require (
368368
sigs.k8s.io/yaml v1.6.0 // indirect
369369
)
370370

371-
replace github.com/prometheus/prometheus => github.com/grafana/mimir-prometheus v1.8.2-0.20260209180056-2ad3cdd58e5e
371+
replace github.com/prometheus/prometheus => github.com/grafana/mimir-prometheus v1.8.2-0.20260210170232-85aefbca2c90
372372

373373
// Replace memberlist with our fork which includes some changes that haven't been
374374
// merged upstream yet for years and we don't expect to change anytime soon.

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,8 @@ github.com/grafana/memberlist v0.3.1-0.20251126142931-6f9f62ab6f86 h1:aTwfQuroOm
611611
github.com/grafana/memberlist v0.3.1-0.20251126142931-6f9f62ab6f86/go.mod h1:h60o12SZn/ua/j0B6iKAZezA4eDaGsIuPO70eOaJ6WE=
612612
github.com/grafana/mimir-otlptranslator v0.0.0-20251017074411-ea1e8f863e1d h1:k4NIVPYPP0sLJoGNzGwoQs2MpnWTvTcgbWPCzfdX66c=
613613
github.com/grafana/mimir-otlptranslator v0.0.0-20251017074411-ea1e8f863e1d/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM=
614-
github.com/grafana/mimir-prometheus v1.8.2-0.20260209180056-2ad3cdd58e5e h1:dUm2yWXpx74pYfsCAkUu1WW3WRz+Jc+qNRyycji/oKE=
615-
github.com/grafana/mimir-prometheus v1.8.2-0.20260209180056-2ad3cdd58e5e/go.mod h1:qMWjZQxsNDV+HrnUg6E3ESyZ9HlS25IgIlUh7ebK3d0=
614+
github.com/grafana/mimir-prometheus v1.8.2-0.20260210170232-85aefbca2c90 h1:6vPY0iUSycupDsFXv5IFtzIaF/wcuzR1RI3ZDROE9jQ=
615+
github.com/grafana/mimir-prometheus v1.8.2-0.20260210170232-85aefbca2c90/go.mod h1:qMWjZQxsNDV+HrnUg6E3ESyZ9HlS25IgIlUh7ebK3d0=
616616
github.com/grafana/opentracing-contrib-go-stdlib v0.0.0-20230509071955-f410e79da956 h1:em1oddjXL8c1tL0iFdtVtPloq2hRPen2MJQKoAWpxu0=
617617
github.com/grafana/opentracing-contrib-go-stdlib v0.0.0-20230509071955-f410e79da956/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU=
618618
github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8=

pkg/querier/resource_querier_cache_test.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func TestResourceQuerierCache_GetResourceAt(t *testing.T) {
102102
},
103103
},
104104
{
105-
name: "timestamp before MinTime returns first version (fallback behavior)",
105+
name: "timestamp before MinTime returns not found",
106106
fetcherData: []*ResourceAttributesData{
107107
{
108108
LabelsHash: 12345,
@@ -112,13 +112,8 @@ func TestResourceQuerierCache_GetResourceAt(t *testing.T) {
112112
},
113113
},
114114
labelsHash: 12345,
115-
timestamp: 500, // Before MinTime - VersionAt returns first version as fallback
116-
expectFound: true,
117-
expectVersion: &seriesmetadata.ResourceVersion{
118-
MinTime: 1000,
119-
MaxTime: 2000,
120-
Identifying: map[string]string{"service.name": "test"},
121-
},
115+
timestamp: 500, // Before MinTime - VersionAt returns nil
116+
expectFound: false,
122117
},
123118
}
124119

pkg/storegateway/bucket.go

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"context"
1212
"fmt"
1313
"io"
14+
"log/slog"
1415
"math"
1516
"os"
1617
"path"
@@ -29,7 +30,6 @@ import (
2930
"github.com/grafana/dskit/runutil"
3031
"github.com/grafana/dskit/services"
3132
"github.com/oklog/ulid/v2"
32-
"github.com/parquet-go/parquet-go"
3333
"github.com/pkg/errors"
3434
"github.com/prometheus/prometheus/model/labels"
3535
"github.com/prometheus/prometheus/storage"
@@ -1731,75 +1731,46 @@ func (s *BucketStore) blockResourceAttributes(ctx context.Context, b *bucketBloc
17311731
// parseResourceAttributesParquet parses a series_metadata.parquet file and returns
17321732
// resource versions indexed by labels hash.
17331733
func parseResourceAttributesParquet(data []byte) (map[uint64][]*storepb.ResourceVersionData, error) {
1734-
// Use parquet.Read with a bytes.Reader which implements io.ReaderAt
17351734
reader := bytes.NewReader(data)
1736-
1737-
// Define the row type to read - must match the parquet schema
1738-
type parquetRow struct {
1739-
Namespace string `parquet:"namespace"`
1740-
LabelsHash uint64 `parquet:"labels_hash"`
1741-
MinTime int64 `parquet:"mint,optional"`
1742-
MaxTime int64 `parquet:"maxt,optional"`
1743-
IdentifyingAttrs []seriesmetadata.EntityAttributeEntry `parquet:"identifying_attrs,list,optional"`
1744-
DescriptiveAttrs []seriesmetadata.EntityAttributeEntry `parquet:"descriptive_attrs,list,optional"`
1745-
Entities []seriesmetadata.EntityRow `parquet:"entities,list,optional"`
1746-
}
1747-
1748-
rows, err := parquet.Read[parquetRow](reader, int64(len(data)))
1735+
smReader, err := seriesmetadata.ReadSeriesMetadataFromReaderAt(
1736+
slog.Default(),
1737+
reader,
1738+
int64(len(data)),
1739+
seriesmetadata.WithNamespaceFilter(
1740+
seriesmetadata.NamespaceResource,
1741+
seriesmetadata.NamespaceResourceTable,
1742+
seriesmetadata.NamespaceResourceMapping,
1743+
),
1744+
)
17491745
if err != nil {
1750-
return nil, errors.Wrap(err, "read parquet rows")
1746+
return nil, errors.Wrap(err, "read series metadata")
17511747
}
1748+
defer smReader.Close()
17521749

1753-
// Build map from labels hash to resource versions
17541750
resourcesByHash := make(map[uint64][]*storepb.ResourceVersionData)
1755-
1756-
for _, row := range rows {
1757-
if row.Namespace != seriesmetadata.NamespaceResource {
1758-
// Skip metric metadata rows
1759-
continue
1760-
}
1761-
1762-
// Convert identifying attributes
1763-
identifying := make(map[string]string, len(row.IdentifyingAttrs))
1764-
for _, attr := range row.IdentifyingAttrs {
1765-
identifying[attr.Key] = attr.Value
1766-
}
1767-
1768-
// Convert descriptive attributes
1769-
descriptive := make(map[string]string, len(row.DescriptiveAttrs))
1770-
for _, attr := range row.DescriptiveAttrs {
1771-
descriptive[attr.Key] = attr.Value
1772-
}
1773-
1774-
// Convert entities
1775-
var entities []*storepb.EntityData
1776-
for _, entityRow := range row.Entities {
1777-
entityID := make(map[string]string, len(entityRow.ID))
1778-
for _, attr := range entityRow.ID {
1779-
entityID[attr.Key] = attr.Value
1780-
}
1781-
entityDesc := make(map[string]string, len(entityRow.Description))
1782-
for _, attr := range entityRow.Description {
1783-
entityDesc[attr.Key] = attr.Value
1751+
err = smReader.IterVersionedResources(func(labelsHash uint64, resources *seriesmetadata.VersionedResource) error {
1752+
for _, rv := range resources.Versions {
1753+
var entities []*storepb.EntityData
1754+
for _, e := range rv.Entities {
1755+
entities = append(entities, &storepb.EntityData{
1756+
Type: e.Type,
1757+
Id: e.ID,
1758+
Description: e.Description,
1759+
})
17841760
}
1785-
entities = append(entities, &storepb.EntityData{
1786-
Type: entityRow.Type,
1787-
Id: entityID,
1788-
Description: entityDesc,
1761+
resourcesByHash[labelsHash] = append(resourcesByHash[labelsHash], &storepb.ResourceVersionData{
1762+
Identifying: rv.Identifying,
1763+
Descriptive: rv.Descriptive,
1764+
Entities: entities,
1765+
MinTimeMs: rv.MinTime,
1766+
MaxTimeMs: rv.MaxTime,
17891767
})
17901768
}
1791-
1792-
version := &storepb.ResourceVersionData{
1793-
Identifying: identifying,
1794-
Descriptive: descriptive,
1795-
Entities: entities,
1796-
MinTimeMs: row.MinTime,
1797-
MaxTimeMs: row.MaxTime,
1798-
}
1799-
1800-
resourcesByHash[row.LabelsHash] = append(resourcesByHash[row.LabelsHash], version)
1769+
return nil
1770+
})
1771+
if err != nil {
1772+
return nil, errors.Wrap(err, "iterate versioned resources")
18011773
}
1802-
18031774
return resourcesByHash, nil
18041775
}
18051776

vendor/github.com/prometheus/prometheus/storage/interface.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/prometheus/prometheus/tsdb/ooo_head_read.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/prometheus/prometheus/tsdb/seriesmetadata/content_hash.go

Lines changed: 79 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/prometheus/prometheus/tsdb/seriesmetadata/entity.go

Lines changed: 29 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/prometheus/prometheus/tsdb/seriesmetadata/parquet_schema.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)