Allow exporting subset of chain

release/0.9.36
Taylor Gerring 10 years ago
parent 43ceb0f5c7
commit 89c9320d80
  1. 16
      core/chain_manager.go

@ -341,13 +341,25 @@ 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(1), 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)
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)

Loading…
Cancel
Save