Skip to content

Commit 14d1885

Browse files
committed
Update storage even for peers without active channel
but only persist it to DB when there is an active channel.
1 parent ca2c7f2 commit 14d1885

File tree

1 file changed

+12
-3
lines changed
  • eclair-core/src/main/scala/fr/acinq/eclair/io

1 file changed

+12
-3
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/io/Peer.scala

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ class Peer(val nodeParams: NodeParams,
147147
stay() using d.copy(peerStorage = d.peerStorage.copy(written = true))
148148

149149
case Event(e: ChannelReadyForPayments, d: DisconnectedData) =>
150+
if (d.peerStorage.written == false && !isTimerActive("peer-storage-write")) {
151+
startSingleTimer("peer-storage-write", WritePeerStorage, nodeParams.peerStorageConfig.writeDelay)
152+
}
150153
stay() using d.copy(activeChannels = d.activeChannels + e.channelId)
151154

152155
case Event(e: LocalChannelDown, d: DisconnectedData) =>
@@ -441,6 +444,9 @@ class Peer(val nodeParams: NodeParams,
441444
}
442445
}
443446
}
447+
if (d.peerStorage.written == false && !isTimerActive("peer-storage-write")) {
448+
startSingleTimer("peer-storage-write", WritePeerStorage, nodeParams.peerStorageConfig.writeDelay)
449+
}
444450
stay() using d.copy(activeChannels = d.activeChannels + e.channelId)
445451

446452
case Event(e: LocalChannelDown, d: ConnectedData) =>
@@ -539,17 +545,20 @@ class Peer(val nodeParams: NodeParams,
539545
stay()
540546

541547
case Event(store: PeerStorageStore, d: ConnectedData) =>
542-
if (nodeParams.features.hasFeature(Features.ProvideStorage) && d.activeChannels.nonEmpty) {
548+
if (nodeParams.features.hasFeature(Features.ProvideStorage)) {
543549
// If we don't have any pending write operations, we write the updated peer storage to disk after a delay.
544550
// This ensures that when we receive a burst of peer storage updates, we will rate-limit our IO disk operations.
545551
// If we already have a pending write operation, we must not reset the timer, otherwise we may indefinitely delay
546552
// writing to the DB and may never store our peer's backup.
547-
if (d.peerStorage.written) {
553+
if (d.activeChannels.isEmpty) {
554+
log.debug("received peer storage from peer with no active channel")
555+
}
556+
else if (!isTimerActive("peer-storage-write")) {
548557
startSingleTimer("peer-storage-write", WritePeerStorage, nodeParams.peerStorageConfig.writeDelay)
549558
}
550559
stay() using d.copy(peerStorage = PeerStorage(Some(store.blob), written = false))
551560
} else {
552-
log.debug("ignoring peer storage (feature={}, channels={})", nodeParams.features.hasFeature(Features.ProvideStorage), d.activeChannels.mkString(","))
561+
log.debug("ignoring peer storage, feature disabled")
553562
stay()
554563
}
555564

0 commit comments

Comments
 (0)