mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-11-24 16:53:14 +08:00
de/compress the fs meta file if filename ends with gz/gzip (#7500)
* de/compress the fs meta file if filename ends with gz/gzip * gemini code review * update help msg
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package shell
|
package shell
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"compress/gzip"
|
||||||
"context"
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -60,11 +61,31 @@ func (c *commandFsMetaLoad) Do(args []string, commandEnv *CommandEnv, writer io.
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
dst, err := os.OpenFile(fileName, os.O_RDONLY, 0644)
|
var dst io.Reader
|
||||||
|
|
||||||
|
f, err := os.OpenFile(fileName, os.O_RDONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return fmt.Errorf("failed to open file %s: %v", fileName, err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
dst = f
|
||||||
|
|
||||||
|
if strings.HasSuffix(fileName, ".gz") || strings.HasSuffix(fileName, ".gzip") {
|
||||||
|
var gr *gzip.Reader
|
||||||
|
gr, err = gzip.NewReader(dst)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
err1 := gr.Close()
|
||||||
|
if err == nil {
|
||||||
|
err = err1
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
dst = gr
|
||||||
}
|
}
|
||||||
defer dst.Close()
|
|
||||||
|
|
||||||
var dirCount, fileCount uint64
|
var dirCount, fileCount uint64
|
||||||
lastLogTime := time.Now()
|
lastLogTime := time.Now()
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package shell
|
package shell
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"compress/gzip"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -12,6 +12,8 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
@@ -38,7 +40,7 @@ func (c *commandFsMetaSave) Help() string {
|
|||||||
fs.meta.save . # save from current directory
|
fs.meta.save . # save from current directory
|
||||||
fs.meta.save # save from current directory
|
fs.meta.save # save from current directory
|
||||||
|
|
||||||
The meta data will be saved into a local <filer_host>-<port>-<time>.meta file.
|
The meta data will be saved into a local <filer_host>-<port>-<time>.meta.gz file.
|
||||||
These meta data can be later loaded by fs.meta.load command
|
These meta data can be later loaded by fs.meta.load command
|
||||||
|
|
||||||
`
|
`
|
||||||
@@ -52,7 +54,7 @@ func (c *commandFsMetaSave) Do(args []string, commandEnv *CommandEnv, writer io.
|
|||||||
|
|
||||||
fsMetaSaveCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
fsMetaSaveCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
|
||||||
verbose := fsMetaSaveCommand.Bool("v", false, "print out each processed files")
|
verbose := fsMetaSaveCommand.Bool("v", false, "print out each processed files")
|
||||||
outputFileName := fsMetaSaveCommand.String("o", "", "output the meta data to this file")
|
outputFileName := fsMetaSaveCommand.String("o", "", "output the meta data to this file. If file name ends with .gz or .gzip, it will be gzip compressed")
|
||||||
isObfuscate := fsMetaSaveCommand.Bool("obfuscate", false, "obfuscate the file names")
|
isObfuscate := fsMetaSaveCommand.Bool("obfuscate", false, "obfuscate the file names")
|
||||||
// chunksFileName := fsMetaSaveCommand.String("chunks", "", "output all the chunks to this file")
|
// chunksFileName := fsMetaSaveCommand.String("chunks", "", "output all the chunks to this file")
|
||||||
if err = fsMetaSaveCommand.Parse(args); err != nil {
|
if err = fsMetaSaveCommand.Parse(args); err != nil {
|
||||||
@@ -67,15 +69,31 @@ func (c *commandFsMetaSave) Do(args []string, commandEnv *CommandEnv, writer io.
|
|||||||
fileName := *outputFileName
|
fileName := *outputFileName
|
||||||
if fileName == "" {
|
if fileName == "" {
|
||||||
t := time.Now()
|
t := time.Now()
|
||||||
fileName = fmt.Sprintf("%s-%4d%02d%02d-%02d%02d%02d.meta",
|
fileName = fmt.Sprintf("%s-%4d%02d%02d-%02d%02d%02d.meta.gz",
|
||||||
commandEnv.option.FilerAddress.ToHttpAddress(), t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
|
commandEnv.option.FilerAddress.ToHttpAddress(), t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
|
||||||
}
|
}
|
||||||
|
|
||||||
dst, openErr := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
var dst io.Writer
|
||||||
|
|
||||||
|
f, openErr := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
||||||
if openErr != nil {
|
if openErr != nil {
|
||||||
return fmt.Errorf("failed to create file %s: %v", fileName, openErr)
|
return fmt.Errorf("failed to create file %s: %v", fileName, openErr)
|
||||||
}
|
}
|
||||||
defer dst.Close()
|
defer f.Close()
|
||||||
|
|
||||||
|
dst = f
|
||||||
|
|
||||||
|
if strings.HasSuffix(fileName, ".gz") || strings.HasSuffix(fileName, ".gzip") {
|
||||||
|
gw := gzip.NewWriter(dst)
|
||||||
|
defer func() {
|
||||||
|
err1 := gw.Close()
|
||||||
|
if err == nil {
|
||||||
|
err = err1
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
dst = gw
|
||||||
|
}
|
||||||
|
|
||||||
var cipherKey util.CipherKey
|
var cipherKey util.CipherKey
|
||||||
if *isObfuscate {
|
if *isObfuscate {
|
||||||
|
|||||||
Reference in New Issue
Block a user