From 94758c1760a3ec0ad48076164e570cb7bad5c6f8 Mon Sep 17 00:00:00 2001 From: adeyemi Date: Wed, 5 Feb 2025 15:11:21 -0800 Subject: [PATCH] Migrate WALVersion, and reuse in schema.go Signed-off-by: adeyemi --- etcdutl/etcdutl/migrate_command.go | 2 +- server/storage/schema/schema.go | 10 +++------- server/storage/wal/version.go | 8 +++++++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/etcdutl/etcdutl/migrate_command.go b/etcdutl/etcdutl/migrate_command.go index 0a114268524f..a7f3d849f168 100644 --- a/etcdutl/etcdutl/migrate_command.go +++ b/etcdutl/etcdutl/migrate_command.go @@ -97,7 +97,7 @@ func (o *migrateOptions) Config() (*migrateConfig, error) { type migrateConfig struct { lg *zap.Logger targetVersion *semver.Version - walVersion schema.WALVersion + walVersion wal.Version dataDir string force bool } diff --git a/server/storage/schema/schema.go b/server/storage/schema/schema.go index 00a441a3fc01..c0f5feb5319f 100644 --- a/server/storage/schema/schema.go +++ b/server/storage/schema/schema.go @@ -22,6 +22,7 @@ import ( "go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/server/v3/storage/backend" + "go.etcd.io/etcd/server/v3/storage/wal" ) // Validate checks provided backend to confirm that schema used is supported. @@ -47,21 +48,16 @@ func localBinaryVersion() semver.Version { return semver.Version{Major: v.Major, Minor: v.Minor} } -type WALVersion interface { - // MinimalEtcdVersion returns minimal etcd version able to interpret WAL log. - MinimalEtcdVersion() *semver.Version -} - // Migrate updates storage schema to provided target version. // Downgrading requires that provided WAL doesn't contain unsupported entries. -func Migrate(lg *zap.Logger, tx backend.BatchTx, w WALVersion, target semver.Version) error { +func Migrate(lg *zap.Logger, tx backend.BatchTx, w wal.Version, target semver.Version) error { tx.LockOutsideApply() defer tx.Unlock() return UnsafeMigrate(lg, tx, w, target) } // UnsafeMigrate is non thread-safe version of Migrate. -func UnsafeMigrate(lg *zap.Logger, tx backend.UnsafeReadWriter, w WALVersion, target semver.Version) error { +func UnsafeMigrate(lg *zap.Logger, tx backend.UnsafeReadWriter, w wal.Version, target semver.Version) error { current, err := UnsafeDetectSchemaVersion(lg, tx) if err != nil { return fmt.Errorf("cannot detect storage schema version: %w", err) diff --git a/server/storage/wal/version.go b/server/storage/wal/version.go index 1c0775bde55c..b592fd2ee86c 100644 --- a/server/storage/wal/version.go +++ b/server/storage/wal/version.go @@ -29,9 +29,15 @@ import ( "go.etcd.io/raft/v3/raftpb" ) +// Version defines the wal version interface. +type Version interface { + // MinimalEtcdVersion returns minimal etcd version able to interpret WAL log. + MinimalEtcdVersion() *semver.Version +} + // ReadWALVersion reads remaining entries from opened WAL and returns struct // that implements schema.WAL interface. -func ReadWALVersion(w *WAL) (*walVersion, error) { +func ReadWALVersion(w *WAL) (Version, error) { _, _, ents, err := w.ReadAll() if err != nil { return nil, err