tsdb: fix issue where a new segment file is created for every chunk if `WithSegmentSize` not called (#16635)
buf.build / lint and publish (push) Waiting to run
Details
CI / Go tests (push) Waiting to run
Details
CI / More Go tests (push) Waiting to run
Details
CI / Go tests with previous Go version (push) Waiting to run
Details
CI / UI tests (push) Waiting to run
Details
CI / Go tests on Windows (push) Waiting to run
Details
CI / Mixins tests (push) Waiting to run
Details
CI / Build Prometheus for common architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (10) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (11) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (3) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (4) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (5) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (6) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (7) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (8) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (9) (push) Waiting to run
Details
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
Details
CI / Check generated parser (push) Waiting to run
Details
CI / golangci-lint (push) Waiting to run
Details
CI / fuzzing (push) Waiting to run
Details
CI / codeql (push) Waiting to run
Details
CI / Publish main branch artifacts (push) Blocked by required conditions
Details
CI / Publish release artefacts (push) Blocked by required conditions
Details
CI / Publish UI on npm Registry (push) Blocked by required conditions
Details
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Details
buf.build / lint and publish (push) Waiting to run
Details
CI / Go tests (push) Waiting to run
Details
CI / More Go tests (push) Waiting to run
Details
CI / Go tests with previous Go version (push) Waiting to run
Details
CI / UI tests (push) Waiting to run
Details
CI / Go tests on Windows (push) Waiting to run
Details
CI / Mixins tests (push) Waiting to run
Details
CI / Build Prometheus for common architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for common architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (0) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (1) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (10) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (11) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (2) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (3) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (4) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (5) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (6) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (7) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (8) (push) Waiting to run
Details
CI / Build Prometheus for all architectures (9) (push) Waiting to run
Details
CI / Report status of build Prometheus for all architectures (push) Blocked by required conditions
Details
CI / Check generated parser (push) Waiting to run
Details
CI / golangci-lint (push) Waiting to run
Details
CI / fuzzing (push) Waiting to run
Details
CI / codeql (push) Waiting to run
Details
CI / Publish main branch artifacts (push) Blocked by required conditions
Details
CI / Publish release artefacts (push) Blocked by required conditions
Details
CI / Publish UI on npm Registry (push) Blocked by required conditions
Details
Scorecards supply-chain security / Scorecards analysis (push) Waiting to run
Details
* tsdb: fix issue where a new segment file is created for every chunk Signed-off-by: Charles Korn <charles.korn@grafana.com> * Address PR feedback Signed-off-by: Charles Korn <charles.korn@grafana.com> --------- Signed-off-by: Charles Korn <charles.korn@grafana.com>
This commit is contained in:
parent
e597a5af92
commit
ab1b1db128
|
@ -307,18 +307,24 @@ func WithUncachedIO(enabled bool) WriterOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithSegmentSize sets the chunk segment size for the writer.
|
||||||
|
// Passing a value less than or equal to 0 causes the default segment size (DefaultChunkSegmentSize) to be used.
|
||||||
func WithSegmentSize(segmentSize int64) WriterOption {
|
func WithSegmentSize(segmentSize int64) WriterOption {
|
||||||
return func(o *writerOptions) {
|
return func(o *writerOptions) {
|
||||||
if segmentSize <= 0 {
|
if segmentSize <= 0 {
|
||||||
segmentSize = DefaultChunkSegmentSize
|
segmentSize = DefaultChunkSegmentSize
|
||||||
}
|
}
|
||||||
|
|
||||||
o.segmentSize = segmentSize
|
o.segmentSize = segmentSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWriter returns a new writer against the given directory.
|
// NewWriter returns a new writer against the given directory.
|
||||||
|
// It uses DefaultChunkSegmentSize as the default segment size.
|
||||||
func NewWriter(dir string, opts ...WriterOption) (*Writer, error) {
|
func NewWriter(dir string, opts ...WriterOption) (*Writer, error) {
|
||||||
options := &writerOptions{}
|
options := &writerOptions{
|
||||||
|
segmentSize: DefaultChunkSegmentSize,
|
||||||
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
opt(options)
|
opt(options)
|
||||||
|
|
|
@ -14,9 +14,12 @@
|
||||||
package chunks
|
package chunks
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/prometheus/prometheus/tsdb/tsdbutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReaderWithInvalidBuffer(t *testing.T) {
|
func TestReaderWithInvalidBuffer(t *testing.T) {
|
||||||
|
@ -26,3 +29,32 @@ func TestReaderWithInvalidBuffer(t *testing.T) {
|
||||||
_, _, err := r.ChunkOrIterable(Meta{Ref: 0})
|
_, _, err := r.ChunkOrIterable(Meta{Ref: 0})
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWriterWithDefaultSegmentSize(t *testing.T) {
|
||||||
|
chk1, err := ChunkFromSamples([]Sample{
|
||||||
|
sample{t: 10, f: 11},
|
||||||
|
sample{t: 20, f: 12},
|
||||||
|
sample{t: 30, f: 13},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
chk2, err := ChunkFromSamples([]Sample{
|
||||||
|
sample{t: 40, h: tsdbutil.GenerateTestHistogram(1)},
|
||||||
|
sample{t: 50, h: tsdbutil.GenerateTestHistogram(2)},
|
||||||
|
sample{t: 60, h: tsdbutil.GenerateTestHistogram(3)},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
dir := t.TempDir()
|
||||||
|
w, err := NewWriter(dir)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = w.WriteChunks(chk1, chk2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.NoError(t, w.Close())
|
||||||
|
|
||||||
|
d, err := os.ReadDir(dir)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, d, 1, "expected only one segment to be created to hold both chunks")
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue