github.com/m3db/m3@v1.5.0/src/dbnode/namespace/config_test.go (about) 1 // Copyright (c) 2017 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 namespace 22 23 import ( 24 "testing" 25 "time" 26 27 "github.com/m3db/m3/src/dbnode/retention" 28 "github.com/m3db/m3/src/x/ident" 29 30 "github.com/stretchr/testify/require" 31 yaml "gopkg.in/yaml.v2" 32 ) 33 34 func TestRegistryConfig(t *testing.T) { 35 var ( 36 bootstrapEnabled = false 37 config = &MapConfiguration{ 38 Metadatas: []MetadataConfiguration{ 39 MetadataConfiguration{ 40 ID: "abc", 41 Retention: retention.Configuration{ 42 BlockSize: time.Hour, 43 RetentionPeriod: time.Hour, 44 BufferFuture: time.Minute, 45 BufferPast: time.Minute, 46 }, 47 }, 48 MetadataConfiguration{ 49 ID: "cde", 50 BootstrapEnabled: &bootstrapEnabled, 51 Retention: retention.Configuration{ 52 BlockSize: time.Hour, 53 RetentionPeriod: time.Hour, 54 BufferFuture: time.Minute, 55 BufferPast: time.Minute, 56 }, 57 Index: IndexConfiguration{ 58 Enabled: true, 59 BlockSize: time.Hour, 60 }, 61 }, 62 }, 63 } 64 ) 65 66 nsMap, err := config.Map() 67 require.NoError(t, err) 68 md, err := nsMap.Get(ident.StringID("abc")) 69 require.NoError(t, err) 70 mdd, err := config.Metadatas[0].Metadata() 71 require.NoError(t, err) 72 require.Equal(t, mdd.ID().String(), md.ID().String()) 73 require.Equal(t, mdd.Options(), md.Options()) 74 75 md, err = nsMap.Get(ident.StringID("cde")) 76 require.NoError(t, err) 77 mdd, err = config.Metadatas[1].Metadata() 78 require.NoError(t, err) 79 require.Equal(t, mdd.ID().String(), md.ID().String()) 80 require.Equal(t, mdd.Options(), md.Options()) 81 82 _, err = nsMap.Get(ident.StringID("otherstring")) 83 require.Error(t, err) 84 } 85 86 func TestMetadataConfig(t *testing.T) { 87 var ( 88 id = "someLongString" 89 bootstrapEnabled = true 90 flushEnabled = false 91 writesToCommitLog = true 92 cleanupEnabled = false 93 repairEnabled = false 94 retention = retention.Configuration{ 95 BlockSize: time.Hour, 96 RetentionPeriod: time.Hour, 97 BufferFuture: time.Minute, 98 BufferPast: time.Minute, 99 } 100 index = IndexConfiguration{ 101 Enabled: true, 102 BlockSize: time.Hour, 103 } 104 config = &MetadataConfiguration{ 105 ID: id, 106 BootstrapEnabled: &bootstrapEnabled, 107 FlushEnabled: &flushEnabled, 108 WritesToCommitLog: &writesToCommitLog, 109 CleanupEnabled: &cleanupEnabled, 110 RepairEnabled: &repairEnabled, 111 Retention: retention, 112 Index: index, 113 } 114 ) 115 116 metadata, err := config.Metadata() 117 require.NoError(t, err) 118 require.Equal(t, id, metadata.ID().String()) 119 120 opts := metadata.Options() 121 require.Equal(t, bootstrapEnabled, opts.BootstrapEnabled()) 122 require.Equal(t, flushEnabled, opts.FlushEnabled()) 123 require.Equal(t, writesToCommitLog, opts.WritesToCommitLog()) 124 require.Equal(t, cleanupEnabled, opts.CleanupEnabled()) 125 require.Equal(t, repairEnabled, opts.RepairEnabled()) 126 require.Equal(t, retention.Options(), opts.RetentionOptions()) 127 require.Equal(t, index.Options(), opts.IndexOptions()) 128 } 129 130 func TestRegistryConfigFromBytes(t *testing.T) { 131 yamlBytes := []byte(` 132 metadatas: 133 - id: "testmetrics" 134 bootstrapEnabled: false 135 flushEnabled: false 136 writesToCommitLog: false 137 cleanupEnabled: false 138 repairEnabled: false 139 retention: 140 retentionPeriod: 8h 141 blockSize: 2h 142 bufferFuture: 10m 143 bufferPast: 10m 144 - id: "metrics-10s:2d" 145 bootstrapEnabled: true 146 flushEnabled: true 147 writesToCommitLog: true 148 cleanupEnabled: true 149 repairEnabled: true 150 retention: 151 retentionPeriod: 48h 152 blockSize: 2h 153 bufferFuture: 10m 154 bufferPast: 10m 155 - id: "metrics-1m:40d" 156 bootstrapEnabled: true 157 flushEnabled: true 158 writesToCommitLog: true 159 cleanupEnabled: true 160 repairEnabled: true 161 retention: 162 retentionPeriod: 960h 163 blockSize: 12h 164 bufferFuture: 10m 165 bufferPast: 10m 166 index: 167 enabled: true 168 blockSize: 24h 169 `) 170 171 var conf MapConfiguration 172 require.NoError(t, yaml.Unmarshal(yamlBytes, &conf)) 173 174 nsMap, err := conf.Map() 175 require.NoError(t, err) 176 mds := nsMap.Metadatas() 177 require.Equal(t, 3, len(mds)) 178 179 testmetrics := ident.StringID("testmetrics") 180 ns, err := nsMap.Get(testmetrics) 181 require.NoError(t, err) 182 require.True(t, ns.ID().Equal(testmetrics)) 183 opts := ns.Options() 184 require.Equal(t, false, opts.BootstrapEnabled()) 185 require.Equal(t, false, opts.FlushEnabled()) 186 require.Equal(t, false, opts.WritesToCommitLog()) 187 require.Equal(t, false, opts.CleanupEnabled()) 188 require.Equal(t, false, opts.RepairEnabled()) 189 require.Equal(t, false, opts.IndexOptions().Enabled()) 190 testRetentionOpts := retention.NewOptions(). 191 SetRetentionPeriod(8 * time.Hour). 192 SetBlockSize(2 * time.Hour). 193 SetBufferFuture(10 * time.Minute). 194 SetBufferPast(10 * time.Minute) 195 require.True(t, testRetentionOpts.Equal(opts.RetentionOptions())) 196 197 metrics2d := ident.StringID("metrics-10s:2d") 198 ns, err = nsMap.Get(metrics2d) 199 require.NoError(t, err) 200 require.True(t, ns.ID().Equal(metrics2d)) 201 opts = ns.Options() 202 require.Equal(t, true, opts.BootstrapEnabled()) 203 require.Equal(t, true, opts.FlushEnabled()) 204 require.Equal(t, true, opts.WritesToCommitLog()) 205 require.Equal(t, true, opts.CleanupEnabled()) 206 require.Equal(t, true, opts.RepairEnabled()) 207 require.Equal(t, false, opts.IndexOptions().Enabled()) 208 testRetentionOpts = retention.NewOptions(). 209 SetRetentionPeriod(48 * time.Hour). 210 SetBlockSize(2 * time.Hour). 211 SetBufferFuture(10 * time.Minute). 212 SetBufferPast(10 * time.Minute) 213 require.True(t, testRetentionOpts.Equal(opts.RetentionOptions())) 214 215 metrics40d := ident.StringID("metrics-1m:40d") 216 ns, err = nsMap.Get(metrics40d) 217 require.NoError(t, err) 218 require.True(t, ns.ID().Equal(metrics40d)) 219 opts = ns.Options() 220 require.Equal(t, true, opts.BootstrapEnabled()) 221 require.Equal(t, true, opts.FlushEnabled()) 222 require.Equal(t, true, opts.WritesToCommitLog()) 223 require.Equal(t, true, opts.CleanupEnabled()) 224 require.Equal(t, true, opts.RepairEnabled()) 225 require.Equal(t, true, opts.IndexOptions().Enabled()) 226 require.Equal(t, 24*time.Hour, opts.IndexOptions().BlockSize()) 227 testRetentionOpts = retention.NewOptions(). 228 SetRetentionPeriod(960 * time.Hour). 229 SetBlockSize(12 * time.Hour). 230 SetBufferFuture(10 * time.Minute). 231 SetBufferPast(10 * time.Minute) 232 require.True(t, testRetentionOpts.Equal(opts.RetentionOptions())) 233 234 }