github.com/m3db/m3@v1.5.1-0.20231129193456-75a402aa583b/src/dbnode/integration/generate/types.go (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  package generate
    22  
    23  import (
    24  	"os"
    25  	"time"
    26  
    27  	"github.com/m3db/m3/src/dbnode/encoding"
    28  	ns "github.com/m3db/m3/src/dbnode/namespace"
    29  	"github.com/m3db/m3/src/dbnode/sharding"
    30  	"github.com/m3db/m3/src/dbnode/ts"
    31  	"github.com/m3db/m3/src/x/clock"
    32  	"github.com/m3db/m3/src/x/ident"
    33  	xtime "github.com/m3db/m3/src/x/time"
    34  )
    35  
    36  // AnnotationGenerator generates the next annotation.
    37  type AnnotationGenerator interface {
    38  	Next() []byte
    39  }
    40  
    41  // BlockConfig represents the configuration to generate a SeriesBlock.
    42  type BlockConfig struct {
    43  	IDs       []string
    44  	Tags      ident.Tags
    45  	NumPoints int
    46  	Start     xtime.UnixNano
    47  	AnnGen    AnnotationGenerator
    48  }
    49  
    50  // UpdateBlockConfig is a function used o update BlockConfigs.
    51  type UpdateBlockConfig func([]BlockConfig)
    52  
    53  // TestValue is a test datapoint and an annotation.
    54  type TestValue struct {
    55  	ts.Datapoint
    56  	ts.Annotation
    57  }
    58  
    59  // Series represents a generated series of data.
    60  type Series struct {
    61  	ID   ident.ID
    62  	Tags ident.Tags
    63  	Data []TestValue
    64  }
    65  
    66  // SeriesDataPoint represents a single data point of a generated series of data.
    67  type SeriesDataPoint struct {
    68  	Value TestValue
    69  	ID    ident.ID
    70  }
    71  
    72  // SeriesDataPointsByTime are a sorted list of SeriesDataPoints.
    73  type SeriesDataPointsByTime []SeriesDataPoint
    74  
    75  // SeriesBlock is a collection of Series.
    76  type SeriesBlock []Series
    77  
    78  // SeriesBlocksByStart is a map of time -> SeriesBlock.
    79  type SeriesBlocksByStart map[xtime.UnixNano]SeriesBlock
    80  
    81  // Writer writes generated data to disk.
    82  type Writer interface {
    83  	// WriteData writes the data as data files.
    84  	WriteData(
    85  		nsCtx ns.Context,
    86  		shards sharding.ShardSet,
    87  		data SeriesBlocksByStart,
    88  		volume int,
    89  	) error
    90  
    91  	// WriteSnapshot writes the data as snapshot files.
    92  	WriteSnapshot(
    93  		nsCtx ns.Context,
    94  		shards sharding.ShardSet,
    95  		data SeriesBlocksByStart,
    96  		volume int,
    97  		snapshotInterval time.Duration,
    98  	) error
    99  
   100  	// WriteDataWithPredicate writes all data that passes the predicate test as data files.
   101  	WriteDataWithPredicate(
   102  		nsCtx ns.Context,
   103  		shards sharding.ShardSet,
   104  		data SeriesBlocksByStart,
   105  		volume int,
   106  		pred WriteDatapointPredicate,
   107  	) error
   108  
   109  	// WriteSnapshotWithPredicate writes all data that passes the predicate test as snapshot files.
   110  	WriteSnapshotWithPredicate(
   111  		nsCtx ns.Context,
   112  		shards sharding.ShardSet,
   113  		data SeriesBlocksByStart,
   114  		volume int,
   115  		pred WriteDatapointPredicate,
   116  		snapshotInterval time.Duration,
   117  	) error
   118  }
   119  
   120  // Options represent the parameters needed for the Writer.
   121  type Options interface {
   122  	// SetClockOptions sets the clock options.
   123  	SetClockOptions(value clock.Options) Options
   124  
   125  	// ClockOptions returns the clock options.
   126  	ClockOptions() clock.Options
   127  
   128  	// SetRetentionPeriod sets how long we intend to keep data in memory.
   129  	SetRetentionPeriod(value time.Duration) Options
   130  
   131  	// RetentionPeriod returns how long we intend to keep data in memory.
   132  	RetentionPeriod() time.Duration
   133  
   134  	// SetBlockSize sets the blockSize.
   135  	SetBlockSize(value time.Duration) Options
   136  
   137  	// BlockSize returns the blockSize.
   138  	BlockSize() time.Duration
   139  
   140  	// SetFilePathPrefix sets the file path prefix for sharded TSDB files.
   141  	SetFilePathPrefix(value string) Options
   142  
   143  	// FilePathPrefix returns the file path prefix for sharded TSDB files.
   144  	FilePathPrefix() string
   145  
   146  	// SetNewFileMode sets the new file mode.
   147  	SetNewFileMode(value os.FileMode) Options
   148  
   149  	// NewFileMode returns the new file mode.
   150  	NewFileMode() os.FileMode
   151  
   152  	// SetNewDirectoryMode sets the new directory mode.
   153  	SetNewDirectoryMode(value os.FileMode) Options
   154  
   155  	// NewDirectoryMode returns the new directory mode.
   156  	NewDirectoryMode() os.FileMode
   157  
   158  	// SetWriterBufferSize sets the buffer size for writing TSDB files.
   159  	SetWriterBufferSize(value int) Options
   160  
   161  	// WriterBufferSize returns the buffer size for writing TSDB files.
   162  	WriterBufferSize() int
   163  
   164  	// SetWriteEmptyShards sets whether writes are done even for empty start periods.
   165  	SetWriteEmptyShards(bool) Options
   166  
   167  	// WriteEmptyShards returns whether writes are done even for empty start periods.
   168  	WriteEmptyShards() bool
   169  
   170  	// SetWriteSnapshot sets whether writes are written as snapshot files.
   171  	SetWriteSnapshot(bool) Options
   172  
   173  	// WriteSnapshots returns whether writes are written as snapshot files.
   174  	WriteSnapshot() bool
   175  
   176  	// SetEncoderPool sets the contextPool.
   177  	SetEncoderPool(value encoding.EncoderPool) Options
   178  
   179  	// EncoderPool returns the contextPool.
   180  	EncoderPool() encoding.EncoderPool
   181  }
   182  
   183  // WriteDatapointPredicate returns a boolean indicating whether a datapoint should be written.
   184  type WriteDatapointPredicate func(dp TestValue) bool