Minor refactor on the etcdutl migrate command
Signed-off-by: Benjamin Wang <benjamin.ahrtr@gmail.com>
This commit is contained in:
parent
92673d196c
commit
39ccd99efb
@ -75,6 +75,7 @@ func (o *migrateOptions) AddFlags(cmd *cobra.Command) {
|
|||||||
func (o *migrateOptions) Config() (*migrateConfig, error) {
|
func (o *migrateOptions) Config() (*migrateConfig, error) {
|
||||||
c := &migrateConfig{
|
c := &migrateConfig{
|
||||||
force: o.force,
|
force: o.force,
|
||||||
|
dataDir: o.dataDir,
|
||||||
lg: GetLogger(),
|
lg: GetLogger(),
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
@ -90,39 +91,43 @@ func (o *migrateOptions) Config() (*migrateConfig, error) {
|
|||||||
return nil, fmt.Errorf(`target version %q not supported. Minimal "3.5"`, storageVersionToString(c.targetVersion))
|
return nil, fmt.Errorf(`target version %q not supported. Minimal "3.5"`, storageVersionToString(c.targetVersion))
|
||||||
}
|
}
|
||||||
|
|
||||||
dbPath := datadir.ToBackendFileName(o.dataDir)
|
|
||||||
c.be = backend.NewDefaultBackend(GetLogger(), dbPath)
|
|
||||||
|
|
||||||
walPath := datadir.ToWALDir(o.dataDir)
|
|
||||||
walSnap, err := getLatestWALSnap(c.lg, o.dataDir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to get the lastest snapshot: %w", err)
|
|
||||||
}
|
|
||||||
w, err := wal.OpenForRead(c.lg, walPath, walSnap)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf(`failed to open wal: %w`, err)
|
|
||||||
}
|
|
||||||
defer w.Close()
|
|
||||||
c.walVersion, err = wal.ReadWALVersion(w)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf(`failed to read wal: %w`, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type migrateConfig struct {
|
type migrateConfig struct {
|
||||||
lg *zap.Logger
|
lg *zap.Logger
|
||||||
be backend.Backend
|
|
||||||
targetVersion *semver.Version
|
targetVersion *semver.Version
|
||||||
walVersion schema.WALVersion
|
walVersion schema.WALVersion
|
||||||
|
dataDir string
|
||||||
force bool
|
force bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *migrateConfig) finalize() error {
|
||||||
|
walPath := datadir.ToWALDir(c.dataDir)
|
||||||
|
walSnap, err := getLatestWALSnap(c.lg, c.dataDir)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get the lastest snapshot: %w", err)
|
||||||
|
}
|
||||||
|
w, err := wal.OpenForRead(c.lg, walPath, walSnap)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(`failed to open wal: %w`, err)
|
||||||
|
}
|
||||||
|
defer w.Close()
|
||||||
|
c.walVersion, err = wal.ReadWALVersion(w)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(`failed to read wal: %w`, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func migrateCommandFunc(c *migrateConfig) error {
|
func migrateCommandFunc(c *migrateConfig) error {
|
||||||
defer c.be.Close()
|
dbPath := datadir.ToBackendFileName(c.dataDir)
|
||||||
tx := c.be.BatchTx()
|
be := backend.NewDefaultBackend(GetLogger(), dbPath)
|
||||||
current, err := schema.DetectSchemaVersion(c.lg, c.be.ReadTx())
|
defer be.Close()
|
||||||
|
|
||||||
|
tx := be.BatchTx()
|
||||||
|
current, err := schema.DetectSchemaVersion(c.lg, be.ReadTx())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.lg.Error("failed to detect storage version. Please make sure you are using data dir from etcd v3.5 and older")
|
c.lg.Error("failed to detect storage version. Please make sure you are using data dir from etcd v3.5 and older")
|
||||||
return err
|
return err
|
||||||
@ -131,6 +136,12 @@ func migrateCommandFunc(c *migrateConfig) error {
|
|||||||
c.lg.Info("storage version up-to-date", zap.String("storage-version", storageVersionToString(¤t)))
|
c.lg.Info("storage version up-to-date", zap.String("storage-version", storageVersionToString(¤t)))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err = c.finalize(); err != nil {
|
||||||
|
c.lg.Error("Failed to finalize config", zap.Error(err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
err = schema.Migrate(c.lg, tx, c.walVersion, *c.targetVersion)
|
err = schema.Migrate(c.lg, tx, c.walVersion, *c.targetVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !c.force {
|
if !c.force {
|
||||||
@ -139,7 +150,7 @@ func migrateCommandFunc(c *migrateConfig) error {
|
|||||||
c.lg.Info("normal migrate failed, trying with force", zap.Error(err))
|
c.lg.Info("normal migrate failed, trying with force", zap.Error(err))
|
||||||
migrateForce(c.lg, tx, c.targetVersion)
|
migrateForce(c.lg, tx, c.targetVersion)
|
||||||
}
|
}
|
||||||
c.be.ForceCommit()
|
be.ForceCommit()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user