@@ -94,23 +94,25 @@ func TestConfigFileOtherFields(t *testing.T) {
94
94
95
95
func TestConfigFileFeatureGates (t * testing.T ) {
96
96
testCases := []struct {
97
- name string
98
- serverFeatureGatesJSON string
99
- experimentalStopGRPCServiceOnDefrag string
100
- experimentalInitialCorruptCheck string
101
- expectErr bool
102
- expectedFeatures map [featuregate.Feature ]bool
97
+ name string
98
+ serverFeatureGatesJSON string
99
+ experimentalStopGRPCServiceOnDefrag string
100
+ experimentalInitialCorruptCheck string
101
+ experimentalTxnModeWriteWithSharedBuffer string
102
+ expectErr bool
103
+ expectedFeatures map [featuregate.Feature ]bool
103
104
}{
104
105
{
105
106
name : "default" ,
106
107
expectedFeatures : map [featuregate.Feature ]bool {
107
- features .DistributedTracing : false ,
108
- features .StopGRPCServiceOnDefrag : false ,
109
- features .InitialCorruptCheck : false ,
108
+ features .DistributedTracing : false ,
109
+ features .StopGRPCServiceOnDefrag : false ,
110
+ features .InitialCorruptCheck : false ,
111
+ features .TxnModeWriteWithSharedBuffer : false ,
110
112
},
111
113
},
112
114
{
113
- name : "cannot set both experimental flag and feature gate flag" ,
115
+ name : "cannot set both experimental flag and feature gate flag for StopGRPCServiceOnDefrag " ,
114
116
serverFeatureGatesJSON : "StopGRPCServiceOnDefrag=true" ,
115
117
experimentalStopGRPCServiceOnDefrag : "false" ,
116
118
expectErr : true ,
@@ -121,86 +123,153 @@ func TestConfigFileFeatureGates(t *testing.T) {
121
123
experimentalInitialCorruptCheck : "false" ,
122
124
expectErr : true ,
123
125
},
126
+ {
127
+ name : "cannot set both experimental flag and feature gate flag for TxnModeWriteWithSharedBuffer" ,
128
+ serverFeatureGatesJSON : "TxnModeWriteWithSharedBuffer=true" ,
129
+ experimentalTxnModeWriteWithSharedBuffer : "false" ,
130
+ expectErr : true ,
131
+ },
124
132
{
125
133
name : "ok to set different experimental flag and feature gate flag" ,
126
134
serverFeatureGatesJSON : "DistributedTracing=true" ,
127
135
experimentalStopGRPCServiceOnDefrag : "true" ,
128
136
expectedFeatures : map [featuregate.Feature ]bool {
129
- features .DistributedTracing : true ,
130
- features .StopGRPCServiceOnDefrag : true ,
131
- features .InitialCorruptCheck : false ,
137
+ features .DistributedTracing : true ,
138
+ features .StopGRPCServiceOnDefrag : true ,
139
+ features .InitialCorruptCheck : false ,
140
+ features .TxnModeWriteWithSharedBuffer : false ,
132
141
},
133
142
},
134
143
{
135
- name : "can set feature gate to true from experimental flag" ,
144
+ name : "ok to set different multiple experimental flags and feature gate flags" ,
145
+ serverFeatureGatesJSON : "DistributedTracing=true,TxnModeWriteWithSharedBuffer=true" ,
136
146
experimentalStopGRPCServiceOnDefrag : "true" ,
147
+ experimentalInitialCorruptCheck : "true" ,
137
148
expectedFeatures : map [featuregate.Feature ]bool {
138
- features .StopGRPCServiceOnDefrag : true ,
139
- features .DistributedTracing : false ,
140
- features .InitialCorruptCheck : false ,
149
+ features .DistributedTracing : true ,
150
+ features .StopGRPCServiceOnDefrag : true ,
151
+ features .InitialCorruptCheck : true ,
152
+ features .TxnModeWriteWithSharedBuffer : true ,
141
153
},
142
154
},
143
155
{
144
- name : "can set feature gate to false from experimental flag" ,
156
+ name : "can set feature gate StopGRPCServiceOnDefrag to true from experimental flag" ,
157
+ experimentalStopGRPCServiceOnDefrag : "true" ,
158
+ expectedFeatures : map [featuregate.Feature ]bool {
159
+ features .StopGRPCServiceOnDefrag : true ,
160
+ features .DistributedTracing : false ,
161
+ features .InitialCorruptCheck : false ,
162
+ features .TxnModeWriteWithSharedBuffer : false ,
163
+ },
164
+ },
165
+ {
166
+ name : "can set feature gate StopGRPCServiceOnDefrag to false from experimental flag" ,
145
167
experimentalStopGRPCServiceOnDefrag : "false" ,
146
168
expectedFeatures : map [featuregate.Feature ]bool {
147
- features .StopGRPCServiceOnDefrag : false ,
148
- features .DistributedTracing : false ,
149
- features .InitialCorruptCheck : false ,
169
+ features .StopGRPCServiceOnDefrag : false ,
170
+ features .DistributedTracing : false ,
171
+ features .InitialCorruptCheck : false ,
172
+ features .TxnModeWriteWithSharedBuffer : false ,
150
173
},
151
174
},
152
175
{
153
- name : "can set feature gate experimentalInitialCorruptCheck to true from experimental flag" ,
176
+ name : "can set feature gate InitialCorruptCheck to true from experimental flag" ,
154
177
experimentalInitialCorruptCheck : "true" ,
155
178
expectedFeatures : map [featuregate.Feature ]bool {
156
- features .StopGRPCServiceOnDefrag : false ,
157
- features .DistributedTracing : false ,
158
- features .InitialCorruptCheck : true ,
179
+ features .StopGRPCServiceOnDefrag : false ,
180
+ features .DistributedTracing : false ,
181
+ features .InitialCorruptCheck : true ,
182
+ features .TxnModeWriteWithSharedBuffer : false ,
159
183
},
160
184
},
161
185
{
162
- name : "can set feature gate experimentalInitialCorruptCheck to false from experimental flag" ,
186
+ name : "can set feature gate InitialCorruptCheck to false from experimental flag" ,
163
187
experimentalInitialCorruptCheck : "false" ,
164
188
expectedFeatures : map [featuregate.Feature ]bool {
165
- features .StopGRPCServiceOnDefrag : false ,
166
- features .DistributedTracing : false ,
167
- features .InitialCorruptCheck : false ,
189
+ features .StopGRPCServiceOnDefrag : false ,
190
+ features .DistributedTracing : false ,
191
+ features .InitialCorruptCheck : false ,
192
+ features .TxnModeWriteWithSharedBuffer : false ,
193
+ },
194
+ },
195
+ {
196
+ name : "can set feature gate TxnModeWriteWithSharedBuffer to true from experimental flag" ,
197
+ experimentalTxnModeWriteWithSharedBuffer : "true" ,
198
+ expectedFeatures : map [featuregate.Feature ]bool {
199
+ features .StopGRPCServiceOnDefrag : false ,
200
+ features .DistributedTracing : false ,
201
+ features .InitialCorruptCheck : false ,
202
+ features .TxnModeWriteWithSharedBuffer : true ,
203
+ },
204
+ },
205
+ {
206
+ name : "can set feature gate TxnModeWriteWithSharedBuffer to false from experimental flag" ,
207
+ experimentalTxnModeWriteWithSharedBuffer : "false" ,
208
+ expectedFeatures : map [featuregate.Feature ]bool {
209
+ features .StopGRPCServiceOnDefrag : false ,
210
+ features .DistributedTracing : false ,
211
+ features .InitialCorruptCheck : false ,
212
+ features .TxnModeWriteWithSharedBuffer : false ,
168
213
},
169
214
},
170
215
{
171
216
name : "can set feature gate StopGRPCServiceOnDefrag to true from feature gate flag" ,
172
217
serverFeatureGatesJSON : "StopGRPCServiceOnDefrag=true" ,
173
218
expectedFeatures : map [featuregate.Feature ]bool {
174
- features .StopGRPCServiceOnDefrag : true ,
175
- features .DistributedTracing : false ,
176
- features .InitialCorruptCheck : false ,
219
+ features .StopGRPCServiceOnDefrag : true ,
220
+ features .DistributedTracing : false ,
221
+ features .InitialCorruptCheck : false ,
222
+ features .TxnModeWriteWithSharedBuffer : false ,
177
223
},
178
224
},
179
225
{
180
226
name : "can set feature gate InitialCorruptCheck to true from feature gate flag" ,
181
227
serverFeatureGatesJSON : "InitialCorruptCheck=true" ,
182
228
expectedFeatures : map [featuregate.Feature ]bool {
183
- features .StopGRPCServiceOnDefrag : false ,
184
- features .DistributedTracing : false ,
185
- features .InitialCorruptCheck : true ,
229
+ features .StopGRPCServiceOnDefrag : false ,
230
+ features .DistributedTracing : false ,
231
+ features .InitialCorruptCheck : true ,
232
+ features .TxnModeWriteWithSharedBuffer : false ,
186
233
},
187
234
},
188
235
{
189
- name : "can set feature gate to false from feature gate flag" ,
236
+ name : "can set feature gate StopGRPCServiceOnDefrag to false from feature gate flag" ,
190
237
serverFeatureGatesJSON : "StopGRPCServiceOnDefrag=false" ,
191
238
expectedFeatures : map [featuregate.Feature ]bool {
192
- features .StopGRPCServiceOnDefrag : false ,
193
- features .DistributedTracing : false ,
194
- features .InitialCorruptCheck : false ,
239
+ features .StopGRPCServiceOnDefrag : false ,
240
+ features .DistributedTracing : false ,
241
+ features .InitialCorruptCheck : false ,
242
+ features .TxnModeWriteWithSharedBuffer : false ,
243
+ },
244
+ },
245
+ {
246
+ name : "can set feature gate TxnModeWriteWithSharedBuffer to true from feature gate flag" ,
247
+ serverFeatureGatesJSON : "TxnModeWriteWithSharedBuffer=true" ,
248
+ expectedFeatures : map [featuregate.Feature ]bool {
249
+ features .StopGRPCServiceOnDefrag : false ,
250
+ features .DistributedTracing : false ,
251
+ features .InitialCorruptCheck : false ,
252
+ features .TxnModeWriteWithSharedBuffer : true ,
253
+ },
254
+ },
255
+ {
256
+ name : "can set feature gate TxnModeWriteWithSharedBuffer to false from feature gate flag" ,
257
+ serverFeatureGatesJSON : "TxnModeWriteWithSharedBuffer=false" ,
258
+ expectedFeatures : map [featuregate.Feature ]bool {
259
+ features .StopGRPCServiceOnDefrag : false ,
260
+ features .DistributedTracing : false ,
261
+ features .InitialCorruptCheck : false ,
262
+ features .TxnModeWriteWithSharedBuffer : false ,
195
263
},
196
264
},
197
265
}
198
266
for _ , tc := range testCases {
199
267
t .Run (tc .name , func (t * testing.T ) {
200
268
yc := struct {
201
- ExperimentalStopGRPCServiceOnDefrag * bool `json:"experimental-stop-grpc-service-on-defrag,omitempty"`
202
- ExperimentalInitialCorruptCheck * bool `json:"experimental-initial-corrupt-check,omitempty"`
203
- ServerFeatureGatesJSON string `json:"feature-gates"`
269
+ ExperimentalStopGRPCServiceOnDefrag * bool `json:"experimental-stop-grpc-service-on-defrag,omitempty"`
270
+ ExperimentalInitialCorruptCheck * bool `json:"experimental-initial-corrupt-check,omitempty"`
271
+ ExperimentalTxnModeWriteWithSharedBuffer * bool `json:"experimental-txn-mode-write-with-shared-buffer,omitempty"`
272
+ ServerFeatureGatesJSON string `json:"feature-gates"`
204
273
}{
205
274
ServerFeatureGatesJSON : tc .serverFeatureGatesJSON ,
206
275
}
@@ -213,6 +282,14 @@ func TestConfigFileFeatureGates(t *testing.T) {
213
282
yc .ExperimentalInitialCorruptCheck = & experimentalInitialCorruptCheck
214
283
}
215
284
285
+ if tc .experimentalTxnModeWriteWithSharedBuffer != "" {
286
+ experimentalTxnModeWriteWithSharedBuffer , err := strconv .ParseBool (tc .experimentalTxnModeWriteWithSharedBuffer )
287
+ if err != nil {
288
+ t .Fatal (err )
289
+ }
290
+ yc .ExperimentalTxnModeWriteWithSharedBuffer = & experimentalTxnModeWriteWithSharedBuffer
291
+ }
292
+
216
293
if tc .experimentalStopGRPCServiceOnDefrag != "" {
217
294
experimentalStopGRPCServiceOnDefrag , err := strconv .ParseBool (tc .experimentalStopGRPCServiceOnDefrag )
218
295
if err != nil {
0 commit comments