Skip to content

Commit 205653d

Browse files
authored
Make db errors fatal in channels (#1764)
We don't want a database error to cause force close of channels. Database errors are more likely to happen when using Postgres, but can also happen with Sqlite in case of e.g. full disk. Since we always write to disk before sending messages, we should be able to recover gracefully after the db issue is fixed and eclair is restarted.
1 parent 357f7f9 commit 205653d

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/channel/Channel.scala

+6
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ import fr.acinq.eclair.channel.TxPublisher.{PublishRawTx, PublishTx, SetChannelI
3333
import fr.acinq.eclair.crypto.ShaChain
3434
import fr.acinq.eclair.crypto.keymanager.ChannelKeyManager
3535
import fr.acinq.eclair.db.PendingRelayDb
36+
import fr.acinq.eclair.db.pg.PgUtils.PgLock.logger
3637
import fr.acinq.eclair.io.Peer
3738
import fr.acinq.eclair.payment.PaymentSettlingOnChain
3839
import fr.acinq.eclair.router.Announcements
3940
import fr.acinq.eclair.transactions.Transactions.{ClosingTx, TxOwner}
4041
import fr.acinq.eclair.transactions._
4142
import fr.acinq.eclair.wire.protocol._
43+
import org.sqlite.SQLiteException
4244
import scodec.bits.ByteVector
4345

46+
import java.sql.SQLException
4447
import scala.collection.immutable.Queue
4548
import scala.concurrent.ExecutionContext
4649
import scala.concurrent.duration._
@@ -2448,6 +2451,9 @@ class Channel(val nodeParams: NodeParams, val wallet: EclairWallet, remoteNodeId
24482451
try {
24492452
s(event)
24502453
} catch {
2454+
case t: SQLException =>
2455+
log.error(t, "fatal database error\n")
2456+
sys.exit(-2)
24512457
case t: Throwable => handleLocalError(t, event.stateData, None)
24522458
}
24532459
}

0 commit comments

Comments
 (0)