Skip to content

Commit

Permalink
wip - fix closer
Browse files Browse the repository at this point in the history
  • Loading branch information
rianhughes committed Jan 7, 2025
1 parent 484570e commit bd7e5a9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
9 changes: 5 additions & 4 deletions mempool/mempool.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,9 @@ func New(db db.DB, maxNumTxns uint16) (*Pool, func() error, error) {
closer := func() error {
close(pool.dbWriteChan)
pool.wg.Wait()
// Todo: should uncomment.
// if err := pool.db.Close(); err != nil {
// return fmt.Errorf("failed to close database: %v", err)
// }
if err := pool.db.Close(); err != nil {
return fmt.Errorf("failed to close mempool database: %v", err)
}
return nil
}
return pool, closer, nil
Expand Down Expand Up @@ -257,11 +256,13 @@ func (p *Pool) Len() uint16 {
return p.txnList.len
}

// Len returns the number of transactions in the persistent pool
func (p *Pool) LenDB() (uint16, error) {
txn, err := p.db.NewTransaction(false)
if err != nil {
return 0, err
}
defer txn.Discard()
return p.lenDB(txn)
}

Expand Down
29 changes: 15 additions & 14 deletions mempool/mempool_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package mempool_test

import (
"fmt"
"os"
"testing"
"time"
Expand All @@ -16,11 +15,13 @@ import (
"github.com/stretchr/testify/require"
)

func setupDatabase() (*db.DB, func(), error) {
func setupDatabase(dltExisting bool) (*db.DB, func(), error) {
dbPath := "testmempool"
if _, err := os.Stat(dbPath); err == nil {
if err := os.RemoveAll(dbPath); err != nil {
return nil, nil, err
if dltExisting {
if err := os.RemoveAll(dbPath); err != nil {
return nil, nil, err
}
}
} else if !os.IsNotExist(err) {
return nil, nil, err
Expand All @@ -37,8 +38,10 @@ func setupDatabase() (*db.DB, func(), error) {
}

func TestMempool(t *testing.T) {
testDB := pebble.NewMemTest(t)
pool, closer, err := mempool.New(testDB, 1024)
testDB, dbCloser, err := setupDatabase(true)
require.NoError(t, err)
defer dbCloser()
pool, closer, err := mempool.New(*testDB, 1024)
defer closer()
require.NoError(t, err)
blockchain.RegisterCoreTypesToEncoder()

Check failure on line 47 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / lint

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 47 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (ubuntu-latest)

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 47 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (macos-latest)

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 47 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (ubuntu-arm64-4-core)

undefined: blockchain.RegisterCoreTypesToEncoder
Expand All @@ -64,7 +67,6 @@ func TestMempool(t *testing.T) {
// consume some (remove 1,2, keep 3)
for i := uint64(1); i < 3; i++ {
txn, err := pool.Pop()
fmt.Println("txn", txn.Transaction.Hash().String())
require.NoError(t, err)
assert.Equal(t, i, txn.Transaction.Hash().Uint64())

Expand Down Expand Up @@ -99,13 +101,12 @@ func TestMempool(t *testing.T) {
func TestRestoreMempool(t *testing.T) {
blockchain.RegisterCoreTypesToEncoder()

Check failure on line 102 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / lint

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 102 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (ubuntu-latest)

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 102 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (macos-latest)

undefined: blockchain.RegisterCoreTypesToEncoder

Check failure on line 102 in mempool/mempool_test.go

View workflow job for this annotation

GitHub Actions / Run Tests (ubuntu-arm64-4-core)

undefined: blockchain.RegisterCoreTypesToEncoder

testDB, dbCloser, err := setupDatabase()
defer dbCloser()

testDB, _, err := setupDatabase(true)
require.NoError(t, err)
pool, closer, err := mempool.New(*testDB, 1024)
require.NoError(t, err)

// Check both pools are empty
lenDB, err := pool.LenDB()
require.NoError(t, err)
assert.Equal(t, uint16(0), lenDB)
Expand All @@ -121,24 +122,24 @@ func TestRestoreMempool(t *testing.T) {
assert.Equal(t, uint16(i), pool.Len())
}

// Todo: reads should block??
fmt.Println(pool.HeadHash())
// check the db has stored the transactions
time.Sleep(100 * time.Millisecond)
fmt.Println(pool.HeadHash())
lenDB, err = pool.LenDB()
require.NoError(t, err)
assert.Equal(t, uint16(3), lenDB)

// Close the mempool
require.NoError(t, closer())
testDB, dbCloser, err := setupDatabase(false)
require.NoError(t, err)
defer dbCloser()

poolRestored, closer2, err := mempool.New(*testDB, 1024)
require.NoError(t, err)
lenDB, err = poolRestored.LenDB()
require.NoError(t, err)
assert.Equal(t, uint16(3), lenDB)
assert.Equal(t, uint16(3), poolRestored.Len())
fmt.Println(poolRestored.HeadHash())

// Remove transactions
_, err = poolRestored.Pop()
Expand Down

0 comments on commit bd7e5a9

Please sign in to comment.