From 56efed71b51d8b2edbe000130903d6a5ecab84b3 Mon Sep 17 00:00:00 2001
From: zsfelfoldi <zsfelfoldi@gmail.com>
Date: Tue, 19 Jul 2016 14:03:30 +0200
Subject: eth: fixed chaindb upgrade

---
 eth/db_upgrade.go | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'eth')

diff --git a/eth/db_upgrade.go b/eth/db_upgrade.go
index 12de60fe7..172bb0954 100644
--- a/eth/db_upgrade.go
+++ b/eth/db_upgrade.go
@@ -93,6 +93,9 @@ func upgradeSequentialKeys(db ethdb.Database) (stopFn func()) {
 func upgradeSequentialCanonicalNumbers(db ethdb.Database, stopFn func() bool) (error, bool) {
 	prefix := []byte("block-num-")
 	it := db.(*ethdb.LDBDatabase).NewIterator()
+	defer func() {
+		it.Release()
+	}()
 	it.Seek(prefix)
 	cnt := 0
 	for bytes.HasPrefix(it.Key(), prefix) {
@@ -100,6 +103,9 @@ func upgradeSequentialCanonicalNumbers(db ethdb.Database, stopFn func() bool) (e
 		if len(keyPtr) < 20 {
 			cnt++
 			if cnt%100000 == 0 {
+				it.Release()
+				it = db.(*ethdb.LDBDatabase).NewIterator()
+				it.Seek(keyPtr)
 				glog.V(logger.Info).Infof("converting %d canonical numbers...", cnt)
 			}
 			number := big.NewInt(0).SetBytes(keyPtr[10:]).Uint64()
@@ -130,6 +136,9 @@ func upgradeSequentialCanonicalNumbers(db ethdb.Database, stopFn func() bool) (e
 func upgradeSequentialBlocks(db ethdb.Database, stopFn func() bool) (error, bool) {
 	prefix := []byte("block-")
 	it := db.(*ethdb.LDBDatabase).NewIterator()
+	defer func() {
+		it.Release()
+	}()
 	it.Seek(prefix)
 	cnt := 0
 	for bytes.HasPrefix(it.Key(), prefix) {
@@ -137,6 +146,9 @@ func upgradeSequentialBlocks(db ethdb.Database, stopFn func() bool) (error, bool
 		if len(keyPtr) >= 38 {
 			cnt++
 			if cnt%10000 == 0 {
+				it.Release()
+				it = db.(*ethdb.LDBDatabase).NewIterator()
+				it.Seek(keyPtr)
 				glog.V(logger.Info).Infof("converting %d blocks...", cnt)
 			}
 			// convert header, body, td and block receipts
@@ -175,6 +187,7 @@ func upgradeSequentialBlocks(db ethdb.Database, stopFn func() bool) (error, bool
 func upgradeSequentialOrphanedReceipts(db ethdb.Database, stopFn func() bool) (error, bool) {
 	prefix := []byte("receipts-block-")
 	it := db.(*ethdb.LDBDatabase).NewIterator()
+	defer it.Release()
 	it.Seek(prefix)
 	cnt := 0
 	for bytes.HasPrefix(it.Key(), prefix) {
-- 
cgit v1.2.3