diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-12-14 17:15:21 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-14 17:15:21 +0800 |
commit | fdb8edf5ea0cc6e8e9b6f3e64c8c4c7f5324eea3 (patch) | |
tree | d0d743ca77665e16bcb63b27e0361ce210ded0be /cmd | |
parent | 157a4bd9266bb3ae7c4617a4a7159fd309b2f7eb (diff) | |
parent | 9ba9fe818d252ee9770371f0ccad68e3d09fbf5c (diff) | |
download | go-tangerine-fdb8edf5ea0cc6e8e9b6f3e64c8c4c7f5324eea3.tar.gz go-tangerine-fdb8edf5ea0cc6e8e9b6f3e64c8c4c7f5324eea3.tar.zst go-tangerine-fdb8edf5ea0cc6e8e9b6f3e64c8c4c7f5324eea3.zip |
Merge pull request #3427 from Arachnid/gzipdump
cmd/utils, eth: Add gzip support for chain dump and restore
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/utils/cmd.go | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 584afc804..a56507e4d 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -18,12 +18,14 @@ package utils import ( + "compress/gzip" "fmt" "io" "os" "os/signal" "regexp" "runtime" + "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -133,7 +135,15 @@ func ImportChain(chain *core.BlockChain, fn string) error { return err } defer fh.Close() - stream := rlp.NewStream(fh, 0) + + var reader io.Reader = fh + if strings.HasSuffix(fn, ".gz") { + if reader, err = gzip.NewReader(reader); err != nil { + return err + } + } + + stream := rlp.NewStream(reader, 0) // Run actual the import. blocks := make(types.Blocks, importBatchSize) @@ -195,10 +205,18 @@ func ExportChain(blockchain *core.BlockChain, fn string) error { return err } defer fh.Close() - if err := blockchain.Export(fh); err != nil { + + var writer io.Writer = fh + if strings.HasSuffix(fn, ".gz") { + writer = gzip.NewWriter(writer) + defer writer.(*gzip.Writer).Close() + } + + if err := blockchain.Export(writer); err != nil { return err } glog.Infoln("Exported blockchain to ", fn) + return nil } @@ -210,7 +228,14 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las return err } defer fh.Close() - if err := blockchain.ExportN(fh, first, last); err != nil { + + var writer io.Writer = fh + if strings.HasSuffix(fn, ".gz") { + writer = gzip.NewWriter(writer) + defer writer.(*gzip.Writer).Close() + } + + if err := blockchain.ExportN(writer, first, last); err != nil { return err } glog.Infoln("Exported blockchain to ", fn) |