You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
package shell
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
cp "github.com/otiai10/copy"
|
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
"io"
|
|
)
|
|
|
|
func init() {
|
|
Commands = append(Commands, &commandFsMetaSnapshotsCreate{})
|
|
}
|
|
|
|
type commandFsMetaSnapshotsCreate struct {
|
|
}
|
|
|
|
func (c *commandFsMetaSnapshotsCreate) Name() string {
|
|
return "fs.meta.snapshots.create"
|
|
}
|
|
|
|
func (c *commandFsMetaSnapshotsCreate) Help() string {
|
|
return `create snapshots of meta data from given time range.
|
|
|
|
fs.meta.snapshots.create -s yyyy-mm-dd -e yyyy-mm-dd -o
|
|
|
|
//These snapshot maybe later used to backup the system to certain timestamp.
|
|
|
|
`
|
|
}
|
|
|
|
func (c *commandFsMetaSnapshotsCreate) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) {
|
|
db, err := leveldb.OpenFile("/root/go/repos/seaweedfs/weed/snapshots.db", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer db.Close()
|
|
fsMetaSnapshotsCreateCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
|
if err = fsMetaSnapshotsCreateCommand.Parse(args); err != nil {
|
|
return err
|
|
}
|
|
|
|
path := filer.SystemLogDir
|
|
count := 0
|
|
err = filer_pb.TraverseBfs(commandEnv, util.FullPath(path), func(parentPath util.FullPath, entry *filer_pb.Entry) {
|
|
if !entry.IsDirectory {
|
|
fmt.Println("%+v", entry)
|
|
err = db.Put([]byte(entry.GetName()), entry.Content, nil)
|
|
count++
|
|
if count%2 == 0 {
|
|
snapshotName := fmt.Sprintf("/root/go/repos/seaweedfs/weed/snapshots-%d.db", count/2)
|
|
e := cp.Copy("/root/go/repos/seaweedfs/weed/snapshots.db", snapshotName)
|
|
println(snapshotName)
|
|
if e != nil {
|
|
println("failed to generate " + snapshotName + e.Error())
|
|
}
|
|
}
|
|
}
|
|
})
|
|
verifying, err := leveldb.OpenFile("/root/go/repos/seaweedfs/weed/snapshots-1.db", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
iter := verifying.NewIterator(nil, nil)
|
|
for iter.Next() {
|
|
key := iter.Key()
|
|
fmt.Println("1 ---->")
|
|
fmt.Println(string(key))
|
|
}
|
|
verifying.Close()
|
|
verifying, err = leveldb.OpenFile("/root/go/repos/seaweedfs/weed/snapshots-4.db", nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
iter = verifying.NewIterator(nil, nil)
|
|
for iter.Next() {
|
|
key := iter.Key()
|
|
fmt.Println("4 ---->")
|
|
fmt.Println(string(key))
|
|
}
|
|
verifying.Close()
|
|
return err
|
|
}
|