@ -38,6 +38,8 @@ import (
"go.uber.org/atomic"
"go.uber.org/atomic"
"golang.org/x/sync/errgroup"
"golang.org/x/sync/errgroup"
"github.com/prometheus/prometheus/util/compression"
"github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/model/exemplar"
"github.com/prometheus/prometheus/model/exemplar"
"github.com/prometheus/prometheus/model/histogram"
"github.com/prometheus/prometheus/model/histogram"
@ -68,11 +70,11 @@ func newTestHeadDefaultOptions(chunkRange int64, oooEnabled bool) *HeadOptions {
return opts
return opts
}
}
func newTestHead ( t testing . TB , chunkRange int64 , compressWAL wlog . Compression Type, oooEnabled bool ) ( * Head , * wlog . WL ) {
func newTestHead ( t testing . TB , chunkRange int64 , compressWAL compression . Type , oooEnabled bool ) ( * Head , * wlog . WL ) {
return newTestHeadWithOptions ( t , compressWAL , newTestHeadDefaultOptions ( chunkRange , oooEnabled ) )
return newTestHeadWithOptions ( t , compressWAL , newTestHeadDefaultOptions ( chunkRange , oooEnabled ) )
}
}
func newTestHeadWithOptions ( t testing . TB , compressWAL wlog . Compression Type, opts * HeadOptions ) ( * Head , * wlog . WL ) {
func newTestHeadWithOptions ( t testing . TB , compressWAL compression . Type , opts * HeadOptions ) ( * Head , * wlog . WL ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compressWAL )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compressWAL )
require . NoError ( t , err )
require . NoError ( t , err )
@ -92,7 +94,7 @@ func newTestHeadWithOptions(t testing.TB, compressWAL wlog.CompressionType, opts
func BenchmarkCreateSeries ( b * testing . B ) {
func BenchmarkCreateSeries ( b * testing . B ) {
series := genSeries ( b . N , 10 , 0 , 0 )
series := genSeries ( b . N , 10 , 0 , 0 )
h , _ := newTestHead ( b , 10000 , wlog . Compression None, false )
h , _ := newTestHead ( b , 10000 , compression . None , false )
b . Cleanup ( func ( ) {
b . Cleanup ( func ( ) {
require . NoError ( b , h . Close ( ) )
require . NoError ( b , h . Close ( ) )
} )
} )
@ -113,7 +115,7 @@ func BenchmarkHeadAppender_Append_Commit_ExistingSeries(b *testing.B) {
b . Run ( fmt . Sprintf ( "%d series" , seriesCount ) , func ( b * testing . B ) {
b . Run ( fmt . Sprintf ( "%d series" , seriesCount ) , func ( b * testing . B ) {
for _ , samplesPerAppend := range [ ] int64 { 1 , 2 , 5 , 100 } {
for _ , samplesPerAppend := range [ ] int64 { 1 , 2 , 5 , 100 } {
b . Run ( fmt . Sprintf ( "%d samples per append" , samplesPerAppend ) , func ( b * testing . B ) {
b . Run ( fmt . Sprintf ( "%d samples per append" , samplesPerAppend ) , func ( b * testing . B ) {
h , _ := newTestHead ( b , 10000 , wlog . Compression None, false )
h , _ := newTestHead ( b , 10000 , compression . None , false )
b . Cleanup ( func ( ) { require . NoError ( b , h . Close ( ) ) } )
b . Cleanup ( func ( ) { require . NoError ( b , h . Close ( ) ) } )
ts := int64 ( 1000 )
ts := int64 ( 1000 )
@ -294,11 +296,11 @@ func BenchmarkLoadWLs(b *testing.B) {
func ( b * testing . B ) {
func ( b * testing . B ) {
dir := b . TempDir ( )
dir := b . TempDir ( )
wal , err := wlog . New ( nil , nil , dir , wlog . Compression None)
wal , err := wlog . New ( nil , nil , dir , compression . None )
require . NoError ( b , err )
require . NoError ( b , err )
var wbl * wlog . WL
var wbl * wlog . WL
if c . oooSeriesPct != 0 {
if c . oooSeriesPct != 0 {
wbl , err = wlog . New ( nil , nil , dir , wlog . Compression None)
wbl , err = wlog . New ( nil , nil , dir , compression . None )
require . NoError ( b , err )
require . NoError ( b , err )
}
}
@ -459,11 +461,11 @@ func BenchmarkLoadRealWLs(b *testing.B) {
dir := b . TempDir ( )
dir := b . TempDir ( )
require . NoError ( b , fileutil . CopyDirs ( srcDir , dir ) )
require . NoError ( b , fileutil . CopyDirs ( srcDir , dir ) )
wal , err := wlog . New ( nil , nil , filepath . Join ( dir , "wal" ) , wlog . Compression None)
wal , err := wlog . New ( nil , nil , filepath . Join ( dir , "wal" ) , compression . None )
require . NoError ( b , err )
require . NoError ( b , err )
b . Cleanup ( func ( ) { wal . Close ( ) } )
b . Cleanup ( func ( ) { wal . Close ( ) } )
wbl , err := wlog . New ( nil , nil , filepath . Join ( dir , "wbl" ) , wlog . Compression None)
wbl , err := wlog . New ( nil , nil , filepath . Join ( dir , "wbl" ) , compression . None )
require . NoError ( b , err )
require . NoError ( b , err )
b . Cleanup ( func ( ) { wbl . Close ( ) } )
b . Cleanup ( func ( ) { wbl . Close ( ) } )
b . StartTimer ( )
b . StartTimer ( )
@ -484,7 +486,7 @@ func BenchmarkLoadRealWLs(b *testing.B) {
// While appending the samples to the head it concurrently queries them from multiple go routines and verifies that the
// While appending the samples to the head it concurrently queries them from multiple go routines and verifies that the
// returned results are correct.
// returned results are correct.
func TestHead_HighConcurrencyReadAndWrite ( t * testing . T ) {
func TestHead_HighConcurrencyReadAndWrite ( t * testing . T ) {
head , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
head , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -674,7 +676,7 @@ func TestHead_HighConcurrencyReadAndWrite(t *testing.T) {
}
}
func TestHead_ReadWAL ( t * testing . T ) {
func TestHead_ReadWAL ( t * testing . T ) {
for _ , compress := range [ ] wlog . CompressionType { wlog . CompressionNone , wlog . CompressionSnappy , wlog . Compression Zstd} {
for _ , compress := range [ ] compression . Type { compression . None , compression . Snappy , compression . Zstd } {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
entries := [ ] interface { } {
entries := [ ] interface { } {
[ ] record . RefSeries {
[ ] record . RefSeries {
@ -769,7 +771,7 @@ func TestHead_ReadWAL(t *testing.T) {
}
}
func TestHead_WALMultiRef ( t * testing . T ) {
func TestHead_WALMultiRef ( t * testing . T ) {
head , w := newTestHead ( t , 1000 , wlog . Compression None, false )
head , w := newTestHead ( t , 1000 , compression . None , false )
require . NoError ( t , head . Init ( 0 ) )
require . NoError ( t , head . Init ( 0 ) )
@ -804,7 +806,7 @@ func TestHead_WALMultiRef(t *testing.T) {
require . NotEqual ( t , ref1 , ref2 , "Refs are the same" )
require . NotEqual ( t , ref1 , ref2 , "Refs are the same" )
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
w , err = wlog . New ( nil , nil , w . Dir ( ) , wlog . Compression None)
w , err = wlog . New ( nil , nil , w . Dir ( ) , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -871,7 +873,7 @@ func TestHead_KeepSeriesInWALCheckpoint(t *testing.T) {
for _ , tc := range cases {
for _ , tc := range cases {
t . Run ( tc . name , func ( t * testing . T ) {
t . Run ( tc . name , func ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} )
} )
@ -887,7 +889,7 @@ func TestHead_KeepSeriesInWALCheckpoint(t *testing.T) {
}
}
func TestHead_ActiveAppenders ( t * testing . T ) {
func TestHead_ActiveAppenders ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
defer head . Close ( )
defer head . Close ( )
require . NoError ( t , head . Init ( 0 ) )
require . NoError ( t , head . Init ( 0 ) )
@ -920,7 +922,7 @@ func TestHead_ActiveAppenders(t *testing.T) {
}
}
func TestHead_UnknownWALRecord ( t * testing . T ) {
func TestHead_UnknownWALRecord ( t * testing . T ) {
head , w := newTestHead ( t , 1000 , wlog . Compression None, false )
head , w := newTestHead ( t , 1000 , compression . None , false )
w . Log ( [ ] byte { 255 , 42 } )
w . Log ( [ ] byte { 255 , 42 } )
require . NoError ( t , head . Init ( 0 ) )
require . NoError ( t , head . Init ( 0 ) )
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
@ -932,7 +934,7 @@ func BenchmarkHead_Truncate(b *testing.B) {
const total = 1e6
const total = 1e6
prepare := func ( b * testing . B , churn int ) * Head {
prepare := func ( b * testing . B , churn int ) * Head {
h , _ := newTestHead ( b , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( b , 1000 , compression . None , false )
b . Cleanup ( func ( ) {
b . Cleanup ( func ( ) {
require . NoError ( b , h . Close ( ) )
require . NoError ( b , h . Close ( ) )
} )
} )
@ -1001,7 +1003,7 @@ func BenchmarkHead_Truncate(b *testing.B) {
}
}
func TestHead_Truncate ( t * testing . T ) {
func TestHead_Truncate ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -1311,7 +1313,7 @@ func TestMemSeries_truncateChunks_scenarios(t *testing.T) {
}
}
func TestHeadDeleteSeriesWithoutSamples ( t * testing . T ) {
func TestHeadDeleteSeriesWithoutSamples ( t * testing . T ) {
for _ , compress := range [ ] wlog . CompressionType { wlog . CompressionNone , wlog . CompressionSnappy , wlog . Compression Zstd} {
for _ , compress := range [ ] compression . Type { compression . None , compression . Snappy , compression . Zstd } {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
entries := [ ] interface { } {
entries := [ ] interface { } {
[ ] record . RefSeries {
[ ] record . RefSeries {
@ -1391,7 +1393,7 @@ func TestHeadDeleteSimple(t *testing.T) {
} ,
} ,
}
}
for _ , compress := range [ ] wlog . CompressionType { wlog . CompressionNone , wlog . CompressionSnappy , wlog . Compression Zstd} {
for _ , compress := range [ ] compression . Type { compression . None , compression . Snappy , compression . Zstd } {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
for _ , c := range cases {
for _ , c := range cases {
head , w := newTestHead ( t , 1000 , compress , false )
head , w := newTestHead ( t , 1000 , compress , false )
@ -1473,7 +1475,7 @@ func TestHeadDeleteSimple(t *testing.T) {
}
}
func TestDeleteUntilCurMax ( t * testing . T ) {
func TestDeleteUntilCurMax ( t * testing . T ) {
hb , _ := newTestHead ( t , 1000000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
} ( )
} ( )
@ -1526,7 +1528,7 @@ func TestDeletedSamplesAndSeriesStillInWALAfterCheckpoint(t *testing.T) {
numSamples := 10000
numSamples := 10000
// Enough samples to cause a checkpoint.
// Enough samples to cause a checkpoint.
hb , w := newTestHead ( t , int64 ( numSamples ) * 10 , wlog . Compression None, false )
hb , w := newTestHead ( t , int64 ( numSamples ) * 10 , compression . None , false )
for i := 0 ; i < numSamples ; i ++ {
for i := 0 ; i < numSamples ; i ++ {
app := hb . Appender ( context . Background ( ) )
app := hb . Appender ( context . Background ( ) )
@ -1618,7 +1620,7 @@ func TestDelete_e2e(t *testing.T) {
seriesMap [ labels . New ( l ... ) . String ( ) ] = [ ] chunks . Sample { }
seriesMap [ labels . New ( l ... ) . String ( ) ] = [ ] chunks . Sample { }
}
}
hb , _ := newTestHead ( t , 100000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 100000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
} ( )
} ( )
@ -1986,7 +1988,7 @@ func TestMemSeries_append_atVariableRate(t *testing.T) {
func TestGCChunkAccess ( t * testing . T ) {
func TestGCChunkAccess ( t * testing . T ) {
// Put a chunk, select it. GC it and then access it.
// Put a chunk, select it. GC it and then access it.
const chunkRange = 1000
const chunkRange = 1000
h , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
h , _ := newTestHead ( t , chunkRange , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2045,7 +2047,7 @@ func TestGCChunkAccess(t *testing.T) {
func TestGCSeriesAccess ( t * testing . T ) {
func TestGCSeriesAccess ( t * testing . T ) {
// Put a series, select it. GC it and then access it.
// Put a series, select it. GC it and then access it.
const chunkRange = 1000
const chunkRange = 1000
h , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
h , _ := newTestHead ( t , chunkRange , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2104,7 +2106,7 @@ func TestGCSeriesAccess(t *testing.T) {
}
}
func TestUncommittedSamplesNotLostOnTruncate ( t * testing . T ) {
func TestUncommittedSamplesNotLostOnTruncate ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2134,7 +2136,7 @@ func TestUncommittedSamplesNotLostOnTruncate(t *testing.T) {
}
}
func TestRemoveSeriesAfterRollbackAndTruncate ( t * testing . T ) {
func TestRemoveSeriesAfterRollbackAndTruncate ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2165,7 +2167,7 @@ func TestRemoveSeriesAfterRollbackAndTruncate(t *testing.T) {
}
}
func TestHead_LogRollback ( t * testing . T ) {
func TestHead_LogRollback ( t * testing . T ) {
for _ , compress := range [ ] wlog . CompressionType { wlog . CompressionNone , wlog . CompressionSnappy , wlog . Compression Zstd} {
for _ , compress := range [ ] compression . Type { compression . None , compression . Snappy , compression . Zstd } {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "compress=%s" , compress ) , func ( t * testing . T ) {
h , w := newTestHead ( t , 1000 , compress , false )
h , w := newTestHead ( t , 1000 , compress , false )
defer func ( ) {
defer func ( ) {
@ -2189,7 +2191,7 @@ func TestHead_LogRollback(t *testing.T) {
}
}
func TestHead_ReturnsSortedLabelValues ( t * testing . T ) {
func TestHead_ReturnsSortedLabelValues ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2253,7 +2255,7 @@ func TestWalRepair_DecodingError(t *testing.T) {
5 ,
5 ,
} ,
} ,
} {
} {
for _ , compress := range [ ] wlog . CompressionType { wlog . CompressionNone , wlog . CompressionSnappy , wlog . Compression Zstd} {
for _ , compress := range [ ] compression . Type { compression . None , compression . Snappy , compression . Zstd } {
t . Run ( fmt . Sprintf ( "%s,compress=%s" , name , compress ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "%s,compress=%s" , name , compress ) , func ( t * testing . T ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
@ -2327,9 +2329,9 @@ func TestWblRepair_DecodingError(t *testing.T) {
// Fill the wbl and corrupt it.
// Fill the wbl and corrupt it.
{
{
wal , err := wlog . New ( nil , nil , filepath . Join ( dir , "wal" ) , wlog . Compression None)
wal , err := wlog . New ( nil , nil , filepath . Join ( dir , "wal" ) , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
wbl , err := wlog . New ( nil , nil , filepath . Join ( dir , "wbl" ) , wlog . Compression None)
wbl , err := wlog . New ( nil , nil , filepath . Join ( dir , "wbl" ) , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
for i := 1 ; i <= totalRecs ; i ++ {
for i := 1 ; i <= totalRecs ; i ++ {
@ -2393,7 +2395,7 @@ func TestHeadReadWriterRepair(t *testing.T) {
walDir := filepath . Join ( dir , "wal" )
walDir := filepath . Join ( dir , "wal" )
// Fill the chunk segments and corrupt it.
// Fill the chunk segments and corrupt it.
{
{
w , err := wlog . New ( nil , nil , walDir , wlog . Compression None)
w , err := wlog . New ( nil , nil , walDir , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -2462,7 +2464,7 @@ func TestHeadReadWriterRepair(t *testing.T) {
}
}
func TestNewWalSegmentOnTruncate ( t * testing . T ) {
func TestNewWalSegmentOnTruncate ( t * testing . T ) {
h , wal := newTestHead ( t , 1000 , wlog . Compression None, false )
h , wal := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2492,7 +2494,7 @@ func TestNewWalSegmentOnTruncate(t *testing.T) {
}
}
func TestAddDuplicateLabelName ( t * testing . T ) {
func TestAddDuplicateLabelName ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2575,7 +2577,7 @@ func TestMemSeriesIsolation(t *testing.T) {
}
}
// Test isolation without restart of Head.
// Test isolation without restart of Head.
hb , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000 , compression . None , false )
i := addSamples ( hb )
i := addSamples ( hb )
testIsolation ( hb , i )
testIsolation ( hb , i )
@ -2637,11 +2639,11 @@ func TestMemSeriesIsolation(t *testing.T) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
// Test isolation with restart of Head. This is to verify the num samples of chunks after m-map chunk replay.
// Test isolation with restart of Head. This is to verify the num samples of chunks after m-map chunk replay.
hb , w := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , w := newTestHead ( t , 1000 , compression . None , false )
i = addSamples ( hb )
i = addSamples ( hb )
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
wal , err := wlog . NewSize ( nil , nil , w . Dir ( ) , 32768 , wlog . Compression None)
wal , err := wlog . NewSize ( nil , nil , w . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
opts . ChunkRange = 1000
opts . ChunkRange = 1000
@ -2690,7 +2692,7 @@ func TestIsolationRollback(t *testing.T) {
}
}
// Rollback after a failed append and test if the low watermark has progressed anyway.
// Rollback after a failed append and test if the low watermark has progressed anyway.
hb , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
} ( )
} ( )
@ -2721,7 +2723,7 @@ func TestIsolationLowWatermarkMonotonous(t *testing.T) {
t . Skip ( "skipping test since tsdb isolation is disabled" )
t . Skip ( "skipping test since tsdb isolation is disabled" )
}
}
hb , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
} ( )
} ( )
@ -2758,7 +2760,7 @@ func TestIsolationAppendIDZeroIsNoop(t *testing.T) {
t . Skip ( "skipping test since tsdb isolation is disabled" )
t . Skip ( "skipping test since tsdb isolation is disabled" )
}
}
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2789,7 +2791,7 @@ func TestIsolationWithoutAdd(t *testing.T) {
t . Skip ( "skipping test since tsdb isolation is disabled" )
t . Skip ( "skipping test since tsdb isolation is disabled" )
}
}
hb , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
require . NoError ( t , hb . Close ( ) )
} ( )
} ( )
@ -2914,7 +2916,7 @@ func testOutOfOrderSamplesMetric(t *testing.T, scenario sampleTypeScenario, opti
}
}
func testHeadSeriesChunkRace ( t * testing . T ) {
func testHeadSeriesChunkRace ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -2949,7 +2951,7 @@ func testHeadSeriesChunkRace(t *testing.T) {
}
}
func TestHeadLabelNamesValuesWithMinMaxRange ( t * testing . T ) {
func TestHeadLabelNamesValuesWithMinMaxRange ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -3010,7 +3012,7 @@ func TestHeadLabelNamesValuesWithMinMaxRange(t *testing.T) {
}
}
func TestHeadLabelValuesWithMatchers ( t * testing . T ) {
func TestHeadLabelValuesWithMatchers ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) { require . NoError ( t , head . Close ( ) ) } )
t . Cleanup ( func ( ) { require . NoError ( t , head . Close ( ) ) } )
ctx := context . Background ( )
ctx := context . Background ( )
@ -3086,7 +3088,7 @@ func TestHeadLabelValuesWithMatchers(t *testing.T) {
}
}
func TestHeadLabelNamesWithMatchers ( t * testing . T ) {
func TestHeadLabelNamesWithMatchers ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -3156,7 +3158,7 @@ func TestHeadLabelNamesWithMatchers(t *testing.T) {
func TestHeadShardedPostings ( t * testing . T ) {
func TestHeadShardedPostings ( t * testing . T ) {
headOpts := newTestHeadDefaultOptions ( 1000 , false )
headOpts := newTestHeadDefaultOptions ( 1000 , false )
headOpts . EnableSharding = true
headOpts . EnableSharding = true
head , _ := newTestHeadWithOptions ( t , wlog . Compression None, headOpts )
head , _ := newTestHeadWithOptions ( t , compression . None , headOpts )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -3219,7 +3221,7 @@ func TestHeadShardedPostings(t *testing.T) {
}
}
func TestErrReuseAppender ( t * testing . T ) {
func TestErrReuseAppender ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -3255,7 +3257,7 @@ func TestErrReuseAppender(t *testing.T) {
func TestHeadMintAfterTruncation ( t * testing . T ) {
func TestHeadMintAfterTruncation ( t * testing . T ) {
chunkRange := int64 ( 2000 )
chunkRange := int64 ( 2000 )
head , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
head , _ := newTestHead ( t , chunkRange , compression . None , false )
app := head . Appender ( context . Background ( ) )
app := head . Appender ( context . Background ( ) )
_ , err := app . Append ( 0 , labels . FromStrings ( "a" , "b" ) , 100 , 100 )
_ , err := app . Append ( 0 , labels . FromStrings ( "a" , "b" ) , 100 , 100 )
@ -3289,7 +3291,7 @@ func TestHeadMintAfterTruncation(t *testing.T) {
func TestHeadExemplars ( t * testing . T ) {
func TestHeadExemplars ( t * testing . T ) {
chunkRange := int64 ( 2000 )
chunkRange := int64 ( 2000 )
head , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
head , _ := newTestHead ( t , chunkRange , compression . None , false )
app := head . Appender ( context . Background ( ) )
app := head . Appender ( context . Background ( ) )
l := labels . FromStrings ( "trace_id" , "123" )
l := labels . FromStrings ( "trace_id" , "123" )
@ -3311,7 +3313,7 @@ func TestHeadExemplars(t *testing.T) {
func BenchmarkHeadLabelValuesWithMatchers ( b * testing . B ) {
func BenchmarkHeadLabelValuesWithMatchers ( b * testing . B ) {
chunkRange := int64 ( 2000 )
chunkRange := int64 ( 2000 )
head , _ := newTestHead ( b , chunkRange , wlog . Compression None, false )
head , _ := newTestHead ( b , chunkRange , compression . None , false )
b . Cleanup ( func ( ) { require . NoError ( b , head . Close ( ) ) } )
b . Cleanup ( func ( ) { require . NoError ( b , head . Close ( ) ) } )
ctx := context . Background ( )
ctx := context . Background ( )
@ -3756,7 +3758,7 @@ func TestAppendHistogram(t *testing.T) {
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
for _ , numHistograms := range [ ] int { 1 , 10 , 150 , 200 , 250 , 300 } {
for _ , numHistograms := range [ ] int { 1 , 10 , 150 , 200 , 250 , 300 } {
t . Run ( strconv . Itoa ( numHistograms ) , func ( t * testing . T ) {
t . Run ( strconv . Itoa ( numHistograms ) , func ( t * testing . T ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -3860,7 +3862,7 @@ func TestAppendHistogram(t *testing.T) {
}
}
func TestHistogramInWALAndMmapChunk ( t * testing . T ) {
func TestHistogramInWALAndMmapChunk ( t * testing . T ) {
head , _ := newTestHead ( t , 3000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 3000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -4011,7 +4013,7 @@ func TestHistogramInWALAndMmapChunk(t *testing.T) {
// Restart head.
// Restart head.
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
startHead := func ( ) {
startHead := func ( ) {
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -4040,7 +4042,7 @@ func TestHistogramInWALAndMmapChunk(t *testing.T) {
}
}
func TestChunkSnapshot ( t * testing . T ) {
func TestChunkSnapshot ( t * testing . T ) {
head , _ := newTestHead ( t , 120 * 4 , wlog . Compression None, false )
head , _ := newTestHead ( t , 120 * 4 , compression . None , false )
defer func ( ) {
defer func ( ) {
head . opts . EnableMemorySnapshotOnShutdown = false
head . opts . EnableMemorySnapshotOnShutdown = false
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
@ -4133,7 +4135,7 @@ func TestChunkSnapshot(t *testing.T) {
}
}
openHeadAndCheckReplay := func ( ) {
openHeadAndCheckReplay := func ( ) {
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -4327,7 +4329,7 @@ func TestChunkSnapshot(t *testing.T) {
}
}
func TestSnapshotError ( t * testing . T ) {
func TestSnapshotError ( t * testing . T ) {
head , _ := newTestHead ( t , 120 * 4 , wlog . Compression None, false )
head , _ := newTestHead ( t , 120 * 4 , compression . None , false )
defer func ( ) {
defer func ( ) {
head . opts . EnableMemorySnapshotOnShutdown = false
head . opts . EnableMemorySnapshotOnShutdown = false
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
@ -4387,7 +4389,7 @@ func TestSnapshotError(t *testing.T) {
require . NoError ( t , f . Close ( ) )
require . NoError ( t , f . Close ( ) )
// Create new Head which should replay this snapshot.
// Create new Head which should replay this snapshot.
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
// Testing https://github.com/prometheus/prometheus/issues/9437 with the registry.
// Testing https://github.com/prometheus/prometheus/issues/9437 with the registry.
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
@ -4416,7 +4418,7 @@ func TestSnapshotError(t *testing.T) {
opts := head . opts
opts := head . opts
opts . SeriesCallback = c
opts . SeriesCallback = c
w , err = wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err = wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -4438,7 +4440,7 @@ func TestSnapshotError(t *testing.T) {
func TestHistogramMetrics ( t * testing . T ) {
func TestHistogramMetrics ( t * testing . T ) {
numHistograms := 10
numHistograms := 10
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -4468,7 +4470,7 @@ func TestHistogramMetrics(t *testing.T) {
require . Equal ( t , float64 ( expHSamples ) , prom_testutil . ToFloat64 ( head . metrics . samplesAppended . WithLabelValues ( sampleMetricTypeHistogram ) ) )
require . Equal ( t , float64 ( expHSamples ) , prom_testutil . ToFloat64 ( head . metrics . samplesAppended . WithLabelValues ( sampleMetricTypeHistogram ) ) )
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -4490,7 +4492,7 @@ func testHistogramStaleSampleHelper(t *testing.T, floatHistogram bool) {
t . Helper ( )
t . Helper ( )
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
numHistograms := 20
numHistograms := 20
head , _ := newTestHead ( t , 100000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 100000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -4642,7 +4644,7 @@ func TestHistogramCounterResetHeader(t *testing.T) {
for _ , floatHisto := range [ ] bool { true } { // FIXME
for _ , floatHisto := range [ ] bool { true } { // FIXME
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -4763,7 +4765,7 @@ func TestOOOHistogramCounterResetHeaders(t *testing.T) {
for _ , floatHisto := range [ ] bool { true , false } {
for _ , floatHisto := range [ ] bool { true , false } {
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, true )
head , _ := newTestHead ( t , 1000 , compression . None , true )
head . opts . OutOfOrderCapMax . Store ( 5 )
head . opts . OutOfOrderCapMax . Store ( 5 )
head . opts . EnableOOONativeHistograms . Store ( true )
head . opts . EnableOOONativeHistograms . Store ( true )
@ -5074,7 +5076,7 @@ func TestAppendingDifferentEncodingToSameSeries(t *testing.T) {
// Tests https://github.com/prometheus/prometheus/issues/9725.
// Tests https://github.com/prometheus/prometheus/issues/9725.
func TestChunkSnapshotReplayBug ( t * testing . T ) {
func TestChunkSnapshotReplayBug ( t * testing . T ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
// Write few series records and samples such that the series references are not in order in the WAL
// Write few series records and samples such that the series references are not in order in the WAL
@ -5141,7 +5143,7 @@ func TestChunkSnapshotReplayBug(t *testing.T) {
func TestChunkSnapshotTakenAfterIncompleteSnapshot ( t * testing . T ) {
func TestChunkSnapshotTakenAfterIncompleteSnapshot ( t * testing . T ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wlTemp , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wlTemp , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
// Write a snapshot with .tmp suffix. This used to fail taking any further snapshots or replay of snapshots.
// Write a snapshot with .tmp suffix. This used to fail taking any further snapshots or replay of snapshots.
@ -5186,9 +5188,9 @@ func TestWBLReplay(t *testing.T) {
func testWBLReplay ( t * testing . T , scenario sampleTypeScenario ) {
func testWBLReplay ( t * testing . T , scenario sampleTypeScenario ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5234,9 +5236,9 @@ func testWBLReplay(t *testing.T, scenario sampleTypeScenario) {
// Restart head.
// Restart head.
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -5280,9 +5282,9 @@ func TestOOOMmapReplay(t *testing.T) {
func testOOOMmapReplay ( t * testing . T , scenario sampleTypeScenario ) {
func testOOOMmapReplay ( t * testing . T , scenario sampleTypeScenario ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5332,9 +5334,9 @@ func testOOOMmapReplay(t *testing.T, scenario sampleTypeScenario) {
// Restart head.
// Restart head.
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -5363,7 +5365,7 @@ func testOOOMmapReplay(t *testing.T, scenario sampleTypeScenario) {
}
}
func TestHeadInit_DiscardChunksWithUnsupportedEncoding ( t * testing . T ) {
func TestHeadInit_DiscardChunksWithUnsupportedEncoding ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -5407,7 +5409,7 @@ func TestHeadInit_DiscardChunksWithUnsupportedEncoding(t *testing.T) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( h . opts . ChunkDirRoot , "wal" ) , 32768 , wlog . Compression None)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( h . opts . ChunkDirRoot , "wal" ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
h , err = NewHead ( nil , nil , wal , nil , h . opts , nil )
h , err = NewHead ( nil , nil , wal , nil , h . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -5442,7 +5444,7 @@ func (c *unsupportedChunk) Encoding() chunkenc.Encoding {
// Tests https://github.com/prometheus/prometheus/issues/10277.
// Tests https://github.com/prometheus/prometheus/issues/10277.
func TestMmapPanicAfterMmapReplayCorruption ( t * testing . T ) {
func TestMmapPanicAfterMmapReplayCorruption ( t * testing . T ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression None)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5475,7 +5477,7 @@ func TestMmapPanicAfterMmapReplayCorruption(t *testing.T) {
addChunks ( )
addChunks ( )
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression None)
wal , err = wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
mmapFilePath := filepath . Join ( dir , "chunks_head" , "000001" )
mmapFilePath := filepath . Join ( dir , "chunks_head" , "000001" )
@ -5501,7 +5503,7 @@ func TestReplayAfterMmapReplayError(t *testing.T) {
var err error
var err error
openHead := func ( ) {
openHead := func ( ) {
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression None)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5584,9 +5586,9 @@ func TestOOOAppendWithNoSeries(t *testing.T) {
func testOOOAppendWithNoSeries ( t * testing . T , appendFunc func ( appender storage . Appender , lbls labels . Labels , ts , value int64 ) ( storage . SeriesRef , sample , error ) ) {
func testOOOAppendWithNoSeries ( t * testing . T , appendFunc func ( appender storage . Appender , lbls labels . Labels , ts , value int64 ) ( storage . SeriesRef , sample , error ) ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5677,9 +5679,9 @@ func TestHeadMinOOOTimeUpdate(t *testing.T) {
func testHeadMinOOOTimeUpdate ( t * testing . T , scenario sampleTypeScenario ) {
func testHeadMinOOOTimeUpdate ( t * testing . T , scenario sampleTypeScenario ) {
dir := t . TempDir ( )
dir := t . TempDir ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , wlog . Compression Snappy)
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , wlog . Compression Snappy)
oooWlog , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , wlog . WblDirName ) , 32768 , compression . Snappy )
require . NoError ( t , err )
require . NoError ( t , err )
opts := DefaultHeadOptions ( )
opts := DefaultHeadOptions ( )
@ -5724,7 +5726,7 @@ func testHeadMinOOOTimeUpdate(t *testing.T, scenario sampleTypeScenario) {
func TestGaugeHistogramWALAndChunkHeader ( t * testing . T ) {
func TestGaugeHistogramWALAndChunkHeader ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -5789,7 +5791,7 @@ func TestGaugeHistogramWALAndChunkHeader(t *testing.T) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
require . NoError ( t , os . RemoveAll ( mmappedChunksDir ( head . opts . ChunkDirRoot ) ) )
require . NoError ( t , os . RemoveAll ( mmappedChunksDir ( head . opts . ChunkDirRoot ) ) )
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -5800,7 +5802,7 @@ func TestGaugeHistogramWALAndChunkHeader(t *testing.T) {
func TestGaugeFloatHistogramWALAndChunkHeader ( t * testing . T ) {
func TestGaugeFloatHistogramWALAndChunkHeader ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} )
} )
@ -5865,7 +5867,7 @@ func TestGaugeFloatHistogramWALAndChunkHeader(t *testing.T) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
require . NoError ( t , os . RemoveAll ( mmappedChunksDir ( head . opts . ChunkDirRoot ) ) )
require . NoError ( t , os . RemoveAll ( mmappedChunksDir ( head . opts . ChunkDirRoot ) ) )
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , err := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
require . NoError ( t , err )
require . NoError ( t , err )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
@ -5875,7 +5877,7 @@ func TestGaugeFloatHistogramWALAndChunkHeader(t *testing.T) {
}
}
func TestSnapshotAheadOfWALError ( t * testing . T ) {
func TestSnapshotAheadOfWALError ( t * testing . T ) {
head , _ := newTestHead ( t , 120 * 4 , wlog . Compression None, false )
head , _ := newTestHead ( t , 120 * 4 , compression . None , false )
head . opts . EnableMemorySnapshotOnShutdown = true
head . opts . EnableMemorySnapshotOnShutdown = true
// Add a sample to fill WAL.
// Add a sample to fill WAL.
app := head . Appender ( context . Background ( ) )
app := head . Appender ( context . Background ( ) )
@ -5898,7 +5900,7 @@ func TestSnapshotAheadOfWALError(t *testing.T) {
// to keep using the same snapshot directory instead of a random one.
// to keep using the same snapshot directory instead of a random one.
require . NoError ( t , os . RemoveAll ( head . wal . Dir ( ) ) )
require . NoError ( t , os . RemoveAll ( head . wal . Dir ( ) ) )
head . opts . EnableMemorySnapshotOnShutdown = false
head . opts . EnableMemorySnapshotOnShutdown = false
w , _ := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , _ := wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
// Add a sample to fill WAL.
// Add a sample to fill WAL.
@ -5917,7 +5919,7 @@ func TestSnapshotAheadOfWALError(t *testing.T) {
// Create new Head which should detect the incorrect index and delete the snapshot.
// Create new Head which should detect the incorrect index and delete the snapshot.
head . opts . EnableMemorySnapshotOnShutdown = true
head . opts . EnableMemorySnapshotOnShutdown = true
w , _ = wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , wlog . Compression None)
w , _ = wlog . NewSize ( nil , nil , head . wal . Dir ( ) , 32768 , compression . None )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
require . NoError ( t , err )
require . NoError ( t , head . Init ( math . MinInt64 ) )
require . NoError ( t , head . Init ( math . MinInt64 ) )
@ -5936,7 +5938,7 @@ func BenchmarkCuttingHeadHistogramChunks(b *testing.B) {
)
)
samples := histogram . GenerateBigTestHistograms ( numSamples , numBuckets )
samples := histogram . GenerateBigTestHistograms ( numSamples , numBuckets )
h , _ := newTestHead ( b , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( b , DefaultBlockDuration , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( b , h . Close ( ) )
require . NoError ( b , h . Close ( ) )
} ( )
} ( )
@ -6053,7 +6055,7 @@ func TestCuttingNewHeadChunks(t *testing.T) {
}
}
for testName , tc := range testCases {
for testName , tc := range testCases {
t . Run ( testName , func ( t * testing . T ) {
t . Run ( testName , func ( t * testing . T ) {
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -6121,7 +6123,7 @@ func TestHeadDetectsDuplicateSampleAtSizeLimit(t *testing.T) {
numSamples := 1000
numSamples := 1000
baseTS := int64 ( 1695209650 )
baseTS := int64 ( 1695209650 )
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -6188,7 +6190,7 @@ func TestWALSampleAndExemplarOrder(t *testing.T) {
for testName , tc := range testcases {
for testName , tc := range testcases {
t . Run ( testName , func ( t * testing . T ) {
t . Run ( testName , func ( t * testing . T ) {
h , w := newTestHead ( t , 1000 , wlog . Compression None, false )
h , w := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -6225,7 +6227,7 @@ func TestWALSampleAndExemplarOrder(t *testing.T) {
// `signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0xbb03d1`
// `signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0xbb03d1`
// panic, that we have seen in the wild once.
// panic, that we have seen in the wild once.
func TestHeadCompactionWhileAppendAndCommitExemplar ( t * testing . T ) {
func TestHeadCompactionWhileAppendAndCommitExemplar ( t * testing . T ) {
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
app := h . Appender ( context . Background ( ) )
app := h . Appender ( context . Background ( ) )
lbls := labels . FromStrings ( "foo" , "bar" )
lbls := labels . FromStrings ( "foo" , "bar" )
ref , err := app . Append ( 0 , lbls , 1 , 1 )
ref , err := app . Append ( 0 , lbls , 1 , 1 )
@ -6338,7 +6340,7 @@ func TestPostingsCardinalityStats(t *testing.T) {
}
}
func TestHeadAppender_AppendFloatWithSameTimestampAsPreviousHistogram ( t * testing . T ) {
func TestHeadAppender_AppendFloatWithSameTimestampAsPreviousHistogram ( t * testing . T ) {
head , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
head , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
t . Cleanup ( func ( ) { head . Close ( ) } )
t . Cleanup ( func ( ) { head . Close ( ) } )
ls := labels . FromStrings ( labels . MetricName , "test" )
ls := labels . FromStrings ( labels . MetricName , "test" )
@ -6554,7 +6556,7 @@ func TestHeadAppender_AppendCT(t *testing.T) {
} ,
} ,
} {
} {
t . Run ( tc . name , func ( t * testing . T ) {
t . Run ( tc . name , func ( t * testing . T ) {
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , h . Close ( ) )
require . NoError ( t , h . Close ( ) )
} ( )
} ( )
@ -6592,7 +6594,7 @@ func TestHeadCompactableDoesNotCompactEmptyHead(t *testing.T) {
// was compactable using default values for min and max times, `Head.compactable()`
// was compactable using default values for min and max times, `Head.compactable()`
// would return true which is incorrect. This test verifies that we short-circuit
// would return true which is incorrect. This test verifies that we short-circuit
// the check when the head has not yet had any samples added.
// the check when the head has not yet had any samples added.
head , _ := newTestHead ( t , 1 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )
@ -6634,7 +6636,7 @@ func TestHeadAppendHistogramAndCommitConcurrency(t *testing.T) {
}
}
func testHeadAppendHistogramAndCommitConcurrency ( t * testing . T , appendFn func ( storage . Appender , int ) error ) {
func testHeadAppendHistogramAndCommitConcurrency ( t * testing . T , appendFn func ( storage . Appender , int ) error ) {
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
defer func ( ) {
require . NoError ( t , head . Close ( ) )
require . NoError ( t , head . Close ( ) )
} ( )
} ( )