浏览代码

core: moved check for max queue to checkQueue

Moved the queue to check to the checkQueue method so no undeeded loops
need to be initiated or sorting needs to happen twice.
obscuren 10 年之前
父节点
当前提交
e79cc42dfe
共有 2 个文件被更改,包括 12 次插入26 次删除
  1. 2 10
      core/chain_manager.go
  2. 10 16
      core/transaction_pool.go

+ 2 - 10
core/chain_manager.go

@@ -5,7 +5,6 @@ import (
 	"fmt"
 	"io"
 	"math/big"
-	"os"
 	"runtime"
 	"sync"
 	"sync/atomic"
@@ -235,15 +234,8 @@ func (bc *ChainManager) setLastState() {
 		if block != nil {
 			bc.currentBlock = block
 			bc.lastBlockHash = block.Hash()
-		} else { // TODO CLEAN THIS UP TMP CODE
-			block = bc.GetBlockByNumber(400000)
-			if block == nil {
-				fmt.Println("Fatal. LastBlock not found. Report this issue")
-				os.Exit(1)
-			}
-			bc.currentBlock = block
-			bc.lastBlockHash = block.Hash()
-			bc.insert(block)
+		} else {
+			glog.Fatalf("Fatal. LastBlock not found. Please run removedb and resync")
 		}
 	} else {
 		bc.Reset()

+ 10 - 16
core/transaction_pool.go

@@ -228,21 +228,6 @@ func (self *TxPool) queueTx(hash common.Hash, tx *types.Transaction) {
 		self.queue[from] = make(map[common.Hash]*types.Transaction)
 	}
 	self.queue[from][hash] = tx
-
-	if len(self.queue[from]) > maxQueued {
-		var (
-			worstHash  common.Hash
-			worstNonce uint64
-		)
-		for hash, tx := range self.queue[from] {
-			if tx.Nonce() > worstNonce {
-				worstNonce = tx.Nonce()
-				worstHash = hash
-			}
-		}
-		glog.V(logger.Debug).Infof("Queued tx limit exceeded for %x. Removed worst nonce tx: %x\n", common.PP(from[:]), common.PP(worstHash[:]))
-		delete(self.queue[from], worstHash)
-	}
 }
 
 // addTx will add a transaction to the pending (processable queue) list of transactions
@@ -367,7 +352,16 @@ func (pool *TxPool) checkQueue() {
 		// Find the next consecutive nonce range starting at the
 		// current account nonce.
 		sort.Sort(addq)
-		for _, e := range addq {
+		for i, e := range addq {
+			// start deleting the transactions from the queue if they exceed the limit
+			if i > maxQueued {
+				if glog.V(logger.Debug) {
+					glog.Infof("Queued tx limit exceeded for %s. Tx %s removed\n", common.PP(address[:]), common.PP(e.hash[:]))
+				}
+				delete(pool.queue[address], e.hash)
+				continue
+			}
+
 			if e.AccountNonce > guessedNonce {
 				break
 			}