feat: add metrics in L1 message iterator (#527)

* feat: add metrics in L1 message iterator

* add L1 message size metric
This commit is contained in:
Péter Garamvölgyi 2023-10-01 14:48:59 +02:00 committed by GitHub
parent fe8232a40f
commit 751dbda234
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 4 deletions

View file

@ -4,14 +4,26 @@ import (
"bytes" "bytes"
"encoding/binary" "encoding/binary"
"math/big" "math/big"
"time"
"unsafe"
"github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/core/types"
"github.com/scroll-tech/go-ethereum/ethdb" "github.com/scroll-tech/go-ethereum/ethdb"
"github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/log"
"github.com/scroll-tech/go-ethereum/metrics"
"github.com/scroll-tech/go-ethereum/rlp" "github.com/scroll-tech/go-ethereum/rlp"
) )
var (
// L1 message iterator metrics
iteratorNextCalledCounter = metrics.NewRegisteredCounter("rawdb/l1_message/iterator/next_called", nil)
iteratorInnerNextCalledCounter = metrics.NewRegisteredCounter("rawdb/l1_message/iterator/inner_next_called", nil)
iteratorLengthMismatchCounter = metrics.NewRegisteredCounter("rawdb/l1_message/iterator/length_mismatch", nil)
iteratorNextDurationTimer = metrics.NewRegisteredTimer("rawdb/l1_message/iterator/next_time", nil)
iteratorL1MessageSizeGauge = metrics.NewRegisteredGauge("rawdb/l1_message/size", nil)
)
// WriteSyncedL1BlockNumber writes the highest synced L1 block number to the database. // WriteSyncedL1BlockNumber writes the highest synced L1 block number to the database.
func WriteSyncedL1BlockNumber(db ethdb.KeyValueWriter, L1BlockNumber uint64) { func WriteSyncedL1BlockNumber(db ethdb.KeyValueWriter, L1BlockNumber uint64) {
value := big.NewInt(0).SetUint64(L1BlockNumber).Bytes() value := big.NewInt(0).SetUint64(L1BlockNumber).Bytes()
@ -148,10 +160,20 @@ func IterateL1MessagesFrom(db ethdb.Database, fromQueueIndex uint64) L1MessageIt
// It returns false when the iterator is exhausted. // It returns false when the iterator is exhausted.
// TODO: Consider reading items in batches. // TODO: Consider reading items in batches.
func (it *L1MessageIterator) Next() bool { func (it *L1MessageIterator) Next() bool {
iteratorNextCalledCounter.Inc(1)
defer func(t0 time.Time) {
iteratorNextDurationTimer.Update(time.Since(t0))
}(time.Now())
for it.inner.Next() { for it.inner.Next() {
iteratorInnerNextCalledCounter.Inc(1)
key := it.inner.Key() key := it.inner.Key()
if len(key) == it.keyLength { if len(key) == it.keyLength {
return true return true
} else {
iteratorLengthMismatchCounter.Inc(1)
} }
} }
return false return false
@ -207,6 +229,8 @@ func ReadL1MessagesFrom(db ethdb.Database, startIndex, maxCount uint64) []types.
index += 1 index += 1
count -= 1 count -= 1
iteratorL1MessageSizeGauge.Update(int64(unsafe.Sizeof(msg) + uintptr(cap(msg.Data))))
if msg.QueueIndex == it.maxQueueIndex { if msg.QueueIndex == it.maxQueueIndex {
break break
} }

View file

@ -189,9 +189,9 @@ func WriteSkippedTransaction(db ethdb.Database, tx *types.Transaction, traces *t
// update in a batch // update in a batch
batch := db.NewBatch() batch := db.NewBatch()
writeSkippedTransaction(db, tx, traces, reason, blockNumber, blockHash) writeSkippedTransaction(batch, tx, traces, reason, blockNumber, blockHash)
writeSkippedTransactionHash(db, index, tx.Hash()) writeSkippedTransactionHash(batch, index, tx.Hash())
writeNumSkippedTransactions(db, index+1) writeNumSkippedTransactions(batch, index+1)
// write to DB // write to DB
if err := batch.Write(); err != nil { if err := batch.Write(); err != nil {

View file

@ -24,7 +24,7 @@ import (
const ( const (
VersionMajor = 4 // Major version component of the current release VersionMajor = 4 // Major version component of the current release
VersionMinor = 4 // Minor version component of the current release VersionMinor = 4 // Minor version component of the current release
VersionPatch = 14 // Patch version component of the current release VersionPatch = 15 // Patch version component of the current release
VersionMeta = "sepolia" // Version metadata to append to the version string VersionMeta = "sepolia" // Version metadata to append to the version string
) )