Skip to content

Commit 656f3ad

Browse files
authored
Merge pull request #2020 from onetechnical/onetechnical/relbeta2.5.3
go-algorand 2.5.3-beta
2 parents 43373ba + 2a37f65 commit 656f3ad

File tree

15 files changed

+187
-36
lines changed

15 files changed

+187
-36
lines changed

buildnumber.dat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2
1+
3

data/pools/transactionPool.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func MakeTransactionPool(ledger *ledger.Ledger, cfg config.Local, log logging.Lo
109109
}
110110
pool.cond.L = &pool.mu
111111
pool.assemblyCond.L = &pool.assemblyMu
112-
pool.recomputeBlockEvaluator(make(map[transactions.Txid]basics.Round))
112+
pool.recomputeBlockEvaluator(make(map[transactions.Txid]basics.Round), 0)
113113
return &pool
114114
}
115115

@@ -162,7 +162,7 @@ func (pool *TransactionPool) Reset() {
162162
pool.numPendingWholeBlocks = 0
163163
pool.pendingBlockEvaluator = nil
164164
pool.statusCache.reset()
165-
pool.recomputeBlockEvaluator(make(map[transactions.Txid]basics.Round))
165+
pool.recomputeBlockEvaluator(make(map[transactions.Txid]basics.Round), 0)
166166
}
167167

168168
// NumExpired returns the number of transactions that expired at the
@@ -468,10 +468,10 @@ func (pool *TransactionPool) OnNewBlock(block bookkeeping.Block, delta ledgercor
468468
var knownCommitted uint
469469
var unknownCommitted uint
470470

471-
commitedTxids := delta.Txids
471+
committedTxids := delta.Txids
472472
if pool.logProcessBlockStats {
473473
pool.pendingMu.RLock()
474-
for txid := range commitedTxids {
474+
for txid := range committedTxids {
475475
if _, ok := pool.pendingTxids[txid]; ok {
476476
knownCommitted++
477477
} else {
@@ -512,7 +512,7 @@ func (pool *TransactionPool) OnNewBlock(block bookkeeping.Block, delta ledgercor
512512
// Recompute the pool by starting from the new latest block.
513513
// This has the side-effect of discarding transactions that
514514
// have been committed (or that are otherwise no longer valid).
515-
stats = pool.recomputeBlockEvaluator(commitedTxids)
515+
stats = pool.recomputeBlockEvaluator(committedTxids, knownCommitted)
516516
}
517517

518518
stats.KnownCommittedCount = knownCommitted
@@ -625,7 +625,7 @@ func (pool *TransactionPool) addToPendingBlockEvaluator(txgroup []transactions.S
625625
// recomputeBlockEvaluator constructs a new BlockEvaluator and feeds all
626626
// in-pool transactions to it (removing any transactions that are rejected
627627
// by the BlockEvaluator). Expects that the pool.mu mutex would be already taken.
628-
func (pool *TransactionPool) recomputeBlockEvaluator(committedTxIds map[transactions.Txid]basics.Round) (stats telemetryspec.ProcessBlockMetrics) {
628+
func (pool *TransactionPool) recomputeBlockEvaluator(committedTxIds map[transactions.Txid]basics.Round, knownCommitted uint) (stats telemetryspec.ProcessBlockMetrics) {
629629
pool.pendingBlockEvaluator = nil
630630

631631
latest := pool.ledger.Latest()
@@ -665,7 +665,11 @@ func (pool *TransactionPool) recomputeBlockEvaluator(committedTxIds map[transact
665665

666666
next := bookkeeping.MakeBlock(prev)
667667
pool.numPendingWholeBlocks = 0
668-
pool.pendingBlockEvaluator, err = pool.ledger.StartEvaluator(next.BlockHeader, pendingCount)
668+
hint := pendingCount - int(knownCommitted)
669+
if hint < 0 || int(knownCommitted) < 0 {
670+
hint = 0
671+
}
672+
pool.pendingBlockEvaluator, err = pool.ledger.StartEvaluator(next.BlockHeader, hint)
669673
if err != nil {
670674
pool.log.Warnf("TransactionPool.recomputeBlockEvaluator: cannot start evaluator: %v", err)
671675
return

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/algorand/graphtrace v0.0.0-20201117160756-e524ed1a6f64
99
github.com/algorand/msgp v1.1.47
1010
github.com/algorand/oapi-codegen v1.3.5-algorand5
11-
github.com/algorand/websocket v1.4.1
11+
github.com/algorand/websocket v1.4.2
1212
github.com/aws/aws-sdk-go v1.16.5
1313
github.com/cpuguy83/go-md2man v1.0.8 // indirect
1414
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ github.com/algorand/msgp v1.1.47 h1:xeU6G/Mb1iudJe4L5X38YrOY+VHhvHQDZXxyXYHTzOw=
3535
github.com/algorand/msgp v1.1.47/go.mod h1:LtOntbYiCHj/Sl/Sqxtf8CZOrDt2a8Dv3tLaS6mcnUE=
3636
github.com/algorand/oapi-codegen v1.3.5-algorand5 h1:y576Ca2/guQddQrQA7dtL5KcOx5xQgPeIupiuFMGyCI=
3737
github.com/algorand/oapi-codegen v1.3.5-algorand5/go.mod h1:/k0Ywn0lnt92uBMyE+yiRf/Wo3/chxHHsAfenD09EbY=
38-
github.com/algorand/websocket v1.4.1 h1:FPoNHI8i2VZWZzhCscY8JTzsAE7Vv73753cMbzb3udk=
39-
github.com/algorand/websocket v1.4.1/go.mod h1:0nFSn+xppw/GZS9hgWPS3b8/4FcA3Pj7XQxm+wqHGx8=
38+
github.com/algorand/websocket v1.4.2 h1:zMB7ukz+c7tcef8rVqmKQTv6KQtxXtCFuiAqKaE7n9I=
39+
github.com/algorand/websocket v1.4.2/go.mod h1:0nFSn+xppw/GZS9hgWPS3b8/4FcA3Pj7XQxm+wqHGx8=
4040
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
4141
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
4242
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=

ledger/appcow.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ func MakeDebugBalances(l ledgerForCowBase, round basics.Round, proto protocol.Co
410410
// Execution happens in a child cow and all modifications are merged into parent if the program passes
411411
func (cb *roundCowState) StatefulEval(params logic.EvalParams, aidx basics.AppIndex, program []byte) (pass bool, evalDelta basics.EvalDelta, err error) {
412412
// Make a child cow to eval our program in
413-
calf := cb.child()
413+
calf := cb.child(1)
414414
params.Ledger, err = newLogicLedger(calf, aidx)
415415
if err != nil {
416416
return false, basics.EvalDelta{}, err

ledger/appcow_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ func TestCowStorage(t *testing.T) {
305305
// Make a child
306306
if childDepth < maxChildDepth && rand.Float32() < 0.1 {
307307
lastParent = cow
308-
cow = cow.child()
308+
cow = cow.child(1)
309309
childDepth++
310310
}
311311

ledger/apply/asset.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ import (
2424
)
2525

2626
func cloneAssetHoldings(m map[basics.AssetIndex]basics.AssetHolding) map[basics.AssetIndex]basics.AssetHolding {
27-
res := make(map[basics.AssetIndex]basics.AssetHolding)
27+
res := make(map[basics.AssetIndex]basics.AssetHolding, len(m))
2828
for id, val := range m {
2929
res[id] = val
3030
}
3131
return res
3232
}
3333

3434
func cloneAssetParams(m map[basics.AssetIndex]basics.AssetParams) map[basics.AssetIndex]basics.AssetParams {
35-
res := make(map[basics.AssetIndex]basics.AssetParams)
35+
res := make(map[basics.AssetIndex]basics.AssetParams, len(m))
3636
for id, val := range m {
3737
res[id] = val
3838
}

ledger/apply/asset_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package apply
1818

1919
import (
20+
"math/rand"
2021
"testing"
2122

2223
"github.com/stretchr/testify/require"
@@ -97,3 +98,19 @@ func TestAssetTransfer(t *testing.T) {
9798
require.Equal(t, dstAmount-toSend, addrs[cls].Assets[1].Amount)
9899
}
99100
}
101+
102+
var benchTotal int = 0
103+
104+
func BenchmarkAssetCloning(b *testing.B) {
105+
const numAssets = 800
106+
assets := make(map[basics.AssetIndex]basics.AssetHolding, numAssets)
107+
for j := 0; j < numAssets; j++ {
108+
aidx := basics.AssetIndex(rand.Int63n(100000000))
109+
assets[aidx] = basics.AssetHolding{Amount: uint64(aidx)}
110+
}
111+
b.ResetTimer()
112+
for i := 0; i < b.N; i++ {
113+
clone := cloneAssetHoldings(assets)
114+
benchTotal += len(clone) // make sure the compiler does not optimize out cloneAssetHoldings call
115+
}
116+
}

ledger/cow.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,12 @@ func (cb *roundCowState) setCompactCertNext(rnd basics.Round) {
195195
cb.mods.CompactCertNext = rnd
196196
}
197197

198-
func (cb *roundCowState) child() *roundCowState {
198+
func (cb *roundCowState) child(hint int) *roundCowState {
199199
return &roundCowState{
200200
lookupParent: cb,
201201
commitParent: cb,
202202
proto: cb.proto,
203-
mods: ledgercore.MakeStateDelta(cb.mods.Hdr, cb.mods.PrevTimestamp, 1),
203+
mods: ledgercore.MakeStateDelta(cb.mods.Hdr, cb.mods.PrevTimestamp, hint),
204204
sdeltas: make(map[basics.Address]map[storagePtr]*storageDelta),
205205
}
206206
}

ledger/cow_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func TestCowBalance(t *testing.T) {
105105
c0 := makeRoundCowState(&ml, bookkeeping.BlockHeader{}, 0, 0)
106106
checkCow(t, c0, accts0)
107107

108-
c1 := c0.child()
108+
c1 := c0.child(0)
109109
checkCow(t, c0, accts0)
110110
checkCow(t, c1, accts0)
111111

@@ -114,7 +114,7 @@ func TestCowBalance(t *testing.T) {
114114
checkCow(t, c0, accts0)
115115
checkCow(t, c1, accts1)
116116

117-
c2 := c1.child()
117+
c2 := c1.child(0)
118118
checkCow(t, c0, accts0)
119119
checkCow(t, c1, accts1)
120120
checkCow(t, c2, accts1)

0 commit comments

Comments
 (0)