From 4da85fe94e085bba77f0b6c6818f5664d91cdea8 Mon Sep 17 00:00:00 2001
From: Alex Sharov <AskAlexSharov@gmail.com>
Date: Fri, 25 Mar 2022 11:00:52 +0700
Subject: [PATCH] integration_unwind_sender (#3767)

---
 cmd/downloader/downloader/downloader.go | 10 +++++++++-
 cmd/integration/commands/stages.go      |  9 ++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/cmd/downloader/downloader/downloader.go b/cmd/downloader/downloader/downloader.go
index 64c9e8958c..7a3b7af56d 100644
--- a/cmd/downloader/downloader/downloader.go
+++ b/cmd/downloader/downloader/downloader.go
@@ -14,6 +14,7 @@ import (
 	"github.com/ledgerwatch/erigon-lib/kv"
 	"github.com/ledgerwatch/erigon-lib/kv/mdbx"
 	"github.com/ledgerwatch/log/v3"
+	mdbx2 "github.com/torquem-ch/mdbx-go/mdbx"
 )
 
 const ASSERT = false
@@ -24,7 +25,14 @@ type Protocols struct {
 }
 
 func New(cfg *torrent.ClientConfig, snapshotDir *dir.Rw) (*Protocols, error) {
-	db := mdbx.MustOpen(filepath.Join(snapshotDir.Path, "db"))
+	db, err := mdbx.NewMDBX(log.New()).
+		Flags(func(f uint) uint { return f | mdbx2.WriteMap | mdbx2.SafeNoSync }).
+		SyncPeriod(15 * time.Second).
+		Path(filepath.Join(snapshotDir.Path, "db")).
+		Open()
+	if err != nil {
+		return nil, err
+	}
 
 	peerID, err := readPeerID(db)
 	if err != nil {
diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go
index 1fa566bc4b..960cc39140 100644
--- a/cmd/integration/commands/stages.go
+++ b/cmd/integration/commands/stages.go
@@ -491,7 +491,7 @@ func stageHeaders(db kv.RwDB, ctx context.Context) error {
 
 func stageBodies(db kv.RwDB, ctx context.Context) error {
 	_, _, chainConfig, _, sync, _, _ := newSync(ctx, db, nil)
-	return db.Update(ctx, func(tx kv.RwTx) error {
+	if err := db.Update(ctx, func(tx kv.RwTx) error {
 		s := stage(sync, tx, nil, stages.Bodies)
 
 		if unwind > 0 {
@@ -499,7 +499,7 @@ func stageBodies(db kv.RwDB, ctx context.Context) error {
 				return fmt.Errorf("cannot unwind past 0")
 			}
 
-			u := sync.NewUnwindState(stages.Senders, s.BlockNumber-unwind, s.BlockNumber)
+			u := sync.NewUnwindState(stages.Bodies, s.BlockNumber-unwind, s.BlockNumber)
 			if err := stagedsync.UnwindBodiesStage(u, tx, stagedsync.StageBodiesCfg(db, nil, nil, nil, nil, 0, *chainConfig, 0, allSnapshots(chainConfig), getBlockReader(chainConfig)), ctx); err != nil {
 				return err
 			}
@@ -513,7 +513,10 @@ func stageBodies(db kv.RwDB, ctx context.Context) error {
 		}
 		log.Info("This command only works with --unwind option")
 		return nil
-	})
+	}); err != nil {
+		return err
+	}
+	return nil
 }
 
 func stageSenders(db kv.RwDB, ctx context.Context) error {
-- 
GitLab