Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Harkishen-Singh/e23386ab9db7c23f48f0e06e8d918b3b to your computer and use it in GitHub Desktop.
Save Harkishen-Singh/e23386ab9db7c23f48f0e06e8d918b3b to your computer and use it in GitHub Desktop.

Code that ingests duplicates

package main

import (
	"context"
	"time"

	"github.com/go-kit/log"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/prometheus/model/labels"
	"github.com/prometheus/prometheus/tsdb"
)

func main() {
	db, err := tsdb.Open("test_db", log.NewNopLogger(), prometheus.DefaultRegisterer, nil, nil)
	if err != nil {
		panic(err)
	}

	app := db.Appender(context.Background())
	lbls := []labels.Label{{Name: "__name__", Value: "test"}, {Name: "a", Value: "1"}}
	ts := time.Now().UnixMilli()
	_, err = app.Append(0, lbls, ts, 1)
	if err != nil {
		panic(err)
	}
	_, err = app.Append(0, lbls, ts+int64(time.Second.Seconds()), 1)
	if err != nil {
		panic(err)
	}
	_, err = app.Append(0, lbls, ts+int64(2*time.Second.Seconds()), 2)
	if err != nil {
		panic(err)
	}
	_, err = app.Append(0, lbls, ts+int64(3*time.Second.Seconds()), 3)
	if err != nil {
		panic(err)
	}
	err = app.Commit()
	if err != nil {
		panic(err)
	}

	app = db.Appender(context.Background())

	_, err = app.Append(0, lbls, ts+int64(2*time.Second.Seconds()), 2) // duplicate
	if err != nil {
		panic(err) // panics here
	}
	_, err = app.Append(0, lbls, ts+int64(3*time.Second.Seconds()), 3)
	if err != nil {
		panic(err)
	}
	err = app.Commit()
	if err != nil {
		panic(err)
	}
}

Output

harkishen@Harkishens-MacBook-Pro playground % go run main.go
panic: out of order sample

goroutine 1 [running]:
main.main()
        /Users/harkishen/Work/Development/playground/main.go:47 +0x390
exit status 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment