Skip to content

Commit c76594a

Browse files
committed
migrate experimental-txn-mode-write-with-shared-buffer flag to feature gate.
1 parent 9ab8c23 commit c76594a

File tree

8 files changed

+195
-111
lines changed

8 files changed

+195
-111
lines changed

server/embed/config.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -567,11 +567,10 @@ func NewConfig() *Config {
567567
LogRotationConfigJSON: DefaultLogRotationConfig,
568568
EnableGRPCGateway: true,
569569

570-
ExperimentalDowngradeCheckTime: DefaultDowngradeCheckTime,
571-
ExperimentalMemoryMlock: false,
572-
ExperimentalTxnModeWriteWithSharedBuffer: true,
573-
ExperimentalStopGRPCServiceOnDefrag: false,
574-
ExperimentalMaxLearners: membership.DefaultMaxLearners,
570+
ExperimentalDowngradeCheckTime: DefaultDowngradeCheckTime,
571+
ExperimentalMemoryMlock: false,
572+
ExperimentalStopGRPCServiceOnDefrag: false,
573+
ExperimentalMaxLearners: membership.DefaultMaxLearners,
575574

576575
ExperimentalCompactHashCheckEnabled: false,
577576
ExperimentalCompactHashCheckTime: DefaultExperimentalCompactHashCheckTime,

server/embed/config_test.go

Lines changed: 119 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -94,23 +94,25 @@ func TestConfigFileOtherFields(t *testing.T) {
9494

9595
func TestConfigFileFeatureGates(t *testing.T) {
9696
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
103104
}{
104105
{
105106
name: "default",
106107
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,
110112
},
111113
},
112114
{
113-
name: "cannot set both experimental flag and feature gate flag",
115+
name: "cannot set both experimental flag and feature gate flag for StopGRPCServiceOnDefrag",
114116
serverFeatureGatesJSON: "StopGRPCServiceOnDefrag=true",
115117
experimentalStopGRPCServiceOnDefrag: "false",
116118
expectErr: true,
@@ -121,86 +123,153 @@ func TestConfigFileFeatureGates(t *testing.T) {
121123
experimentalInitialCorruptCheck: "false",
122124
expectErr: true,
123125
},
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+
},
124132
{
125133
name: "ok to set different experimental flag and feature gate flag",
126134
serverFeatureGatesJSON: "DistributedTracing=true",
127135
experimentalStopGRPCServiceOnDefrag: "true",
128136
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,
132141
},
133142
},
134143
{
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",
136146
experimentalStopGRPCServiceOnDefrag: "true",
147+
experimentalInitialCorruptCheck: "true",
137148
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,
141153
},
142154
},
143155
{
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",
145167
experimentalStopGRPCServiceOnDefrag: "false",
146168
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,
150173
},
151174
},
152175
{
153-
name: "can set feature gate experimentalInitialCorruptCheck to true from experimental flag",
176+
name: "can set feature gate InitialCorruptCheck to true from experimental flag",
154177
experimentalInitialCorruptCheck: "true",
155178
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,
159183
},
160184
},
161185
{
162-
name: "can set feature gate experimentalInitialCorruptCheck to false from experimental flag",
186+
name: "can set feature gate InitialCorruptCheck to false from experimental flag",
163187
experimentalInitialCorruptCheck: "false",
164188
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,
168213
},
169214
},
170215
{
171216
name: "can set feature gate StopGRPCServiceOnDefrag to true from feature gate flag",
172217
serverFeatureGatesJSON: "StopGRPCServiceOnDefrag=true",
173218
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,
177223
},
178224
},
179225
{
180226
name: "can set feature gate InitialCorruptCheck to true from feature gate flag",
181227
serverFeatureGatesJSON: "InitialCorruptCheck=true",
182228
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,
186233
},
187234
},
188235
{
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",
190237
serverFeatureGatesJSON: "StopGRPCServiceOnDefrag=false",
191238
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,
195263
},
196264
},
197265
}
198266
for _, tc := range testCases {
199267
t.Run(tc.name, func(t *testing.T) {
200268
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"`
204273
}{
205274
ServerFeatureGatesJSON: tc.serverFeatureGatesJSON,
206275
}
@@ -213,6 +282,14 @@ func TestConfigFileFeatureGates(t *testing.T) {
213282
yc.ExperimentalInitialCorruptCheck = &experimentalInitialCorruptCheck
214283
}
215284

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+
216293
if tc.experimentalStopGRPCServiceOnDefrag != "" {
217294
experimentalStopGRPCServiceOnDefrag, err := strconv.ParseBool(tc.experimentalStopGRPCServiceOnDefrag)
218295
if err != nil {

server/embed/etcd.go

Lines changed: 54 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -168,61 +168,60 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) {
168168
backendFreelistType := parseBackendFreelistType(cfg.BackendFreelistType)
169169

170170
srvcfg := config.ServerConfig{
171-
Name: cfg.Name,
172-
ClientURLs: cfg.AdvertiseClientUrls,
173-
PeerURLs: cfg.AdvertisePeerUrls,
174-
DataDir: cfg.Dir,
175-
DedicatedWALDir: cfg.WalDir,
176-
SnapshotCount: cfg.SnapshotCount,
177-
SnapshotCatchUpEntries: cfg.SnapshotCatchUpEntries,
178-
MaxSnapFiles: cfg.MaxSnapFiles,
179-
MaxWALFiles: cfg.MaxWalFiles,
180-
InitialPeerURLsMap: urlsmap,
181-
InitialClusterToken: token,
182-
DiscoveryURL: cfg.Durl,
183-
DiscoveryProxy: cfg.Dproxy,
184-
DiscoveryCfg: cfg.DiscoveryCfg,
185-
NewCluster: cfg.IsNewCluster(),
186-
PeerTLSInfo: cfg.PeerTLSInfo,
187-
TickMs: cfg.TickMs,
188-
ElectionTicks: cfg.ElectionTicks(),
189-
InitialElectionTickAdvance: cfg.InitialElectionTickAdvance,
190-
AutoCompactionRetention: autoCompactionRetention,
191-
AutoCompactionMode: cfg.AutoCompactionMode,
192-
QuotaBackendBytes: cfg.QuotaBackendBytes,
193-
BackendBatchLimit: cfg.BackendBatchLimit,
194-
BackendFreelistType: backendFreelistType,
195-
BackendBatchInterval: cfg.BackendBatchInterval,
196-
MaxTxnOps: cfg.MaxTxnOps,
197-
MaxRequestBytes: cfg.MaxRequestBytes,
198-
MaxConcurrentStreams: cfg.MaxConcurrentStreams,
199-
SocketOpts: cfg.SocketOpts,
200-
StrictReconfigCheck: cfg.StrictReconfigCheck,
201-
ClientCertAuthEnabled: cfg.ClientTLSInfo.ClientCertAuth,
202-
AuthToken: cfg.AuthToken,
203-
BcryptCost: cfg.BcryptCost,
204-
TokenTTL: cfg.AuthTokenTTL,
205-
CORS: cfg.CORS,
206-
HostWhitelist: cfg.HostWhitelist,
207-
CorruptCheckTime: cfg.ExperimentalCorruptCheckTime,
208-
CompactHashCheckEnabled: cfg.ExperimentalCompactHashCheckEnabled,
209-
CompactHashCheckTime: cfg.ExperimentalCompactHashCheckTime,
210-
PreVote: cfg.PreVote,
211-
Logger: cfg.logger,
212-
ForceNewCluster: cfg.ForceNewCluster,
213-
EnableGRPCGateway: cfg.EnableGRPCGateway,
214-
ExperimentalEnableDistributedTracing: cfg.ExperimentalEnableDistributedTracing,
215-
UnsafeNoFsync: cfg.UnsafeNoFsync,
216-
EnableLeaseCheckpoint: cfg.ExperimentalEnableLeaseCheckpoint,
217-
LeaseCheckpointPersist: cfg.ExperimentalEnableLeaseCheckpointPersist,
218-
CompactionBatchLimit: cfg.ExperimentalCompactionBatchLimit,
219-
CompactionSleepInterval: cfg.ExperimentalCompactionSleepInterval,
220-
WatchProgressNotifyInterval: cfg.ExperimentalWatchProgressNotifyInterval,
221-
DowngradeCheckTime: cfg.ExperimentalDowngradeCheckTime,
222-
WarningApplyDuration: cfg.ExperimentalWarningApplyDuration,
223-
WarningUnaryRequestDuration: cfg.WarningUnaryRequestDuration,
224-
ExperimentalMemoryMlock: cfg.ExperimentalMemoryMlock,
225-
ExperimentalTxnModeWriteWithSharedBuffer: cfg.ExperimentalTxnModeWriteWithSharedBuffer,
171+
Name: cfg.Name,
172+
ClientURLs: cfg.AdvertiseClientUrls,
173+
PeerURLs: cfg.AdvertisePeerUrls,
174+
DataDir: cfg.Dir,
175+
DedicatedWALDir: cfg.WalDir,
176+
SnapshotCount: cfg.SnapshotCount,
177+
SnapshotCatchUpEntries: cfg.SnapshotCatchUpEntries,
178+
MaxSnapFiles: cfg.MaxSnapFiles,
179+
MaxWALFiles: cfg.MaxWalFiles,
180+
InitialPeerURLsMap: urlsmap,
181+
InitialClusterToken: token,
182+
DiscoveryURL: cfg.Durl,
183+
DiscoveryProxy: cfg.Dproxy,
184+
DiscoveryCfg: cfg.DiscoveryCfg,
185+
NewCluster: cfg.IsNewCluster(),
186+
PeerTLSInfo: cfg.PeerTLSInfo,
187+
TickMs: cfg.TickMs,
188+
ElectionTicks: cfg.ElectionTicks(),
189+
InitialElectionTickAdvance: cfg.InitialElectionTickAdvance,
190+
AutoCompactionRetention: autoCompactionRetention,
191+
AutoCompactionMode: cfg.AutoCompactionMode,
192+
QuotaBackendBytes: cfg.QuotaBackendBytes,
193+
BackendBatchLimit: cfg.BackendBatchLimit,
194+
BackendFreelistType: backendFreelistType,
195+
BackendBatchInterval: cfg.BackendBatchInterval,
196+
MaxTxnOps: cfg.MaxTxnOps,
197+
MaxRequestBytes: cfg.MaxRequestBytes,
198+
MaxConcurrentStreams: cfg.MaxConcurrentStreams,
199+
SocketOpts: cfg.SocketOpts,
200+
StrictReconfigCheck: cfg.StrictReconfigCheck,
201+
ClientCertAuthEnabled: cfg.ClientTLSInfo.ClientCertAuth,
202+
AuthToken: cfg.AuthToken,
203+
BcryptCost: cfg.BcryptCost,
204+
TokenTTL: cfg.AuthTokenTTL,
205+
CORS: cfg.CORS,
206+
HostWhitelist: cfg.HostWhitelist,
207+
CorruptCheckTime: cfg.ExperimentalCorruptCheckTime,
208+
CompactHashCheckEnabled: cfg.ExperimentalCompactHashCheckEnabled,
209+
CompactHashCheckTime: cfg.ExperimentalCompactHashCheckTime,
210+
PreVote: cfg.PreVote,
211+
Logger: cfg.logger,
212+
ForceNewCluster: cfg.ForceNewCluster,
213+
EnableGRPCGateway: cfg.EnableGRPCGateway,
214+
ExperimentalEnableDistributedTracing: cfg.ExperimentalEnableDistributedTracing,
215+
UnsafeNoFsync: cfg.UnsafeNoFsync,
216+
EnableLeaseCheckpoint: cfg.ExperimentalEnableLeaseCheckpoint,
217+
LeaseCheckpointPersist: cfg.ExperimentalEnableLeaseCheckpointPersist,
218+
CompactionBatchLimit: cfg.ExperimentalCompactionBatchLimit,
219+
CompactionSleepInterval: cfg.ExperimentalCompactionSleepInterval,
220+
WatchProgressNotifyInterval: cfg.ExperimentalWatchProgressNotifyInterval,
221+
DowngradeCheckTime: cfg.ExperimentalDowngradeCheckTime,
222+
WarningApplyDuration: cfg.ExperimentalWarningApplyDuration,
223+
WarningUnaryRequestDuration: cfg.WarningUnaryRequestDuration,
224+
ExperimentalMemoryMlock: cfg.ExperimentalMemoryMlock,
226225
ExperimentalBootstrapDefragThresholdMegabytes: cfg.ExperimentalBootstrapDefragThresholdMegabytes,
227226
ExperimentalMaxLearners: cfg.ExperimentalMaxLearners,
228227
V2Deprecation: cfg.V2DeprecationEffective(),

0 commit comments

Comments
 (0)