Skip to content

Commit

Permalink
ARCO-156: correctly release db resources (#589)
Browse files Browse the repository at this point in the history
  • Loading branch information
arkadiuszos4chain authored Sep 24, 2024
1 parent 78381f8 commit c453594
Showing 7 changed files with 17 additions and 9 deletions.
2 changes: 2 additions & 0 deletions internal/blocktx/store/postgresql/get_block_gaps.go
Original file line number Diff line number Diff line change
@@ -33,6 +33,8 @@ func (p *PostgreSQL) GetBlockGaps(ctx context.Context, blockHeightRange int) ([]
if err != nil {
return nil, err
}
defer rows.Close()

blockGaps := make([]*store.BlockGap, 0)
for rows.Next() {
var height uint64
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@ func (p *PostgreSQL) GetMinedTransactions(ctx context.Context, hashes []*chainha
if err != nil {
return nil, err
}
defer rows.Close()

for rows.Next() {
var txHash []byte
4 changes: 2 additions & 2 deletions internal/blocktx/store/postgresql/postgres.go
Original file line number Diff line number Diff line change
@@ -67,10 +67,10 @@ func (p *PostgreSQL) Close() error {
}

func (p *PostgreSQL) Ping(ctx context.Context) error {
_, err := p.db.QueryContext(ctx, "SELECT 1;")
r, err := p.db.QueryContext(ctx, "SELECT 1;")
if err != nil {
return err
}

return nil
return r.Close()
}
1 change: 1 addition & 0 deletions internal/blocktx/store/postgresql/register_transactions.go
Original file line number Diff line number Diff line change
@@ -25,6 +25,7 @@ func (p *PostgreSQL) RegisterTransactions(ctx context.Context, txHashes [][]byte
if err != nil {
return nil, errors.Join(store.ErrFailedToInsertTransactions, err)
}
defer rows.Close()

updatedTxs := make([]*chainhash.Hash, 0)
for rows.Next() {
1 change: 1 addition & 0 deletions internal/blocktx/store/postgresql/set_block_processing.go
Original file line number Diff line number Diff line change
@@ -71,6 +71,7 @@ func (p *PostgreSQL) GetBlockHashesProcessingInProgress(ctx context.Context, pro
if err != nil {
return nil, err
}
defer rows.Close()

hashes := make([]*chainhash.Hash, 0)

10 changes: 7 additions & 3 deletions internal/metamorph/store/postgresql/postgres.go
Original file line number Diff line number Diff line change
@@ -547,15 +547,16 @@ func (p *PostgreSQL) GetSeenOnNetwork(ctx context.Context, since time.Time, unti
}
return nil, err
}
defer rows.Close()

res, err := getStoreDataFromRows(rows)

if err != nil {
if rollBackErr := tx.Rollback(); rollBackErr != nil {
return nil, errors.Join(err, fmt.Errorf("failed to rollback: %v", rollBackErr))
}
return nil, err
}
defer rows.Close()

err = tx.Commit()
if err != nil {
@@ -745,6 +746,7 @@ func (p *PostgreSQL) UpdateDoubleSpend(ctx context.Context, updates []store.Upda
defer rows.Close()

res, err := getStoreDataFromRows(rows)

if err != nil {
if rollbackErr := tx.Rollback(); rollbackErr != nil {
return nil, errors.Join(err, fmt.Errorf("failed to rollback: %v", rollbackErr))
@@ -828,8 +830,10 @@ func (p *PostgreSQL) UpdateMined(ctx context.Context, txsBlocks []*blocktx_api.T
}
return nil, err
}
defer rows.Close()

rejectedResponses := updateDoubleSpendRejected(ctx, rows, tx)
competingTxsData := getCompetingTxsFromRows(rows)
rejectedResponses := updateDoubleSpendRejected(ctx, competingTxsData, tx)

rows, err = tx.QueryContext(ctx, qBulkUpdate, metamorph_api.Status_MINED, p.now(), pq.Array(txHashes), pq.Array(blockHashes), pq.Array(blockHeights), pq.Array(merklePaths))
if err != nil {
@@ -838,8 +842,8 @@ func (p *PostgreSQL) UpdateMined(ctx context.Context, txsBlocks []*blocktx_api.T
}
return nil, err
}
defer rows.Close()

defer rows.Close()
res, err := getStoreDataFromRows(rows)
if err != nil {
if rollBackErr := tx.Rollback(); rollBackErr != nil {
7 changes: 3 additions & 4 deletions internal/metamorph/store/postgresql/postgres_helpers.go
Original file line number Diff line number Diff line change
@@ -4,11 +4,12 @@ import (
"context"
"database/sql"
"encoding/json"
"strings"

"github.com/bitcoin-sv/arc/internal/metamorph/metamorph_api"
"github.com/bitcoin-sv/arc/internal/metamorph/store"
"github.com/lib/pq"
"github.com/libsv/go-p2p/chaincfg/chainhash"
"strings"
)

type competingTxsData struct {
@@ -157,7 +158,7 @@ func getCompetingTxsFromRows(rows *sql.Rows) []competingTxsData {
return dbData
}

func updateDoubleSpendRejected(ctx context.Context, rows *sql.Rows, tx *sql.Tx) []*store.StoreData {
func updateDoubleSpendRejected(ctx context.Context, competingTxsData []competingTxsData, tx *sql.Tx) []*store.StoreData {
qRejectDoubleSpends := `
UPDATE metamorph.transactions t
SET
@@ -184,8 +185,6 @@ func updateDoubleSpendRejected(ctx context.Context, rows *sql.Rows, tx *sql.Tx)
`
rejectReason := "double spend attempted"

competingTxsData := getCompetingTxsFromRows(rows)

rejectedCompetingTxs := make([][]byte, 0)
for _, tx := range competingTxsData {
for _, competingTx := range tx.competingTxs {

0 comments on commit c453594

Please sign in to comment.