@ -46,6 +46,7 @@ import (
"github.com/prometheus/prometheus/storage"
"github.com/prometheus/prometheus/tsdb/chunkenc"
"github.com/prometheus/prometheus/tsdb/chunks"
"github.com/prometheus/prometheus/tsdb/compression"
"github.com/prometheus/prometheus/tsdb/fileutil"
"github.com/prometheus/prometheus/tsdb/index"
"github.com/prometheus/prometheus/tsdb/record"
@ -68,11 +69,11 @@ func newTestHeadDefaultOptions(chunkRange int64, oooEnabled bool) *HeadOptions {
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 ) )
}
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 ( )
wal , err := wlog . NewSize ( nil , nil , filepath . Join ( dir , "wal" ) , 32768 , compressWAL )
require . NoError ( t , err )
@ -92,7 +93,7 @@ func newTestHeadWithOptions(t testing.TB, compressWAL wlog.CompressionType, opts
func BenchmarkCreateSeries ( b * testing . B ) {
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 ( ) {
require . NoError ( b , h . Close ( ) )
} )
@ -113,7 +114,7 @@ func BenchmarkHeadAppender_Append_Commit_ExistingSeries(b *testing.B) {
b . Run ( fmt . Sprintf ( "%d series" , seriesCount ) , func ( b * testing . B ) {
for _ , samplesPerAppend := range [ ] int64 { 1 , 2 , 5 , 100 } {
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 ( ) ) } )
ts := int64 ( 1000 )
@ -294,11 +295,11 @@ func BenchmarkLoadWLs(b *testing.B) {
func ( b * testing . B ) {
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 )
var wbl * wlog . WL
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 )
}
@ -459,11 +460,11 @@ func BenchmarkLoadRealWLs(b *testing.B) {
dir := b . TempDir ( )
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 )
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 )
b . Cleanup ( func ( ) { wbl . Close ( ) } )
b . StartTimer ( )
@ -484,7 +485,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
// returned results are correct.
func TestHead_HighConcurrencyReadAndWrite ( t * testing . T ) {
head , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
head , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -674,7 +675,7 @@ func TestHead_HighConcurrencyReadAndWrite(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 ) {
entries := [ ] interface { } {
[ ] record . RefSeries {
@ -756,7 +757,7 @@ func TestHead_ReadWAL(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 ) )
@ -791,7 +792,7 @@ func TestHead_WALMultiRef(t *testing.T) {
require . NotEqual ( t , ref1 , ref2 , "Refs are the same" )
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 )
opts := DefaultHeadOptions ( )
@ -816,7 +817,7 @@ func TestHead_WALMultiRef(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 ( )
require . NoError ( t , head . Init ( 0 ) )
@ -849,7 +850,7 @@ func TestHead_ActiveAppenders(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 } )
require . NoError ( t , head . Init ( 0 ) )
require . NoError ( t , head . Close ( ) )
@ -861,7 +862,7 @@ func BenchmarkHead_Truncate(b *testing.B) {
const total = 1e6
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 ( ) {
require . NoError ( b , h . Close ( ) )
} )
@ -930,7 +931,7 @@ func BenchmarkHead_Truncate(b *testing.B) {
}
func TestHead_Truncate ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -1240,7 +1241,7 @@ func TestMemSeries_truncateChunks_scenarios(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 ) {
entries := [ ] interface { } {
[ ] record . RefSeries {
@ -1320,7 +1321,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 ) {
for _ , c := range cases {
head , w := newTestHead ( t , 1000 , compress , false )
@ -1402,7 +1403,7 @@ func TestHeadDeleteSimple(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 ( ) {
require . NoError ( t , hb . Close ( ) )
} ( )
@ -1455,7 +1456,7 @@ func TestDeletedSamplesAndSeriesStillInWALAfterCheckpoint(t *testing.T) {
numSamples := 10000
// 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 ++ {
app := hb . Appender ( context . Background ( ) )
@ -1547,7 +1548,7 @@ func TestDelete_e2e(t *testing.T) {
seriesMap [ labels . New ( l ... ) . String ( ) ] = [ ] chunks . Sample { }
}
hb , _ := newTestHead ( t , 100000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 100000 , compression . None , false )
defer func ( ) {
require . NoError ( t , hb . Close ( ) )
} ( )
@ -1915,7 +1916,7 @@ func TestMemSeries_append_atVariableRate(t *testing.T) {
func TestGCChunkAccess ( t * testing . T ) {
// Put a chunk, select it. GC it and then access it.
const chunkRange = 1000
h , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
h , _ := newTestHead ( t , chunkRange , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -1974,7 +1975,7 @@ func TestGCChunkAccess(t *testing.T) {
func TestGCSeriesAccess ( t * testing . T ) {
// Put a series, select it. GC it and then access it.
const chunkRange = 1000
h , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
h , _ := newTestHead ( t , chunkRange , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2033,7 +2034,7 @@ func TestGCSeriesAccess(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2063,7 +2064,7 @@ func TestUncommittedSamplesNotLostOnTruncate(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2094,7 +2095,7 @@ func TestRemoveSeriesAfterRollbackAndTruncate(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 ) {
h , w := newTestHead ( t , 1000 , compress , false )
defer func ( ) {
@ -2118,7 +2119,7 @@ func TestHead_LogRollback(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2182,7 +2183,7 @@ func TestWalRepair_DecodingError(t *testing.T) {
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 ) {
dir := t . TempDir ( )
@ -2256,9 +2257,9 @@ func TestWblRepair_DecodingError(t *testing.T) {
// 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 )
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 )
for i := 1 ; i <= totalRecs ; i ++ {
@ -2322,7 +2323,7 @@ func TestHeadReadWriterRepair(t *testing.T) {
walDir := filepath . Join ( dir , "wal" )
// 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 )
opts := DefaultHeadOptions ( )
@ -2391,7 +2392,7 @@ func TestHeadReadWriterRepair(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2421,7 +2422,7 @@ func TestNewWalSegmentOnTruncate(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2504,7 +2505,7 @@ func TestMemSeriesIsolation(t *testing.T) {
}
// Test isolation without restart of Head.
hb , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , _ := newTestHead ( t , 1000 , compression . None , false )
i := addSamples ( hb )
testIsolation ( hb , i )
@ -2566,11 +2567,11 @@ func TestMemSeriesIsolation(t *testing.T) {
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.
hb , w := newTestHead ( t , 1000 , wlog . Compression None, false )
hb , w := newTestHead ( t , 1000 , compression . None , false )
i = addSamples ( hb )
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 )
opts := DefaultHeadOptions ( )
opts . ChunkRange = 1000
@ -2619,7 +2620,7 @@ func TestIsolationRollback(t *testing.T) {
}
// 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 ( ) {
require . NoError ( t , hb . Close ( ) )
} ( )
@ -2650,7 +2651,7 @@ func TestIsolationLowWatermarkMonotonous(t *testing.T) {
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 ( ) {
require . NoError ( t , hb . Close ( ) )
} ( )
@ -2687,7 +2688,7 @@ func TestIsolationAppendIDZeroIsNoop(t *testing.T) {
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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2718,7 +2719,7 @@ func TestIsolationWithoutAdd(t *testing.T) {
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 ( ) {
require . NoError ( t , hb . Close ( ) )
} ( )
@ -2843,7 +2844,7 @@ func testOutOfOrderSamplesMetric(t *testing.T, scenario sampleTypeScenario, opti
}
func testHeadSeriesChunkRace ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -2878,7 +2879,7 @@ func testHeadSeriesChunkRace(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 ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -2939,7 +2940,7 @@ func TestHeadLabelNamesValuesWithMinMaxRange(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 ( ) ) } )
ctx := context . Background ( )
@ -3015,7 +3016,7 @@ func TestHeadLabelValuesWithMatchers(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 ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -3085,7 +3086,7 @@ func TestHeadLabelNamesWithMatchers(t *testing.T) {
func TestHeadShardedPostings ( t * testing . T ) {
headOpts := newTestHeadDefaultOptions ( 1000 , false )
headOpts . EnableSharding = true
head , _ := newTestHeadWithOptions ( t , wlog . Compression None, headOpts )
head , _ := newTestHeadWithOptions ( t , compression . None , headOpts )
defer func ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -3148,7 +3149,7 @@ func TestHeadShardedPostings(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 ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -3184,7 +3185,7 @@ func TestErrReuseAppender(t *testing.T) {
func TestHeadMintAfterTruncation ( t * testing . T ) {
chunkRange := int64 ( 2000 )
head , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
head , _ := newTestHead ( t , chunkRange , compression . None , false )
app := head . Appender ( context . Background ( ) )
_ , err := app . Append ( 0 , labels . FromStrings ( "a" , "b" ) , 100 , 100 )
@ -3218,7 +3219,7 @@ func TestHeadMintAfterTruncation(t *testing.T) {
func TestHeadExemplars ( t * testing . T ) {
chunkRange := int64 ( 2000 )
head , _ := newTestHead ( t , chunkRange , wlog . Compression None, false )
head , _ := newTestHead ( t , chunkRange , compression . None , false )
app := head . Appender ( context . Background ( ) )
l := labels . FromStrings ( "trace_id" , "123" )
@ -3240,7 +3241,7 @@ func TestHeadExemplars(t *testing.T) {
func BenchmarkHeadLabelValuesWithMatchers ( b * testing . B ) {
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 ( ) ) } )
ctx := context . Background ( )
@ -3685,7 +3686,7 @@ func TestAppendHistogram(t *testing.T) {
l := labels . FromStrings ( "a" , "b" )
for _ , numHistograms := range [ ] int { 1 , 10 , 150 , 200 , 250 , 300 } {
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 ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -3789,7 +3790,7 @@ func TestAppendHistogram(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 ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -3940,7 +3941,7 @@ func TestHistogramInWALAndMmapChunk(t *testing.T) {
// Restart head.
require . NoError ( t , head . Close ( ) )
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 )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -3969,7 +3970,7 @@ func TestHistogramInWALAndMmapChunk(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 ( ) {
head . opts . EnableMemorySnapshotOnShutdown = false
require . NoError ( t , head . Close ( ) )
@ -4062,7 +4063,7 @@ func TestChunkSnapshot(t *testing.T) {
}
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 )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -4256,7 +4257,7 @@ func TestChunkSnapshot(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 ( ) {
head . opts . EnableMemorySnapshotOnShutdown = false
require . NoError ( t , head . Close ( ) )
@ -4316,7 +4317,7 @@ func TestSnapshotError(t *testing.T) {
require . NoError ( t , f . Close ( ) )
// 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 )
// Testing https://github.com/prometheus/prometheus/issues/9437 with the registry.
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
@ -4345,7 +4346,7 @@ func TestSnapshotError(t *testing.T) {
opts := head . opts
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 )
head , err = NewHead ( prometheus . NewRegistry ( ) , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -4367,7 +4368,7 @@ func TestSnapshotError(t *testing.T) {
func TestHistogramMetrics ( t * testing . T ) {
numHistograms := 10
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -4397,7 +4398,7 @@ func TestHistogramMetrics(t *testing.T) {
require . Equal ( t , float64 ( expHSamples ) , prom_testutil . ToFloat64 ( head . metrics . samplesAppended . WithLabelValues ( sampleMetricTypeHistogram ) ) )
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 )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -4419,7 +4420,7 @@ func testHistogramStaleSampleHelper(t *testing.T, floatHistogram bool) {
t . Helper ( )
l := labels . FromStrings ( "a" , "b" )
numHistograms := 20
head , _ := newTestHead ( t , 100000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 100000 , compression . None , false )
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -4571,7 +4572,7 @@ func TestHistogramCounterResetHeader(t *testing.T) {
for _ , floatHisto := range [ ] bool { true } { // FIXME
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -4692,7 +4693,7 @@ func TestOOOHistogramCounterResetHeaders(t *testing.T) {
for _ , floatHisto := range [ ] bool { true , false } {
t . Run ( fmt . Sprintf ( "floatHistogram=%t" , floatHisto ) , func ( t * testing . T ) {
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 . EnableOOONativeHistograms . Store ( true )
@ -5003,7 +5004,7 @@ func TestAppendingDifferentEncodingToSameSeries(t *testing.T) {
// Tests https://github.com/prometheus/prometheus/issues/9725.
func TestChunkSnapshotReplayBug ( t * testing . T ) {
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 )
// Write few series records and samples such that the series references are not in order in the WAL
@ -5070,7 +5071,7 @@ func TestChunkSnapshotReplayBug(t *testing.T) {
func TestChunkSnapshotTakenAfterIncompleteSnapshot ( t * testing . T ) {
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 )
// Write a snapshot with .tmp suffix. This used to fail taking any further snapshots or replay of snapshots.
@ -5115,9 +5116,9 @@ func TestWBLReplay(t *testing.T) {
func testWBLReplay ( t * testing . T , scenario sampleTypeScenario ) {
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 )
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 )
opts := DefaultHeadOptions ( )
@ -5163,9 +5164,9 @@ func testWBLReplay(t *testing.T, scenario sampleTypeScenario) {
// Restart head.
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 )
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 )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
require . NoError ( t , err )
@ -5209,9 +5210,9 @@ func TestOOOMmapReplay(t *testing.T) {
func testOOOMmapReplay ( t * testing . T , scenario sampleTypeScenario ) {
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 )
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 )
opts := DefaultHeadOptions ( )
@ -5261,9 +5262,9 @@ func testOOOMmapReplay(t *testing.T, scenario sampleTypeScenario) {
// Restart head.
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 )
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 )
h , err = NewHead ( nil , nil , wal , oooWlog , opts , nil )
require . NoError ( t , err )
@ -5292,7 +5293,7 @@ func testOOOMmapReplay(t *testing.T, scenario sampleTypeScenario) {
}
func TestHeadInit_DiscardChunksWithUnsupportedEncoding ( t * testing . T ) {
h , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
h , _ := newTestHead ( t , 1000 , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -5336,7 +5337,7 @@ func TestHeadInit_DiscardChunksWithUnsupportedEncoding(t *testing.T) {
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 )
h , err = NewHead ( nil , nil , wal , nil , h . opts , nil )
require . NoError ( t , err )
@ -5371,7 +5372,7 @@ func (c *unsupportedChunk) Encoding() chunkenc.Encoding {
// Tests https://github.com/prometheus/prometheus/issues/10277.
func TestMmapPanicAfterMmapReplayCorruption ( t * testing . T ) {
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 )
opts := DefaultHeadOptions ( )
@ -5404,7 +5405,7 @@ func TestMmapPanicAfterMmapReplayCorruption(t *testing.T) {
addChunks ( )
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 )
mmapFilePath := filepath . Join ( dir , "chunks_head" , "000001" )
@ -5430,7 +5431,7 @@ func TestReplayAfterMmapReplayError(t *testing.T) {
var err error
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 )
opts := DefaultHeadOptions ( )
@ -5513,9 +5514,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 ) ) {
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 )
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 )
opts := DefaultHeadOptions ( )
@ -5606,9 +5607,9 @@ func TestHeadMinOOOTimeUpdate(t *testing.T) {
func testHeadMinOOOTimeUpdate ( t * testing . T , scenario sampleTypeScenario ) {
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 )
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 )
opts := DefaultHeadOptions ( )
@ -5653,7 +5654,7 @@ func testHeadMinOOOTimeUpdate(t *testing.T, scenario sampleTypeScenario) {
func TestGaugeHistogramWALAndChunkHeader ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -5718,7 +5719,7 @@ func TestGaugeHistogramWALAndChunkHeader(t *testing.T) {
require . NoError ( t , head . Close ( ) )
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 )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -5729,7 +5730,7 @@ func TestGaugeHistogramWALAndChunkHeader(t *testing.T) {
func TestGaugeFloatHistogramWALAndChunkHeader ( t * testing . T ) {
l := labels . FromStrings ( "a" , "b" )
head , _ := newTestHead ( t , 1000 , wlog . Compression None, false )
head , _ := newTestHead ( t , 1000 , compression . None , false )
t . Cleanup ( func ( ) {
require . NoError ( t , head . Close ( ) )
} )
@ -5794,7 +5795,7 @@ func TestGaugeFloatHistogramWALAndChunkHeader(t *testing.T) {
require . NoError ( t , head . Close ( ) )
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 )
head , err = NewHead ( nil , nil , w , nil , head . opts , nil )
require . NoError ( t , err )
@ -5804,7 +5805,7 @@ func TestGaugeFloatHistogramWALAndChunkHeader(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
// Add a sample to fill WAL.
app := head . Appender ( context . Background ( ) )
@ -5827,7 +5828,7 @@ func TestSnapshotAheadOfWALError(t *testing.T) {
// to keep using the same snapshot directory instead of a random one.
require . NoError ( t , os . RemoveAll ( head . wal . Dir ( ) ) )
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 )
require . NoError ( t , err )
// Add a sample to fill WAL.
@ -5846,7 +5847,7 @@ func TestSnapshotAheadOfWALError(t *testing.T) {
// Create new Head which should detect the incorrect index and delete the snapshot.
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 )
require . NoError ( t , err )
require . NoError ( t , head . Init ( math . MinInt64 ) )
@ -5865,7 +5866,7 @@ func BenchmarkCuttingHeadHistogramChunks(b *testing.B) {
)
samples := histogram . GenerateBigTestHistograms ( numSamples , numBuckets )
h , _ := newTestHead ( b , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( b , DefaultBlockDuration , compression . None , false )
defer func ( ) {
require . NoError ( b , h . Close ( ) )
} ( )
@ -5982,7 +5983,7 @@ func TestCuttingNewHeadChunks(t *testing.T) {
}
for testName , tc := range testCases {
t . Run ( testName , func ( t * testing . T ) {
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -6050,7 +6051,7 @@ func TestHeadDetectsDuplicateSampleAtSizeLimit(t *testing.T) {
numSamples := 1000
baseTS := int64 ( 1695209650 )
h , _ := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , _ := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -6117,7 +6118,7 @@ func TestWALSampleAndExemplarOrder(t *testing.T) {
for testName , tc := range testcases {
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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -6154,7 +6155,7 @@ func TestWALSampleAndExemplarOrder(t *testing.T) {
// `signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0xbb03d1`
// panic, that we have seen in the wild once.
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 ( ) )
lbls := labels . FromStrings ( "foo" , "bar" )
ref , err := app . Append ( 0 , lbls , 1 , 1 )
@ -6267,7 +6268,7 @@ func TestPostingsCardinalityStats(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 ( ) } )
ls := labels . FromStrings ( labels . MetricName , "test" )
@ -6482,7 +6483,7 @@ func TestHeadAppender_AppendCTZeroSample(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 ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -6567,7 +6568,7 @@ func TestHeadAppender_AppendWithCT(t *testing.T) {
} ,
} {
t . Run ( tc . name , func ( t * testing . T ) {
h , w := newTestHead ( t , DefaultBlockDuration , wlog . Compression None, false )
h , w := newTestHead ( t , DefaultBlockDuration , compression . None , false )
defer func ( ) {
require . NoError ( t , h . Close ( ) )
} ( )
@ -6596,7 +6597,7 @@ func TestHeadCompactableDoesNotCompactEmptyHead(t *testing.T) {
// 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
// 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 ( ) {
require . NoError ( t , head . Close ( ) )
} ( )
@ -6638,7 +6639,7 @@ func TestHeadAppendHistogramAndCommitConcurrency(t *testing.T) {
}
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 ( ) {
require . NoError ( t , head . Close ( ) )
} ( )