瀏覽代碼

core: report progress on log chain exports (#17066)

* core/blockchain: export progress

* core: polish up chain export progress report a bit
Raghav Sood 7 年之前
父節點
當前提交
11a402f747
共有 2 個文件被更改,包括 9 次插入4 次删除
  1. 2 1
      cmd/geth/chaincmd.go
  2. 7 3
      core/blockchain.go

+ 2 - 1
cmd/geth/chaincmd.go

@@ -94,7 +94,8 @@ processing will proceed even if an individual RLP-file import failure occurs.`,
 Requires a first argument of the file to write to.
 Requires a first argument of the file to write to.
 Optional second and third arguments control the first and
 Optional second and third arguments control the first and
 last block to write. In this mode, the file will be appended
 last block to write. In this mode, the file will be appended
-if already existing.`,
+if already existing. If the file ends with .gz, the output will
+be gzipped.`,
 	}
 	}
 	importPreimagesCommand = cli.Command{
 	importPreimagesCommand = cli.Command{
 		Action:    utils.MigrateFlags(importPreimages),
 		Action:    utils.MigrateFlags(importPreimages),

+ 7 - 3
core/blockchain.go

@@ -450,15 +450,19 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error {
 	}
 	}
 	log.Info("Exporting batch of blocks", "count", last-first+1)
 	log.Info("Exporting batch of blocks", "count", last-first+1)
 
 
+	start, reported := time.Now(), time.Now()
 	for nr := first; nr <= last; nr++ {
 	for nr := first; nr <= last; nr++ {
 		block := bc.GetBlockByNumber(nr)
 		block := bc.GetBlockByNumber(nr)
 		if block == nil {
 		if block == nil {
 			return fmt.Errorf("export failed on #%d: not found", nr)
 			return fmt.Errorf("export failed on #%d: not found", nr)
 		}
 		}
-
 		if err := block.EncodeRLP(w); err != nil {
 		if err := block.EncodeRLP(w); err != nil {
 			return err
 			return err
 		}
 		}
+		if time.Since(reported) >= statsReportLimit {
+			log.Info("Exporting blocks", "exported", block.NumberU64()-first, "elapsed", common.PrettyDuration(time.Since(start)))
+			reported = time.Now()
+		}
 	}
 	}
 
 
 	return nil
 	return nil
@@ -1203,8 +1207,8 @@ type insertStats struct {
 	startTime                  mclock.AbsTime
 	startTime                  mclock.AbsTime
 }
 }
 
 
-// statsReportLimit is the time limit during import after which we always print
-// out progress. This avoids the user wondering what's going on.
+// statsReportLimit is the time limit during import and export after which we
+// always print out progress. This avoids the user wondering what's going on.
 const statsReportLimit = 8 * time.Second
 const statsReportLimit = 8 * time.Second
 
 
 // report prints statistics if some number of blocks have been processed
 // report prints statistics if some number of blocks have been processed