diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-09 07:32:38 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-09 07:32:38 +0800 |
commit | 0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4 (patch) | |
tree | 4acfaeb81842b085838008583800917387e97002 /core | |
parent | 81ceac1b96bdd61b9f2f80359607e451061fc02f (diff) | |
parent | 4ab0cedf42abea8becc5177e566c070730f13a07 (diff) | |
download | dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar.gz dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar.bz2 dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar.lz dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar.xz dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.tar.zst dexon-0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4.zip |
Merge pull request #1193 from tgerring/hotbackup
Improve export command
Diffstat (limited to 'core')
-rw-r--r-- | core/chain_manager.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/core/chain_manager.go b/core/chain_manager.go index edd1cc742..e87253304 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -347,13 +347,24 @@ func (bc *ChainManager) ResetWithGenesisBlock(gb *types.Block) { // Export writes the active chain to the given writer. func (self *ChainManager) Export(w io.Writer) error { + if err := self.ExportN(w, uint64(0), self.currentBlock.NumberU64()); err != nil { + return err + } + return nil +} + +// ExportN writes a subset of the active chain to the given writer. +func (self *ChainManager) ExportN(w io.Writer, first uint64, last uint64) error { self.mu.RLock() defer self.mu.RUnlock() - glog.V(logger.Info).Infof("exporting %v blocks...\n", self.currentBlock.Header().Number) - last := self.currentBlock.NumberU64() + if first > last { + return fmt.Errorf("export failed: first (%d) is greater than last (%d)", first, last) + } + + glog.V(logger.Info).Infof("exporting %d blocks...\n", last-first+1) - for nr := uint64(1); nr <= last; nr++ { + for nr := first; nr <= last; nr++ { block := self.GetBlockByNumber(nr) if block == nil { return fmt.Errorf("export failed on #%d: not found", nr) |