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 }