github.com/m3db/m3@v1.5.0/src/dbnode/encoding/options.go (about) 1 // Copyright (c) 2016 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 encoding 22 23 import ( 24 "github.com/m3db/m3/src/dbnode/x/xio" 25 "github.com/m3db/m3/src/dbnode/x/xpool" 26 "github.com/m3db/m3/src/x/instrument" 27 "github.com/m3db/m3/src/x/pool" 28 xtime "github.com/m3db/m3/src/x/time" 29 ) 30 31 const ( 32 defaultDefaultTimeUnit = xtime.Second 33 defaultByteFieldDictLRUSize = 4 34 defaultIStreamReaderSizeM3TSZ = 8 * 2 35 defaultIStreamReaderSizeProto = 128 36 ) 37 38 var ( 39 // default encoding options 40 defaultOptions = newOptions() 41 ) 42 43 type options struct { 44 defaultTimeUnit xtime.Unit 45 timeEncodingSchemes TimeEncodingSchemes 46 markerEncodingScheme *MarkerEncodingScheme 47 encoderPool EncoderPool 48 readerIteratorPool ReaderIteratorPool 49 bytesPool pool.CheckedBytesPool 50 segmentReaderPool xio.SegmentReaderPool 51 checkedBytesWrapperPool xpool.CheckedBytesWrapperPool 52 byteFieldDictLRUSize int 53 iStreamReaderSizeM3TSZ int 54 iStreamReaderSizeProto int 55 metrics Metrics 56 } 57 58 func newOptions() Options { 59 return &options{ 60 defaultTimeUnit: defaultDefaultTimeUnit, 61 timeEncodingSchemes: NewTimeEncodingSchemes(defaultTimeEncodingSchemes), 62 markerEncodingScheme: defaultMarkerEncodingScheme, 63 byteFieldDictLRUSize: defaultByteFieldDictLRUSize, 64 iStreamReaderSizeM3TSZ: defaultIStreamReaderSizeM3TSZ, 65 iStreamReaderSizeProto: defaultIStreamReaderSizeProto, 66 metrics: NewMetrics(instrument.NewOptions().MetricsScope()), 67 } 68 } 69 70 // NewOptions creates a new options. 71 func NewOptions() Options { 72 return defaultOptions 73 } 74 75 func (o *options) SetDefaultTimeUnit(value xtime.Unit) Options { 76 opts := *o 77 opts.defaultTimeUnit = value 78 return &opts 79 } 80 81 func (o *options) DefaultTimeUnit() xtime.Unit { 82 return o.defaultTimeUnit 83 } 84 85 func (o *options) SetTimeEncodingSchemes(value map[xtime.Unit]TimeEncodingScheme) Options { 86 opts := *o 87 opts.timeEncodingSchemes = NewTimeEncodingSchemes(value) 88 return &opts 89 } 90 91 func (o *options) TimeEncodingSchemes() TimeEncodingSchemes { 92 return o.timeEncodingSchemes 93 } 94 95 func (o *options) SetMarkerEncodingScheme(value *MarkerEncodingScheme) Options { 96 opts := *o 97 opts.markerEncodingScheme = value 98 return &opts 99 } 100 101 func (o *options) MarkerEncodingScheme() *MarkerEncodingScheme { 102 return o.markerEncodingScheme 103 } 104 105 func (o *options) SetEncoderPool(value EncoderPool) Options { 106 opts := *o 107 opts.encoderPool = value 108 return &opts 109 } 110 111 func (o *options) EncoderPool() EncoderPool { 112 return o.encoderPool 113 } 114 115 func (o *options) SetReaderIteratorPool(value ReaderIteratorPool) Options { 116 opts := *o 117 opts.readerIteratorPool = value 118 return &opts 119 } 120 121 func (o *options) ReaderIteratorPool() ReaderIteratorPool { 122 return o.readerIteratorPool 123 } 124 125 func (o *options) SetBytesPool(value pool.CheckedBytesPool) Options { 126 opts := *o 127 opts.bytesPool = value 128 return &opts 129 } 130 131 func (o *options) BytesPool() pool.CheckedBytesPool { 132 return o.bytesPool 133 } 134 135 func (o *options) SetSegmentReaderPool(value xio.SegmentReaderPool) Options { 136 opts := *o 137 opts.segmentReaderPool = value 138 return &opts 139 } 140 141 func (o *options) SegmentReaderPool() xio.SegmentReaderPool { 142 return o.segmentReaderPool 143 } 144 145 func (o *options) SetCheckedBytesWrapperPool(value xpool.CheckedBytesWrapperPool) Options { 146 opts := *o 147 opts.checkedBytesWrapperPool = value 148 return &opts 149 } 150 151 func (o *options) CheckedBytesWrapperPool() xpool.CheckedBytesWrapperPool { 152 return o.checkedBytesWrapperPool 153 } 154 155 func (o *options) SetByteFieldDictionaryLRUSize(value int) Options { 156 opts := *o 157 opts.byteFieldDictLRUSize = value 158 return &opts 159 } 160 161 func (o *options) ByteFieldDictionaryLRUSize() int { 162 return o.byteFieldDictLRUSize 163 } 164 165 func (o *options) SetIStreamReaderSizeM3TSZ(value int) Options { 166 opts := *o 167 opts.iStreamReaderSizeM3TSZ = value 168 return &opts 169 } 170 171 func (o *options) IStreamReaderSizeM3TSZ() int { 172 return o.iStreamReaderSizeM3TSZ 173 } 174 175 func (o *options) SetIStreamReaderSizeProto(value int) Options { 176 opts := *o 177 opts.iStreamReaderSizeProto = value 178 return &opts 179 } 180 181 func (o *options) IStreamReaderSizeProto() int { 182 return o.iStreamReaderSizeProto 183 } 184 185 func (o *options) SetMetrics(value Metrics) Options { 186 opts := *o 187 opts.metrics = value 188 return &opts 189 } 190 191 func (o *options) Metrics() Metrics { 192 return o.metrics 193 }