github.com/scottcagno/storage@v1.8.0/pkg/lsmtree/options.go (about)

     1  package lsmtree
     2  
     3  import "math"
     4  
     5  const (
     6  
     7  	// path defaults
     8  	defaultBaseDir = "lsmtree-data"
     9  	defaultWalDir  = "log"
    10  	defaultSstDir  = "sst"
    11  
    12  	// other defaults
    13  	defaultSyncOnWrite    = false
    14  	defaultLoggingLevel   = LevelError
    15  	defaultFlushThreshold = 2 << 20 // 2 MB (min=1 MB, max=8 MB)
    16  
    17  	// min and max
    18  	minKeySizeAllowed   = 1
    19  	minValueSizeAllowed = 1
    20  	maxKeySizeAllowed   = math.MaxUint8  //    255 B
    21  	maxValueSizeAllowed = math.MaxUint16 // 65,535 B
    22  )
    23  
    24  var defaultOptions = &Options{
    25  	BaseDir:      defaultBaseDir,
    26  	SyncOnWrite:  defaultSyncOnWrite,
    27  	LoggingLevel: defaultLoggingLevel,
    28  }
    29  
    30  func DefaultOptions(base string) *Options {
    31  	defaultOptions.BaseDir = base
    32  	defaultOptions.flushThreshold = defaultFlushThreshold
    33  	return defaultOptions
    34  }
    35  
    36  type Options struct {
    37  	BaseDir        string
    38  	SyncOnWrite    bool
    39  	LoggingLevel   uint8
    40  	flushThreshold int64
    41  }
    42  
    43  func checkOptions(options *Options) *Options {
    44  	if options == nil {
    45  		return defaultOptions
    46  	}
    47  	if options.BaseDir == *new(string) {
    48  		options.BaseDir = defaultBaseDir
    49  	}
    50  	if options.LoggingLevel <= 0 {
    51  		options.LoggingLevel = defaultLoggingLevel
    52  	}
    53  	options.flushThreshold = defaultFlushThreshold
    54  	return options
    55  }