Skip to content

Commit 62d5aef

Browse files
authored
Merge pull request #25 from arajkumar/frostdb-with-wal
Integrate newer FrostDB with WAL support
2 parents 5458658 + 0357818 commit 62d5aef

File tree

4 files changed

+74
-36
lines changed

4 files changed

+74
-36
lines changed

cmd/prometheus/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ func main() {
11171117
}
11181118

11191119
func openDBWithMetrics(dir string, logger log.Logger, reg prometheus.Registerer, opts *tsdb.Options, stats *tsdb.DBStats) (storage.Storage, error) {
1120-
db, err := frostdb.Open(reg, logger)
1120+
db, err := frostdb.Open(dir, reg, log.With(logger, "component", "frostdb"))
11211121
/*
11221122
db, err := tsdb.Open(
11231123
dir,

frostdb/frostdb.go

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/polarsignals/frostdb"
1414
frost "github.com/polarsignals/frostdb"
1515
"github.com/polarsignals/frostdb/dynparquet"
16+
schemapb "github.com/polarsignals/frostdb/gen/proto/go/frostdb/schema/v1alpha1"
1617
"github.com/polarsignals/frostdb/query"
1718
"github.com/polarsignals/frostdb/query/logicalplan"
1819
"github.com/prometheus/client_golang/prometheus"
@@ -41,18 +42,30 @@ type FrostQuerier struct {
4142
}
4243

4344
// Open a new frostDB
44-
func Open(reg prometheus.Registerer, logger log.Logger) (*FrostDB, error) {
45-
store := frost.New(
45+
func Open(dir string, reg prometheus.Registerer, logger log.Logger) (*FrostDB, error) {
46+
ctx := context.Background()
47+
store, err := frost.New(
48+
logger,
4649
reg,
47-
8192,
48-
10*1024*1024*1024,
50+
frost.WithWAL(),
51+
frost.WithStoragePath(dir),
4952
)
50-
db, _ := store.DB("prometheus")
51-
schema := promSchema()
53+
if err != nil {
54+
return nil, err
55+
}
56+
57+
err = store.ReplayWALs(ctx)
58+
if err != nil {
59+
return nil, err
60+
}
61+
db, _ := store.DB(ctx, "prometheus")
62+
schema, err := promSchema()
63+
if err != nil {
64+
return nil, err
65+
}
5266
table, err := db.Table(
5367
"metrics",
5468
frost.NewTableConfig(schema),
55-
logger,
5669
)
5770
if err != nil {
5871
return nil, err
@@ -157,8 +170,8 @@ func (f *FrostQuerier) Select(sortSeries bool, hints *storage.SelectHints, match
157170
err := engine.ScanTable("metrics").
158171
Filter(logicalplan.And(
159172
logicalplan.And(
160-
logicalplan.Col("timestamp").GT(logicalplan.Literal(hints.Start)),
161-
logicalplan.Col("timestamp").LT(logicalplan.Literal(hints.End)),
173+
logicalplan.Col("timestamp").Gt(logicalplan.Literal(hints.Start)),
174+
logicalplan.Col("timestamp").Lt(logicalplan.Literal(hints.End)),
162175
),
163176
promMatchersToFrostDBExprs(matchers),
164177
)).
@@ -242,27 +255,40 @@ func (f *FrostDB) ChunkQuerier(ctx context.Context, mint, maxt int64) (storage.C
242255
return nil, nil
243256
}
244257

245-
func promSchema() *dynparquet.Schema {
246-
return dynparquet.NewSchema(
247-
"metrics_schema",
248-
[]dynparquet.ColumnDefinition{{
249-
Name: "labels",
250-
StorageLayout: parquet.Encoded(parquet.String(), &parquet.RLEDictionary),
251-
Dynamic: true,
258+
func promSchema() (*dynparquet.Schema, error) {
259+
return dynparquet.SchemaFromDefinition(&schemapb.Schema{
260+
Name: "metrics_schema",
261+
Columns: []*schemapb.Column{{
262+
Name: "labels",
263+
StorageLayout: &schemapb.StorageLayout{
264+
Type: schemapb.StorageLayout_TYPE_STRING,
265+
Encoding: schemapb.StorageLayout_ENCODING_RLE_DICTIONARY,
266+
Nullable: true,
267+
},
268+
Dynamic: true,
252269
}, {
253-
Name: "timestamp",
254-
StorageLayout: parquet.Int(64),
255-
Dynamic: false,
270+
Name: "timestamp",
271+
StorageLayout: &schemapb.StorageLayout{
272+
Type: schemapb.StorageLayout_TYPE_INT64,
273+
},
274+
Dynamic: false,
256275
}, {
257-
Name: "value",
258-
StorageLayout: parquet.Leaf(parquet.DoubleType),
259-
Dynamic: false,
276+
Name: "value",
277+
StorageLayout: &schemapb.StorageLayout{
278+
Type: schemapb.StorageLayout_TYPE_DOUBLE,
279+
},
280+
Dynamic: false,
260281
}},
261-
[]dynparquet.SortingColumn{
262-
dynparquet.NullsFirst(dynparquet.Ascending("labels")),
263-
dynparquet.Ascending("timestamp"),
282+
SortingColumns: []*schemapb.SortingColumn{{
283+
Name: "labels",
284+
NullsFirst: true,
285+
Direction: schemapb.SortingColumn_DIRECTION_ASCENDING,
264286
},
265-
)
287+
{
288+
Name: "timestamp",
289+
Direction: schemapb.SortingColumn_DIRECTION_ASCENDING,
290+
}},
291+
})
266292
}
267293

268294
type arrowSeriesSet struct {

go.mod

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ require (
3939
github.com/oklog/run v1.1.0
4040
github.com/oklog/ulid v1.3.1
4141
github.com/pkg/errors v0.9.1
42-
github.com/polarsignals/frostdb v0.0.0-20220719135628-f77c95f65cf0
42+
github.com/polarsignals/frostdb v0.0.0-20220811073159-2f68e10c0065
4343
github.com/prometheus/alertmanager v0.24.0
4444
github.com/prometheus/client_golang v1.12.2
4545
github.com/prometheus/client_model v0.2.0
@@ -48,7 +48,7 @@ require (
4848
github.com/prometheus/common/sigv4 v0.1.0
4949
github.com/prometheus/exporter-toolkit v0.7.1
5050
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9
51-
github.com/segmentio/parquet-go v0.0.0-20220713215308-e2be471e1d7b
51+
github.com/segmentio/parquet-go v0.0.0-20220802221544-d84ed320251d
5252
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749
5353
github.com/stretchr/testify v1.7.2
5454
github.com/vultr/govultr/v2 v2.17.1
@@ -180,6 +180,11 @@ require (
180180
github.com/spf13/pflag v1.0.5 // indirect
181181
github.com/stretchr/objx v0.2.0 // indirect
182182
github.com/thanos-io/objstore v0.0.0-20220715165016-ce338803bc1e // indirect
183+
github.com/tidwall/gjson v1.10.2 // indirect
184+
github.com/tidwall/match v1.1.1 // indirect
185+
github.com/tidwall/pretty v1.2.0 // indirect
186+
github.com/tidwall/tinylru v1.1.0 // indirect
187+
github.com/tidwall/wal v1.1.7 // indirect
183188
go.mongodb.org/mongo-driver v1.8.3 // indirect
184189
go.opencensus.io v0.23.0 // indirect
185190
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 // indirect

go.sum

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -824,10 +824,8 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J
824824
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
825825
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
826826
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
827-
github.com/polarsignals/frostdb v0.0.0-20220715180255-c1e327da7c95 h1:3k4P+NJO+aQ2ts5xZndcxILfWKNOIDxwURFkQnFCajY=
828-
github.com/polarsignals/frostdb v0.0.0-20220715180255-c1e327da7c95/go.mod h1:kpDBAMwctIMm6K3mq5SIwPG8F06cIKpaREKC5coFHmo=
829-
github.com/polarsignals/frostdb v0.0.0-20220719135628-f77c95f65cf0 h1:QojL/1GYJ8ZMiISYkkszAUr+LHqvA1C4yDme4ZxauCo=
830-
github.com/polarsignals/frostdb v0.0.0-20220719135628-f77c95f65cf0/go.mod h1:owFfTjGuDhCbOBn/0qpGOvPSMTc3NtrbMN557Rw9DP8=
827+
github.com/polarsignals/frostdb v0.0.0-20220811073159-2f68e10c0065 h1:Q9cplS14JxWdeLXb//d9WBLSSkWQJ37aND9mh8adtcs=
828+
github.com/polarsignals/frostdb v0.0.0-20220811073159-2f68e10c0065/go.mod h1:pAYbFxj4Tkqo1uqmv+MO7qvDd+SOZnFxzsUoLqAbLLo=
831829
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
832830
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
833831
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
@@ -899,8 +897,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
899897
github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg=
900898
github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y=
901899
github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM=
902-
github.com/segmentio/parquet-go v0.0.0-20220713215308-e2be471e1d7b h1:Ejstj1itedZ4E6ksSNnN+yx1FkDCanYkHh2h6XeXkDE=
903-
github.com/segmentio/parquet-go v0.0.0-20220713215308-e2be471e1d7b/go.mod h1:BuMbRhCCg3gFchup9zucJaUjQ4m6RxX+iVci37CoMPQ=
900+
github.com/segmentio/parquet-go v0.0.0-20220802221544-d84ed320251d h1:IxYmTiYCMaR3B0fjD9igXDr1AE5M8KRFbhEhEJ1WYx4=
901+
github.com/segmentio/parquet-go v0.0.0-20220802221544-d84ed320251d/go.mod h1:BuMbRhCCg3gFchup9zucJaUjQ4m6RxX+iVci37CoMPQ=
904902
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
905903
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
906904
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
@@ -959,8 +957,17 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:
959957
github.com/tencentyun/cos-go-sdk-v5 v0.7.34/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw=
960958
github.com/thanos-io/objstore v0.0.0-20220715165016-ce338803bc1e h1:IhC7gP1u/uA+yf9RYwhRVBq+2+HV1xRGcrY/C6WBaPY=
961959
github.com/thanos-io/objstore v0.0.0-20220715165016-ce338803bc1e/go.mod h1:Fp62HaCG8R+5ak2g6+foU/Jag9JhtmpftVpubyS3S5s=
962-
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
960+
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
961+
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
962+
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
963+
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
963964
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
965+
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
966+
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
967+
github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I=
968+
github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8=
969+
github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
970+
github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
964971
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
965972
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
966973
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=

0 commit comments

Comments
 (0)