diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-04-29 01:18:24 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-04-29 01:18:24 -0700 |
| commit | 6aad558972459f048835a85d721e48488e6c604e (patch) | |
| tree | 9837f9668f54aa712d3178a9ca858c11c79767be /unmaintained/see_meta/see_meta.go | |
| parent | 108d0fb08db7c7f3b6f5a199fb83de139eab94db (diff) | |
| download | seaweedfs-6aad558972459f048835a85d721e48488e6c604e.tar.xz seaweedfs-6aad558972459f048835a85d721e48488e6c604e.zip | |
add tool to see meta file generated by "fs.meta.save"
Diffstat (limited to 'unmaintained/see_meta/see_meta.go')
| -rw-r--r-- | unmaintained/see_meta/see_meta.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/unmaintained/see_meta/see_meta.go b/unmaintained/see_meta/see_meta.go new file mode 100644 index 000000000..d908e069d --- /dev/null +++ b/unmaintained/see_meta/see_meta.go @@ -0,0 +1,68 @@ +package main + +import ( + "flag" + "fmt" + "io" + "log" + "os" + + "github.com/chrislusf/seaweedfs/weed/filer2" + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/chrislusf/seaweedfs/weed/util" + "github.com/golang/protobuf/proto" +) + +var ( + metaFile = flag.String("meta", "", "meta file generated via fs.meta.save") +) + +func main() { + flag.Parse() + + dst, err := os.OpenFile(*metaFile, os.O_RDONLY, 0644) + if err != nil { + log.Fatalf("failed to open %s: %v", *metaFile, err) + } + defer dst.Close() + + err = walkMetaFile(dst) + if err != nil { + log.Fatalf("failed to open %s: %v", *metaFile, err) + } + +} + +func walkMetaFile(dst *os.File) error { + + sizeBuf := make([]byte, 4) + + for { + if n, err := dst.Read(sizeBuf); n != 4 { + if err == io.EOF { + return nil + } + return err + } + + size := util.BytesToUint32(sizeBuf) + + data := make([]byte, int(size)) + + if n, err := dst.Read(data); n != len(data) { + return err + } + + fullEntry := &filer_pb.FullEntry{} + if err := proto.Unmarshal(data, fullEntry); err != nil { + return err + } + + fmt.Fprintf(os.Stdout, "file %s %v\n", filer2.FullPath(fullEntry.Dir).Child(fullEntry.Entry.Name), fullEntry.Entry.Attributes.String()) + for i, chunk := range fullEntry.Entry.Chunks { + fmt.Fprintf(os.Stdout, " chunk %d %v\n", i+1, chunk.String()) + } + + } + +} |
