func dump4(dataDir string) ([]raftpb.Entry, error) { lf4 := logFile4(dataDir) ents, err := migrate.DecodeLog4FromFile(lf4) if err != nil { return nil, err } return migrate.Entries4To2(ents) }
func checkInternalVersionByDataDir4(dataDir string) (version, error) { // check v0.4 snapshot snap4, err := migrate.DecodeLatestSnapshot4FromDir(snapDir4(dataDir)) if err != nil { return internalUnknown, err } if snap4 != nil { st := &migrate.Store4{} if err := json.Unmarshal(snap4.State, st); err != nil { return internalUnknown, err } dir := st.Root.Children["_etcd"] n, ok := dir.Children["next-internal-version"] if ok && n.Value == "2" { return internalV2, nil } } // check v0.4 log ents4, err := migrate.DecodeLog4FromFile(logFile4(dataDir)) if err != nil { return internalUnknown, err } for _, e := range ents4 { cmd, err := migrate.NewCommand4(e.GetCommandName(), e.GetCommand(), nil) if err != nil { return internalUnknown, err } setcmd, ok := cmd.(*migrate.SetCommand) if !ok { continue } if setcmd.Key == "/_etcd/next-internal-version" && setcmd.Value == "2" { return internalV2, nil } } return internalV1, nil }