From 3d5a2ab587a5c99bcd9927153518bc522a1e09bf Mon Sep 17 00:00:00 2001 From: Arnau Date: Thu, 12 Sep 2024 15:03:54 +0200 Subject: [PATCH] lint --- bridgesync/processor.go | 13 ++++++++++--- bridgesync/processor_test.go | 12 ++++++------ db/meddler.go | 29 +++++++++++++++++++---------- l1infotreesync/processor.go | 6 +++++- lastgersync/evmdownloader.go | 4 ++-- test/helpers/aggoracle_e2e.go | 4 +++- tree/appendonlytree.go | 5 +++-- tree/tree.go | 8 +++++--- tree/updatabletree.go | 3 ++- 9 files changed, 55 insertions(+), 29 deletions(-) diff --git a/bridgesync/processor.go b/bridgesync/processor.go index 80ce479a..53d1b044 100644 --- a/bridgesync/processor.go +++ b/bridgesync/processor.go @@ -124,8 +124,11 @@ func (p *processor) GetBridges( if err != nil { return nil, err } - - defer tx.Rollback() + defer func() { + if err := tx.Rollback(); err != nil { + log.Warnf("error rolling back tx: %v", err) + } + }() if err = p.isBlockProcessed(tx, toBlock); err != nil { return nil, err @@ -149,7 +152,11 @@ func (p *processor) GetClaims( if err != nil { return nil, err } - defer tx.Rollback() + defer func() { + if err := tx.Rollback(); err != nil { + log.Warnf("error rolling back tx: %v", err) + } + }() if err = p.isBlockProcessed(tx, toBlock); err != nil { return nil, err diff --git a/bridgesync/processor_test.go b/bridgesync/processor_test.go index 71ad5b46..fd16f32c 100644 --- a/bridgesync/processor_test.go +++ b/bridgesync/processor_test.go @@ -397,7 +397,7 @@ var ( type processAction interface { method() string desc() string - execute(t *testing.T) + execute(t *testing.T) //nolint:thelper } // GetClaims @@ -420,7 +420,7 @@ func (a *getClaims) desc() string { return a.description } -func (a *getClaims) execute(t *testing.T) { +func (a *getClaims) execute(t *testing.T) { //nolint:thelper actualEvents, actualErr := a.p.GetClaims(a.ctx, a.fromBlock, a.toBlock) require.Equal(t, a.expectedClaims, actualEvents) require.Equal(t, a.expectedErr, actualErr) @@ -446,7 +446,7 @@ func (a *getBridges) desc() string { return a.description } -func (a *getBridges) execute(t *testing.T) { +func (a *getBridges) execute(t *testing.T) { //nolint:thelper actualEvents, actualErr := a.p.GetBridges(a.ctx, a.fromBlock, a.toBlock) require.Equal(t, a.expectedBridges, actualEvents) require.Equal(t, a.expectedErr, actualErr) @@ -470,7 +470,7 @@ func (a *getLastProcessedBlockAction) desc() string { return a.description } -func (a *getLastProcessedBlockAction) execute(t *testing.T) { +func (a *getLastProcessedBlockAction) execute(t *testing.T) { //nolint:thelper t.Helper() actualLastProcessedBlock, actualErr := a.p.GetLastProcessedBlock(a.ctx) @@ -495,7 +495,7 @@ func (a *reorgAction) desc() string { return a.description } -func (a *reorgAction) execute(t *testing.T) { +func (a *reorgAction) execute(t *testing.T) { //nolint:thelper t.Helper() actualErr := a.p.Reorg(context.Background(), a.firstReorgedBlock) @@ -519,7 +519,7 @@ func (a *processBlockAction) desc() string { return a.description } -func (a *processBlockAction) execute(t *testing.T) { +func (a *processBlockAction) execute(t *testing.T) { //nolint:thelper t.Helper() actualErr := a.p.ProcessBlock(context.Background(), a.block) diff --git a/db/meddler.go b/db/meddler.go index 41527526..90071916 100644 --- a/db/meddler.go +++ b/db/meddler.go @@ -21,16 +21,15 @@ func initMeddler() { meddler.Register("hash", HashMeddler{}) } -func SQLiteErr(err error) (sqlite.Error, bool) { - if sqliteErr, ok := err.(sqlite.Error); ok { +func SQLiteErr(err error) (*sqlite.Error, bool) { + sqliteErr := &sqlite.Error{} + if ok := errors.As(err, sqliteErr); ok { return sqliteErr, true } if driverErr, ok := meddler.DriverErr(err); ok { - if sqliteErr, ok := driverErr.(sqlite.Error); ok { - return sqliteErr, true - } + return sqliteErr, errors.As(driverErr, sqliteErr) } - return sqlite.Error{}, false + return sqliteErr, false } // SliceToSlicePtrs converts any []Foo to []*Foo @@ -68,7 +67,10 @@ func (b BigIntMeddler) PreRead(fieldAddr interface{}) (scanTarget interface{}, e // PostRead is called after a Scan operation for fields that have the BigIntMeddler func (b BigIntMeddler) PostRead(fieldPtr, scanTarget interface{}) error { - ptr := scanTarget.(*string) + ptr, ok := scanTarget.(*string) + if !ok { + return errors.New("scanTarget is not *string") + } if ptr == nil { return fmt.Errorf("BigIntMeddler.PostRead: nil pointer") } @@ -76,7 +78,8 @@ func (b BigIntMeddler) PostRead(fieldPtr, scanTarget interface{}) error { if !ok { return errors.New("fieldPtr is not *big.Int") } - *field, ok = new(big.Int).SetString(*ptr, 10) + decimal := 10 + *field, ok = new(big.Int).SetString(*ptr, decimal) if !ok { return fmt.Errorf("big.Int.SetString failed on \"%v\"", *ptr) } @@ -104,7 +107,10 @@ func (b MerkleProofMeddler) PreRead(fieldAddr interface{}) (scanTarget interface // PostRead is called after a Scan operation for fields that have the ProofMeddler func (b MerkleProofMeddler) PostRead(fieldPtr, scanTarget interface{}) error { - ptr := scanTarget.(*string) + ptr, ok := scanTarget.(*string) + if !ok { + return errors.New("scanTarget is not *string") + } if ptr == nil { return errors.New("ProofMeddler.PostRead: nil pointer") } @@ -147,7 +153,10 @@ func (b HashMeddler) PreRead(fieldAddr interface{}) (scanTarget interface{}, err // PostRead is called after a Scan operation for fields that have the ProofMeddler func (b HashMeddler) PostRead(fieldPtr, scanTarget interface{}) error { - ptr := scanTarget.(*string) + ptr, ok := scanTarget.(*string) + if !ok { + return errors.New("scanTarget is not *string") + } if ptr == nil { return fmt.Errorf("HashMeddler.PostRead: nil pointer") } diff --git a/l1infotreesync/processor.go b/l1infotreesync/processor.go index 5f946f15..47e5dd5e 100644 --- a/l1infotreesync/processor.go +++ b/l1infotreesync/processor.go @@ -130,7 +130,11 @@ func (p *processor) GetLatestInfoUntilBlock(ctx context.Context, blockNum uint64 if err != nil { return nil, err } - defer tx.Rollback() + defer func() { + if err := tx.Rollback(); err != nil { + log.Warnf("error rolling back tx: %v", err) + } + }() lpb, err := p.getLastProcessedBlockWithTx(tx) if err != nil { diff --git a/lastgersync/evmdownloader.go b/lastgersync/evmdownloader.go index 9071998f..91e05c7a 100644 --- a/lastgersync/evmdownloader.go +++ b/lastgersync/evmdownloader.go @@ -129,11 +129,11 @@ func (d *downloader) Download(ctx context.Context, fromBlock uint64, downloadedC func (d *downloader) getGERsFromIndex(ctx context.Context, fromL1InfoTreeIndex uint32) ([]Event, error) { lastRoot, err := d.l1InfoTreesync.GetLastL1InfoTreeRoot(ctx) - if err == tree.ErrNotFound { + if errors.Is(err, tree.ErrNotFound) { return nil, nil } if err != nil { - return nil, fmt.Errorf("error calling GetLastL1InfoTreeRoot: %v", err) + return nil, fmt.Errorf("error calling GetLastL1InfoTreeRoot: %w", err) } gers := []Event{} diff --git a/test/helpers/aggoracle_e2e.go b/test/helpers/aggoracle_e2e.go index 3c72d3cc..46b2e6cd 100644 --- a/test/helpers/aggoracle_e2e.go +++ b/test/helpers/aggoracle_e2e.go @@ -113,7 +113,9 @@ func CommonSetup(t *testing.T) ( require.NoError(t, err) // Syncer dbPathSyncer := path.Join(t.TempDir(), "file::memory:?cache=shared") - syncer, err := l1infotreesync.New(ctx, dbPathSyncer, gerL1Addr, common.Address{}, 10, etherman.LatestBlock, reorg, l1Client.Client(), time.Millisecond, 0, 100*time.Millisecond, 3) + maxRetries := 3 + syncBlockChunkSize := 10 + syncer, err := l1infotreesync.New(ctx, dbPathSyncer, gerL1Addr, common.Address{}, syncBlockChunkSize, etherman.LatestBlock, reorg, l1Client.Client(), time.Millisecond, 0, 100*time.Millisecond, maxRetries) require.NoError(t, err) go syncer.Start(ctx) diff --git a/tree/appendonlytree.go b/tree/appendonlytree.go index 575240c7..d527a819 100644 --- a/tree/appendonlytree.go +++ b/tree/appendonlytree.go @@ -2,6 +2,7 @@ package tree import ( "database/sql" + "errors" "fmt" "github.com/0xPolygon/cdk/db" @@ -81,7 +82,7 @@ func (t *AppendOnlyTree) initCache(tx *db.Tx) error { siblings := [types.DefaultHeight]common.Hash{} lastRoot, err := t.getLastRootWithTx(tx) if err != nil { - if err == ErrNotFound { + if errors.Is(err, ErrNotFound) { t.lastIndex = -1 t.lastLeftCache = siblings return nil @@ -96,7 +97,7 @@ func (t *AppendOnlyTree) initCache(tx *db.Tx) error { currentNode, err := t.getRHTNode(tx, currentNodeHash) if err != nil { return fmt.Errorf( - "error getting node %s from the RHT at height %d with root %s: %v", + "error getting node %s from the RHT at height %d with root %s: %w", currentNodeHash.Hex(), h, lastRoot.Hash.Hex(), err, ) } diff --git a/tree/tree.go b/tree/tree.go index 4cd94991..6d10834b 100644 --- a/tree/tree.go +++ b/tree/tree.go @@ -9,6 +9,7 @@ import ( "github.com/0xPolygon/cdk/db" "github.com/0xPolygon/cdk/tree/types" "github.com/ethereum/go-ethereum/common" + "github.com/mattn/go-sqlite3" "github.com/russross/meddler" "golang.org/x/crypto/sha3" ) @@ -153,10 +154,11 @@ func generateZeroHashes(height uint8) []common.Hash { } func (t *Tree) storeNodes(tx *db.Tx, nodes []types.TreeNode) error { - for _, node := range nodes { - if err := meddler.Insert(tx, t.rhtTable, &node); err != nil { + for i := 0; i < len(nodes); i++ { + if err := meddler.Insert(tx, t.rhtTable, &nodes[i]); err != nil { if sqliteErr, ok := db.SQLiteErr(err); ok { - if sqliteErr.ExtendedCode == 1555 { // 1555 is the error code for primary key violation + uniqueConstraint := sqlite3.ErrNoExtended(1555) // 1555 is the error code for primary key violation + if sqliteErr.ExtendedCode == uniqueConstraint { // ignore repeated entries. This is likely to happen due to not // cleaning RHT when reorg continue diff --git a/tree/updatabletree.go b/tree/updatabletree.go index 7bd901f3..4e9f753f 100644 --- a/tree/updatabletree.go +++ b/tree/updatabletree.go @@ -2,6 +2,7 @@ package tree import ( "database/sql" + "errors" "github.com/0xPolygon/cdk/db" "github.com/0xPolygon/cdk/tree/types" @@ -26,7 +27,7 @@ func (t *UpdatableTree) UpsertLeaf(tx *db.Tx, blockNum, blockPosition uint64, le var rootHash common.Hash root, err := t.getLastRootWithTx(tx) if err != nil { - if err == ErrNotFound { + if errors.Is(err, ErrNotFound) { rootHash = t.zeroHashes[types.DefaultHeight] } else { return err