diff --git a/core/rawdb/ancient_utils.go b/core/rawdb/ancient_utils.go index 0b15234690a..1a53993acb9 100644 --- a/core/rawdb/ancient_utils.go +++ b/core/rawdb/ancient_utils.go @@ -22,6 +22,7 @@ import ( "github.com/ava-labs/libevm/common" "github.com/ava-labs/libevm/ethdb" + "github.com/ava-labs/libevm/libevm/options" ) type tableSize struct { @@ -77,7 +78,10 @@ func inspect(name string, order map[string]bool, reader ethdb.AncientReader) (fr } // inspectFreezers inspects all freezers registered in the system. -func inspectFreezers(db ethdb.Database) ([]freezerInfo, error) { +func inspectFreezers(db ethdb.Database, opts ...InspectDatabaseOption) ([]freezerInfo, error) { + if options.As[inspectDatabaseConfig](opts...).skipFreezers { + return nil, nil + } var infos []freezerInfo for _, freezer := range freezers { switch freezer { diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 1fc7bdc35fc..835a7f1c1ad 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -604,7 +604,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte, opts ...Insp {"Light client", "Bloom trie nodes", bloomTrieNodes.Size(), bloomTrieNodes.Count()}, } // Inspect all registered append-only file store then. - ancients, err := inspectFreezers(db) + ancients, err := inspectFreezers(db, opts...) if err != nil { return err } diff --git a/core/rawdb/database.libevm.go b/core/rawdb/database.libevm.go index a7528b2618b..20ff2294e23 100644 --- a/core/rawdb/database.libevm.go +++ b/core/rawdb/database.libevm.go @@ -28,6 +28,7 @@ type inspectDatabaseConfig struct { statRecorders []func([]byte, common.StorageSize) bool isMetas []func([]byte) bool statsTransformers []func([][]string) [][]string + skipFreezers bool } func (c inspectDatabaseConfig) recordStat(key []byte, size common.StorageSize) bool { @@ -91,3 +92,10 @@ func WithDatabaseStatsTransformer(transform func(rows [][]string) [][]string) In c.statsTransformers = append(c.statsTransformers, transform) }) } + +// WithSkipFreezers returns an option that causes for freezer inspection to be skipped. +func WithSkipFreezers() InspectDatabaseOption { + return newInspectOpt(func(c *inspectDatabaseConfig) { + c.skipFreezers = true + }) +} diff --git a/core/rawdb/database.libevm_test.go b/core/rawdb/database.libevm_test.go index 684ab117738..548e08b558a 100644 --- a/core/rawdb/database.libevm_test.go +++ b/core/rawdb/database.libevm_test.go @@ -20,6 +20,9 @@ import ( "bytes" "fmt" "sort" + "testing" + + "github.com/stretchr/testify/require" "github.com/ava-labs/libevm/common" // To ensure that all methods are available to importing packages, this test @@ -28,6 +31,18 @@ import ( "github.com/ava-labs/libevm/ethdb" ) +func TestSkipFreezers(t *testing.T) { + require := require.New(t) + db := rawdb.NewMemoryDatabase() + + var ( + keyPrefix []byte + keyStart []byte + ) + + require.NoError(rawdb.InspectDatabase(db, keyPrefix, keyStart, rawdb.WithSkipFreezers())) +} + // ExampleDatabaseStat demonstrates the method signatures of DatabaseStat, which // exposes an otherwise unexported type that won't have its methods documented. func ExampleDatabaseStat() {