etcdctl/ctlv2/command/backup_command.go
func handleBackup(c *cli.Context) error {
	var srcWAL string
	var destWAL string

	withV3 := c.Bool("with-v3")
	srcSnap := filepath.Join(c.String("data-dir"), "member", "snap")
	destSnap := filepath.Join(c.String("backup-dir"), "member", "snap")

	if c.String("wal-dir") != "" {
		srcWAL = c.String("wal-dir")
	} else {
		srcWAL = filepath.Join(c.String("data-dir"), "member", "wal")
	}

	if c.String("backup-wal-dir") != "" {
		destWAL = c.String("backup-wal-dir")
	} else {
		destWAL = filepath.Join(c.String("backup-dir"), "member", "wal")
	}

	if err := fileutil.CreateDirAll(destSnap); err != nil {
		log.Fatalf("failed creating backup snapshot dir %v: %v", destSnap, err)
	}

	walsnap := saveSnap(destSnap, srcSnap)
	metadata, state, ents := loadWAL(srcWAL, walsnap, withV3)
	saveDB(filepath.Join(destSnap, "db"), filepath.Join(srcSnap, "db"), state.Commit, withV3)

	idgen := idutil.NewGenerator(0, time.Now())
	metadata.NodeID = idgen.Next()
	metadata.ClusterID = idgen.Next()

	neww, err := wal.Create(zap.NewExample(), destWAL, pbutil.MustMarshal(&metadata))
	if err != nil {
		log.Fatal(err)
	}
	defer neww.Close()
	if err := neww.Save(state, ents); err != nil {
		log.Fatal(err)
	}
	if err := neww.SaveSnapshot(walsnap); err != nil {
		log.Fatal(err)
	}

	return nil
}
func handleBackup(c *cli.Context) error {
	var srcWAL string
	var destWAL string

	withV3 := c.Bool("with-v3")
	srcSnap := filepath.Join(c.String("data-dir"), "member", "snap")
	destSnap := filepath.Join(c.String("backup-dir"), "member", "snap")

	if c.String("wal-dir") != "" {
		srcWAL = c.String("wal-dir")
	} else {
		srcWAL = filepath.Join(c.String("data-dir"), "member", "wal")
	}

	if c.String("backup-wal-dir") != "" {
		destWAL = c.String("backup-wal-dir")
	} else {
		destWAL = filepath.Join(c.String("backup-dir"), "member", "wal")
	}

	if err := fileutil.CreateDirAll(destSnap); err != nil {
		log.Fatalf("failed creating backup snapshot dir %v: %v", destSnap, err)
	}

	walsnap := saveSnap(destSnap, srcSnap)
	metadata, state, ents := loadWAL(srcWAL, walsnap, withV3)
	saveDB(filepath.Join(destSnap, "db"), filepath.Join(srcSnap, "db"), state.Commit, withV3)

	idgen := idutil.NewGenerator(0, time.Now())
	metadata.NodeID = idgen.Next()
	metadata.ClusterID = idgen.Next()

	neww, err := wal.Create(zap.NewExample(), destWAL, pbutil.MustMarshal(&metadata))
	if err != nil {
		log.Fatal(err)
	}
	defer neww.Close()
	if err := neww.Save(state, ents); err != nil {
		log.Fatal(err)
	}
	if err := neww.SaveSnapshot(walsnap); err != nil {
		log.Fatal(err)
	}

	return nil
}
func handleBackup ( c * cli . Context ) error { var srcWAL string var destWAL string withV3 := c . Bool ( " " ) srcSnap := filepath . Join ( c . String ( " " ) , " " , " " ) destSnap := filepath . Join ( c . String ( " " ) , " " , " " ) if c . String ( " " ) != " " { srcWAL = c . String ( " " ) } else { srcWAL = filepath . Join ( c . String ( " " ) , " " , " " ) } if c . String ( " " ) != " " { destWAL = c . String ( " " ) } else { destWAL = filepath . Join ( c . String ( " " ) , " " , " " ) } if err := fileutil . CreateDirAll ( destSnap ) ; err != nil { log . Fatalf ( " " , destSnap , err ) } walsnap := saveSnap ( destSnap , srcSnap ) metadata , state , ents := loadWAL ( srcWAL , walsnap , withV3 ) saveDB ( filepath . Join ( destSnap , " " ) , filepath . Join ( srcSnap , " " ) , state . Commit , withV3 ) idgen := idutil . NewGenerator ( 0 , time . Now ( ) ) metadata . NodeID = idgen . Next ( ) metadata . ClusterID = idgen . Next ( ) neww , err := wal . Create ( zap . NewExample ( ) , destWAL , pbutil . MustMarshal ( & metadata ) ) if err != nil { log . Fatal ( err ) } defer neww . Close ( ) if err := neww . Save ( state , ents ) ; err != nil { log . Fatal ( err ) } if err := neww . SaveSnapshot ( walsnap ) ; err != nil { log . Fatal ( err ) } return nil }
// handleBackup handles a request that intends to do a backup.
handleBackup handles a request that intends to do a backup .