channeldb: check for tombstone before opening DB

To avoid running a channel DB that was successfully migrated to another
system by accident, we check if there is a tombstone marker before we
open the DB for use.
This commit is contained in:
Oliver Gugger 2022-09-30 14:17:14 +02:00
parent 7e76326b97
commit fc2d652261
No known key found for this signature in database
GPG Key ID: 8E4256593F177720
2 changed files with 10 additions and 0 deletions

View File

@ -436,6 +436,11 @@ func (d *DB) Wipe() error {
// the database are created.
func initChannelDB(db kvdb.Backend) error {
err := kvdb.Update(db, func(tx kvdb.RwTx) error {
// Check if DB was marked as inactive with a tomb stone.
if err := EnsureNoTombstone(tx); err != nil {
return err
}
meta := &Meta{}
// Check if DB is already initialized.
err := FetchMeta(meta, tx)

View File

@ -681,4 +681,9 @@ func TestMarkerAndTombstone(t *testing.T) {
// cannot be used anymore.
err = db.View(EnsureNoTombstone, func() {})
require.ErrorContains(t, err, string(tombstoneText))
// Now that the DB has a tombstone, we should no longer be able to open
// it once we close it.
_, err = CreateWithBackend(db.Backend)
require.ErrorContains(t, err, string(tombstoneText))
}