Skip to content

Commit c2d1de2

Browse files
authored
Add logging to corruptabledb closure (#3938)
Signed-off-by: Joshua Kim <20001595+joshua-kim@users.noreply.github.com>
1 parent 5381d56 commit c2d1de2

File tree

5 files changed

+24
-8
lines changed

5 files changed

+24
-8
lines changed

database/corruptabledb/db.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import (
88
"fmt"
99
"sync"
1010

11+
"go.uber.org/zap"
12+
1113
"github.com/ava-labs/avalanchego/database"
14+
"github.com/ava-labs/avalanchego/utils/logging"
1215
)
1316

1417
var (
@@ -21,6 +24,7 @@ var (
2124
type Database struct {
2225
database.Database
2326

27+
log logging.Logger
2428
// initialError stores the error other than "not found" or "closed" while
2529
// performing a db operation. If not nil, Has, Get, Put, Delete and batch
2630
// writes will fail with initialError.
@@ -29,8 +33,11 @@ type Database struct {
2933
}
3034

3135
// New returns a new prefixed database
32-
func New(db database.Database) *Database {
33-
return &Database{Database: db}
36+
func New(db database.Database, log logging.Logger) *Database {
37+
return &Database{
38+
Database: db,
39+
log: log,
40+
}
3441
}
3542

3643
// Has returns if the key is set in the database
@@ -136,6 +143,11 @@ func (db *Database) handleError(err error) error {
136143
// Set the initial error to the first unexpected error. Don't call
137144
// corrupted() here since it would deadlock.
138145
if db.initialError == nil {
146+
db.log.Error(
147+
"closing database to avoid possible corruption",
148+
zap.Error(err),
149+
)
150+
139151
db.initialError = fmt.Errorf("closed to avoid possible corruption, init error: %w", err)
140152
}
141153
}

database/corruptabledb/db_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ import (
1515
"github.com/ava-labs/avalanchego/database/databasemock"
1616
"github.com/ava-labs/avalanchego/database/dbtest"
1717
"github.com/ava-labs/avalanchego/database/memdb"
18+
"github.com/ava-labs/avalanchego/utils/logging"
1819
)
1920

2021
var errTest = errors.New("non-nil error")
2122

2223
func newDB() *Database {
2324
baseDB := memdb.New()
24-
return New(baseDB)
25+
return New(baseDB, logging.NoLog{})
2526
}
2627

2728
func TestInterface(t *testing.T) {

database/factory/factory.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func New(
7070
}
7171

7272
// Wrap with corruptable DB
73-
db = corruptabledb.New(db)
73+
db = corruptabledb.New(db, logger)
7474

7575
if readOnly && name != memdb.Name {
7676
db = versiondb.New(db)

database/rpcdb/db_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/ava-labs/avalanchego/database/corruptabledb"
1414
"github.com/ava-labs/avalanchego/database/dbtest"
1515
"github.com/ava-labs/avalanchego/database/memdb"
16+
"github.com/ava-labs/avalanchego/utils/logging"
1617
"github.com/ava-labs/avalanchego/vms/rpcchainvm/grpcutils"
1718

1819
rpcdbpb "github.com/ava-labs/avalanchego/proto/pb/rpcdb"
@@ -120,7 +121,7 @@ func TestHealthCheck(t *testing.T) {
120121
require := require.New(t)
121122

122123
baseDB := setupDB(t)
123-
db := corruptabledb.New(baseDB.server)
124+
db := corruptabledb.New(baseDB.server, logging.NoLog{})
124125
defer db.Close()
125126
require.NoError(scenario.testFn(db))
126127

vms/rpcchainvm/vm_server.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,6 @@ func (vm *VMServer) Initialize(ctx context.Context, req *vmpb.InitializeRequest)
181181
return nil, err
182182
}
183183
vm.connCloser.Add(dbClientConn)
184-
vm.db = corruptabledb.New(
185-
rpcdb.NewClient(rpcdbpb.NewDatabaseClient(dbClientConn)),
186-
)
187184

188185
// TODO: Allow the logger to be configured by the client
189186
vm.log = logging.NewLogger(
@@ -195,6 +192,11 @@ func (vm *VMServer) Initialize(ctx context.Context, req *vmpb.InitializeRequest)
195192
),
196193
)
197194

195+
vm.db = corruptabledb.New(
196+
rpcdb.NewClient(rpcdbpb.NewDatabaseClient(dbClientConn)),
197+
vm.log,
198+
)
199+
198200
clientConn, err := grpcutils.Dial(
199201
req.ServerAddr,
200202
grpcutils.WithChainUnaryInterceptor(grpcClientMetrics.UnaryClientInterceptor()),

0 commit comments

Comments
 (0)