mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
commit
4a0887ef7a
@ -86,25 +86,25 @@ func (s *Snapshotter) Load() (*raftpb.Snapshot, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadSnap(dir, name string) (*raftpb.Snapshot, error) {
|
func loadSnap(dir, name string) (*raftpb.Snapshot, error) {
|
||||||
var err error
|
|
||||||
var b []byte
|
|
||||||
|
|
||||||
fpath := path.Join(dir, name)
|
fpath := path.Join(dir, name)
|
||||||
defer func() {
|
snap, err := Read(fpath)
|
||||||
if err != nil {
|
|
||||||
renameBroken(fpath)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
b, err = ioutil.ReadFile(fpath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("snap: snapshotter cannot read file %v: %v", name, err)
|
renameBroken(fpath)
|
||||||
|
}
|
||||||
|
return snap, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read reads the snapshot named by snapname and returns the snapshot.
|
||||||
|
func Read(snapname string) (*raftpb.Snapshot, error) {
|
||||||
|
b, err := ioutil.ReadFile(snapname)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("snap: snapshotter cannot read file %v: %v", snapname, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var serializedSnap snappb.Snapshot
|
var serializedSnap snappb.Snapshot
|
||||||
if err = serializedSnap.Unmarshal(b); err != nil {
|
if err = serializedSnap.Unmarshal(b); err != nil {
|
||||||
log.Printf("snap: corrupted snapshot file %v: %v", name, err)
|
log.Printf("snap: corrupted snapshot file %v: %v", snapname, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,13 +115,13 @@ func loadSnap(dir, name string) (*raftpb.Snapshot, error) {
|
|||||||
|
|
||||||
crc := crc32.Update(0, crcTable, serializedSnap.Data)
|
crc := crc32.Update(0, crcTable, serializedSnap.Data)
|
||||||
if crc != serializedSnap.Crc {
|
if crc != serializedSnap.Crc {
|
||||||
log.Printf("snap: corrupted snapshot file %v: crc mismatch", name)
|
log.Printf("snap: corrupted snapshot file %v: crc mismatch", snapname)
|
||||||
return nil, ErrCRCMismatch
|
return nil, ErrCRCMismatch
|
||||||
}
|
}
|
||||||
|
|
||||||
var snap raftpb.Snapshot
|
var snap raftpb.Snapshot
|
||||||
if err = snap.Unmarshal(serializedSnap.Data); err != nil {
|
if err = snap.Unmarshal(serializedSnap.Data); err != nil {
|
||||||
log.Printf("snap: corrupted snapshot file %v: %v", name, err)
|
log.Printf("snap: corrupted snapshot file %v: %v", snapname, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &snap, nil
|
return &snap, nil
|
||||||
|
@ -32,13 +32,24 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
from := flag.String("data-dir", "", "")
|
from := flag.String("data-dir", "", "")
|
||||||
|
snapfile := flag.String("snap-file", "", "The base name of snapshot file to read")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
if *from == "" {
|
if *from == "" {
|
||||||
log.Fatal("Must provide -data-dir flag")
|
log.Fatal("Must provide -data-dir flag")
|
||||||
}
|
}
|
||||||
|
|
||||||
ss := snap.New(snapDir(*from))
|
var (
|
||||||
snapshot, err := ss.Load()
|
snapshot *raftpb.Snapshot
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
if *snapfile == "" {
|
||||||
|
ss := snap.New(snapDir(*from))
|
||||||
|
snapshot, err = ss.Load()
|
||||||
|
} else {
|
||||||
|
snapshot, err = snap.Read(path.Join(snapDir(*from), *snapfile))
|
||||||
|
}
|
||||||
|
|
||||||
var walsnap walpb.Snapshot
|
var walsnap walpb.Snapshot
|
||||||
switch err {
|
switch err {
|
||||||
case nil:
|
case nil:
|
||||||
@ -102,9 +113,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func walDir(dataDir string) string { return path.Join(dataDir, "wal") }
|
func walDir(dataDir string) string { return path.Join(dataDir, "member", "wal") }
|
||||||
|
|
||||||
func snapDir(dataDir string) string { return path.Join(dataDir, "snap") }
|
func snapDir(dataDir string) string { return path.Join(dataDir, "member", "snap") }
|
||||||
|
|
||||||
func parseWALMetadata(b []byte) (id, cid types.ID) {
|
func parseWALMetadata(b []byte) (id, cid types.ID) {
|
||||||
var metadata etcdserverpb.Metadata
|
var metadata etcdserverpb.Metadata
|
||||||
|
Loading…
x
Reference in New Issue
Block a user