Merge pull request #17808 from siyuanfoundation/3.5-downgrade-test

[3.5] add experimental-snapshot-catchup-entries flag
This commit is contained in:
Marek Siarkowicz 2024-04-19 08:31:13 +02:00 committed by GitHub
commit 91e9dd33e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 3 deletions

View File

@ -151,7 +151,7 @@ type Config struct {
// follower to catch up.
// WARNING: only change this for tests.
// Always use "DefaultSnapshotCatchUpEntries"
SnapshotCatchUpEntries uint64
SnapshotCatchUpEntries uint64 `json:"experimental-snapshot-catch-up-entries"`
MaxSnapFiles uint `json:"max-snapshots"`
MaxWalFiles uint `json:"max-wals"`

View File

@ -302,6 +302,7 @@ func newConfig() *config {
fs.BoolVar(&cfg.ec.ExperimentalMemoryMlock, "experimental-memory-mlock", cfg.ec.ExperimentalMemoryMlock, "Enable to enforce etcd pages (in particular bbolt) to stay in RAM.")
fs.BoolVar(&cfg.ec.ExperimentalTxnModeWriteWithSharedBuffer, "experimental-txn-mode-write-with-shared-buffer", true, "Enable the write transaction to use a shared buffer in its readonly check operations.")
fs.UintVar(&cfg.ec.ExperimentalBootstrapDefragThresholdMegabytes, "experimental-bootstrap-defrag-threshold-megabytes", 0, "Enable the defrag during etcd server bootstrap on condition that it will free at least the provided threshold of disk space. Needs to be set to non-zero value to take effect.")
fs.Uint64Var(&cfg.ec.SnapshotCatchUpEntries, "experimental-snapshot-catchup-entries", cfg.ec.SnapshotCatchUpEntries, "(WARNING: Use this flag with caution!) Number of entries for a slow follower to catch up after compacting the raft storage entries.")
// unsafe
fs.BoolVar(&cfg.ec.UnsafeNoFsync, "unsafe-no-fsync", false, "Disables fsync, unsafe, will cause data loss.")

View File

@ -505,7 +505,10 @@ func TestFlagsPresentInHelp(t *testing.T) {
// Ignored flags do not need to be in the help
return
}
if f.Name == "experimental-snapshot-catchup-entries" {
// Ignore because it is supposed to only be used in tests.
return
}
flagText := fmt.Sprintf("--%s", f.Name)
if !strings.Contains(flagsline, flagText) && !strings.Contains(usageline, flagText) {
t.Errorf("Neither flagsline nor usageline in help.go contains flag named %s", flagText)

View File

@ -82,6 +82,7 @@ func mixVersionsSnapshotTestByAddingMember(t *testing.T, cfg e2e.EtcdProcessClus
t.Logf("Create an etcd cluster with %d member\n", cfg.ClusterSize)
cfg.SnapshotCount = 10
cfg.SnapshotCatchUpEntries = 10
cfg.BasePeerScheme = "unix" // to avoid port conflict
epc, err := e2e.NewEtcdProcessCluster(t, &cfg)
@ -126,6 +127,7 @@ func mixVersionsSnapshotTestByMockPartition(t *testing.T, cfg e2e.EtcdProcessClu
t.Logf("Create an etcd cluster with %d member\n", cfg.ClusterSize)
cfg.SnapshotCount = 10
cfg.SnapshotCatchUpEntries = 10
cfg.BasePeerScheme = "unix" // to avoid port conflict
epc, err := e2e.NewEtcdProcessCluster(t, &cfg)
@ -154,6 +156,12 @@ func mixVersionsSnapshotTestByMockPartition(t *testing.T, cfg e2e.EtcdProcessClu
require.NoError(t, err)
assertKVHash(t, epc)
leaderEPC = epc.Procs[epc.WaitLeader(t)]
if leaderEPC.Config().ExecPath == e2e.BinPath {
t.Log("Verify logs to check snapshot be sent from leader to follower")
e2e.AssertProcessLogs(t, leaderEPC, "sent database snapshot")
}
}
func writeKVs(t *testing.T, etcdctl *e2e.Etcdctl, startIdx, endIdx int) {

View File

@ -158,7 +158,8 @@ type EtcdProcessClusterConfig struct {
MetricsURLScheme string
SnapshotCount int // default is 10000
SnapshotCount int // default is 10000
SnapshotCatchUpEntries int // default is 5000
ClientTLS ClientConnType
ClientCertAuthEnabled bool
@ -402,6 +403,12 @@ func (cfg *EtcdProcessClusterConfig) EtcdServerProcessConfig(tb testing.TB, i in
panic(fmt.Sprintf("Unknown cluster version %v", cfg.Version))
}
// the "--experimental-snapshot-catchup-entries" flag is not available in 3.4.
// so it should not be set if the process execPath is not BinPath.
if cfg.SnapshotCatchUpEntries > 0 && execPath == BinPath {
args = append(args, "--experimental-snapshot-catchup-entries", fmt.Sprintf("%d", cfg.SnapshotCatchUpEntries))
}
return &EtcdServerProcessConfig{
lg: cfg.Logger,
ExecPath: execPath,