Skip to content

Commit dbb495f

Browse files
committed
wip - encoder failing to unmarhsal for terminal test run, but NOT in vscode test run..
1 parent 151e945 commit dbb495f

File tree

2 files changed

+32
-47
lines changed

2 files changed

+32
-47
lines changed

mempool/mempool.go

+9-21
Original file line numberDiff line numberDiff line change
@@ -150,20 +150,20 @@ func (p *Pool) handleTransaction(userTxn *BroadcastedTransaction) error {
150150
}
151151
tailValue = nil
152152
}
153-
154153
if err := p.putdbElem(dbTxn, userTxn.Transaction.Hash(), &storageElem{
155154
Txn: *userTxn,
156155
}); err != nil {
157156
return err
158157
}
159-
160158
if tailValue != nil {
161159
// Update old tail to point to the new item
162160
var oldTailElem storageElem
161+
fmt.Println(" - error here")
163162
oldTailElem, err := p.dbElem(dbTxn, tailValue)
164163
if err != nil {
165164
return err
166165
}
166+
fmt.Println(" - error here solved")
167167
oldTailElem.NextHash = userTxn.Transaction.Hash()
168168
if err = p.putdbElem(dbTxn, tailValue, &oldTailElem); err != nil {
169169
return err
@@ -174,11 +174,9 @@ func (p *Pool) handleTransaction(userTxn *BroadcastedTransaction) error {
174174
return err
175175
}
176176
}
177-
178177
if err := p.updateTail(dbTxn, userTxn.Transaction.Hash()); err != nil {
179178
return err
180179
}
181-
182180
pLen, err := p.lenDB(dbTxn)
183181
if err != nil {
184182
return err
@@ -194,18 +192,17 @@ func (p *Pool) Push(userTxn *BroadcastedTransaction) error {
194192
return err
195193
}
196194

197-
// todo: should db overloading block the in-memory mempool??
198195
select {
199196
case p.dbWriteChan <- userTxn:
200197
default:
201198
select {
202199
case _, ok := <-p.dbWriteChan:
203200
if !ok {
204-
return errors.New("transaction pool database write channel is closed")
201+
p.log.Errorw("cannot store user transasction in persistent pool, database write channel is closed")
205202
}
206-
return ErrTxnPoolFull
203+
p.log.Errorw("cannot store user transasction in persistent pool, database is full")
207204
default:
208-
return ErrTxnPoolFull
205+
p.log.Errorw("cannot store user transasction in persistent pool, database is full")
209206
}
210207
}
211208

@@ -300,6 +297,8 @@ func (p *Pool) Len() uint16 {
300297

301298
// Len returns the number of transactions in the persistent pool
302299
func (p *Pool) LenDB() (uint16, error) {
300+
p.wg.Add(1)
301+
defer p.wg.Done()
303302
txn, err := p.db.NewTransaction(false)
304303
if err != nil {
305304
return 0, err
@@ -339,19 +338,6 @@ func (p *Pool) headHash(txn db.Transaction, head *felt.Felt) error {
339338
})
340339
}
341340

342-
func (p *Pool) HeadHash() (*felt.Felt, error) {
343-
txn, err := p.db.NewTransaction(false)
344-
if err != nil {
345-
return nil, err
346-
}
347-
var head *felt.Felt
348-
err = txn.Get(Head.Key(), func(b []byte) error {
349-
head = new(felt.Felt).SetBytes(b)
350-
return nil
351-
})
352-
return head, err
353-
}
354-
355341
func (p *Pool) updateHead(txn db.Transaction, head *felt.Felt) error {
356342
return txn.Set(Head.Key(), head.Marshal())
357343
}
@@ -367,6 +353,8 @@ func (p *Pool) updateTail(txn db.Transaction, tail *felt.Felt) error {
367353
return txn.Set(Tail.Key(), tail.Marshal())
368354
}
369355

356+
// todo : error when unmarshalling the core.Transasction...
357+
// but unmarshalling core.Transaction works fine in TransactionsByBlockNumber...
370358
func (p *Pool) dbElem(txn db.Transaction, itemKey *felt.Felt) (storageElem, error) {
371359
var item storageElem
372360
keyBytes := itemKey.Bytes()

mempool/mempool_test.go

+23-26
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/NethermindEth/juno/mempool"
1313
"github.com/NethermindEth/juno/mocks"
1414
"github.com/NethermindEth/juno/utils"
15-
"github.com/stretchr/testify/assert"
1615
"github.com/stretchr/testify/require"
1716
"go.uber.org/mock/gomock"
1817
)
@@ -50,7 +49,7 @@ func TestMempool(t *testing.T) {
5049
require.NoError(t, err)
5150

5251
l := pool.Len()
53-
assert.Equal(t, uint16(0), l)
52+
require.Equal(t, uint16(0), l)
5453

5554
_, err = pool.Pop()
5655
require.Equal(t, err.Error(), "transaction pool is empty")
@@ -59,7 +58,7 @@ func TestMempool(t *testing.T) {
5958
for i := uint64(1); i < 4; i++ {
6059
senderAddress := new(felt.Felt).SetUint64(i)
6160
state.EXPECT().ContractNonce(senderAddress).Return(new(felt.Felt).SetUint64(0), nil)
62-
assert.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
61+
require.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
6362
Transaction: &core.InvokeTransaction{
6463
TransactionHash: new(felt.Felt).SetUint64(i),
6564
Nonce: new(felt.Felt).SetUint64(1),
@@ -68,23 +67,23 @@ func TestMempool(t *testing.T) {
6867
},
6968
}))
7069
l := pool.Len()
71-
assert.Equal(t, uint16(i), l)
70+
require.Equal(t, uint16(i), l)
7271
}
7372
// consume some (remove 1,2, keep 3)
7473
for i := uint64(1); i < 3; i++ {
7574
txn, err := pool.Pop()
7675
require.NoError(t, err)
77-
assert.Equal(t, i, txn.Transaction.Hash().Uint64())
76+
require.Equal(t, i, txn.Transaction.Hash().Uint64())
7877

7978
l := pool.Len()
80-
assert.Equal(t, uint16(3-i), l)
79+
require.Equal(t, uint16(3-i), l)
8180
}
8281

8382
// push multiple to non empty (push 4,5. now have 3,4,5)
8483
for i := uint64(4); i < 6; i++ {
8584
senderAddress := new(felt.Felt).SetUint64(i)
8685
state.EXPECT().ContractNonce(senderAddress).Return(new(felt.Felt).SetUint64(0), nil)
87-
assert.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
86+
require.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
8887
Transaction: &core.InvokeTransaction{
8988
TransactionHash: new(felt.Felt).SetUint64(i),
9089
Nonce: new(felt.Felt).SetUint64(1),
@@ -93,11 +92,11 @@ func TestMempool(t *testing.T) {
9392
},
9493
}))
9594
l := pool.Len()
96-
assert.Equal(t, uint16(i-2), l)
95+
require.Equal(t, uint16(i-2), l)
9796
}
9897

9998
// push more than max
100-
assert.ErrorIs(t, pool.Push(&mempool.BroadcastedTransaction{
99+
require.ErrorIs(t, pool.Push(&mempool.BroadcastedTransaction{
101100
Transaction: &core.InvokeTransaction{
102101
TransactionHash: new(felt.Felt).SetUint64(123),
103102
},
@@ -107,9 +106,9 @@ func TestMempool(t *testing.T) {
107106
for i := uint64(3); i < 6; i++ {
108107
txn, err := pool.Pop()
109108
require.NoError(t, err)
110-
assert.Equal(t, i, txn.Transaction.Hash().Uint64())
109+
require.Equal(t, i, txn.Transaction.Hash().Uint64())
111110
}
112-
assert.Equal(t, uint16(0), l)
111+
require.Equal(t, uint16(0), l)
113112

114113
_, err = pool.Pop()
115114
require.Equal(t, err.Error(), "transaction pool is empty")
@@ -122,51 +121,50 @@ func TestRestoreMempool(t *testing.T) {
122121
mockCtrl := gomock.NewController(t)
123122
t.Cleanup(mockCtrl.Finish)
124123
state := mocks.NewMockStateHistoryReader(mockCtrl)
125-
testDB, _, err := setupDatabase("testrestoremempool", true)
124+
testDB, dbCloser, err := setupDatabase("testrestoremempool", true)
126125
require.NoError(t, err)
126+
defer dbCloser()
127127

128128
pool, closer, err := mempool.New(testDB, state, 1024, log)
129129
require.NoError(t, err)
130130

131131
// Check both pools are empty
132132
lenDB, err := pool.LenDB()
133133
require.NoError(t, err)
134-
assert.Equal(t, uint16(0), lenDB)
135-
assert.Equal(t, uint16(0), pool.Len())
134+
require.Equal(t, uint16(0), lenDB)
135+
require.Equal(t, uint16(0), pool.Len())
136136

137137
// push multiple transactions to empty mempool (1,2,3)
138138
for i := uint64(1); i < 4; i++ {
139139
senderAddress := new(felt.Felt).SetUint64(i)
140140
state.EXPECT().ContractNonce(senderAddress).Return(new(felt.Felt).SetUint64(0), nil)
141-
assert.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
141+
require.NoError(t, pool.Push(&mempool.BroadcastedTransaction{
142142
Transaction: &core.InvokeTransaction{
143143
TransactionHash: new(felt.Felt).SetUint64(i),
144144
Version: new(core.TransactionVersion).SetUint64(1),
145145
SenderAddress: senderAddress,
146146
Nonce: new(felt.Felt).SetUint64(0),
147147
},
148148
}))
149-
assert.Equal(t, uint16(i), pool.Len())
149+
require.Equal(t, uint16(i), pool.Len())
150150
}
151151

152152
// check the db has stored the transactions
153-
time.Sleep(100 * time.Millisecond)
153+
time.Sleep(4000 * time.Millisecond)
154154
lenDB, err = pool.LenDB()
155155
require.NoError(t, err)
156-
assert.Equal(t, uint16(3), lenDB)
157-
156+
require.Equal(t, uint16(3), lenDB)
158157
// Close the mempool
159158
require.NoError(t, closer())
160-
testDB, dbCloser, err := setupDatabase("testrestoremempool", false)
159+
testDB, _, err = setupDatabase("testrestoremempool", false)
161160
require.NoError(t, err)
162-
defer dbCloser()
163161

164162
poolRestored, closer2, err := mempool.New(testDB, state, 1024, log)
165163
require.NoError(t, err)
166164
lenDB, err = poolRestored.LenDB()
167165
require.NoError(t, err)
168-
assert.Equal(t, uint16(3), lenDB)
169-
assert.Equal(t, uint16(3), poolRestored.Len())
166+
require.Equal(t, uint16(3), lenDB)
167+
require.Equal(t, uint16(3), poolRestored.Len())
170168

171169
// Remove transactions
172170
_, err = poolRestored.Pop()
@@ -175,15 +173,14 @@ func TestRestoreMempool(t *testing.T) {
175173
require.NoError(t, err)
176174
lenDB, err = poolRestored.LenDB()
177175
require.NoError(t, err)
178-
assert.Equal(t, uint16(3), lenDB)
179-
assert.Equal(t, uint16(1), poolRestored.Len())
176+
require.Equal(t, uint16(3), lenDB)
177+
require.Equal(t, uint16(1), poolRestored.Len())
180178

181179
require.NoError(t, closer2())
182180
}
183181

184182
func TestWait(t *testing.T) {
185183
log := utils.NewNopZapLogger()
186-
187184
testDB := pebble.NewMemTest(t)
188185
mockCtrl := gomock.NewController(t)
189186
t.Cleanup(mockCtrl.Finish)

0 commit comments

Comments
 (0)