aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-06-09 07:32:38 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-06-09 07:32:38 +0800
commit0f1cdfa53ad445df7bf3aed281fc36e53ecbbfd4 (patch)
tree4acfaeb81842b085838008583800917387e97002 /core
parent81ceac1b96bdd61b9f2f80359607e451061fc02f (diff)
parent4ab0cedf42abea8becc5177e566c070730f13a07 (diff)
downloaddexon-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.go17
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)