Skip to content

Commit de5ae97

Browse files
committed
fix: check migrated external peers on node start
1 parent b07e81c commit de5ae97

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

app/src/main/java/to/bitkit/repositories/LightningRepo.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import to.bitkit.di.BgDispatcher
5151
import to.bitkit.env.Env
5252
import to.bitkit.ext.getSatsPerVByteFor
5353
import to.bitkit.ext.nowTimestamp
54+
import to.bitkit.ext.of
5455
import to.bitkit.ext.toPeerDetailsList
5556
import to.bitkit.models.CoinSelectionPreference
5657
import to.bitkit.models.NodeLifecycleState
@@ -64,6 +65,7 @@ import to.bitkit.services.LnurlChannelResponse
6465
import to.bitkit.services.LnurlService
6566
import to.bitkit.services.LnurlWithdrawResponse
6667
import to.bitkit.services.LspNotificationsService
68+
import to.bitkit.services.MigrationService
6769
import to.bitkit.services.NodeEventHandler
6870
import to.bitkit.utils.AppError
6971
import to.bitkit.utils.Logger
@@ -73,6 +75,7 @@ import java.util.concurrent.ConcurrentHashMap
7375
import java.util.concurrent.atomic.AtomicBoolean
7476
import java.util.concurrent.atomic.AtomicReference
7577
import javax.inject.Inject
78+
import javax.inject.Provider
7679
import javax.inject.Singleton
7780
import kotlin.coroutines.cancellation.CancellationException
7881
import kotlin.time.Duration
@@ -94,6 +97,7 @@ class LightningRepo @Inject constructor(
9497
private val preActivityMetadataRepo: PreActivityMetadataRepo,
9598
private val connectivityRepo: ConnectivityRepo,
9699
private val vssBackupClientLdk: VssBackupClientLdk,
100+
private val migrationServiceProvider: Provider<MigrationService>,
97101
) {
98102
private val _lightningState = MutableStateFlow(LightningState())
99103
val lightningState = _lightningState.asStateFlow()
@@ -348,6 +352,7 @@ class LightningRepo @Inject constructor(
348352
connectToTrustedPeers().onFailure {
349353
Logger.error("Failed to connect to trusted peers", it, context = TAG)
350354
}
355+
connectMigrationPeers()
351356

352357
sync().onFailure { e ->
353358
Logger.warn("Initial sync failed, event-driven sync will retry", e, context = TAG)
@@ -666,6 +671,18 @@ class LightningRepo @Inject constructor(
666671
runCatching { lightningService.connectToTrustedPeers() }
667672
}
668673

674+
private suspend fun connectMigrationPeers() {
675+
val peerUris = migrationServiceProvider.get().tryFetchMigrationPeersFromBackup()
676+
for (uri in peerUris) {
677+
runCatching {
678+
val peer = PeerDetails.of(uri)
679+
lightningService.connectPeer(peer)
680+
}.onFailure {
681+
Logger.error("Failed to connect migration peer: $uri", it, context = TAG)
682+
}
683+
}
684+
}
685+
669686
suspend fun connectPeer(peer: PeerDetails): Result<Unit> = executeWhenNodeRunning("connectPeer") {
670687
lightningService.connectPeer(peer).map {
671688
syncState()

app/src/test/java/to/bitkit/repositories/LightningRepoTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import to.bitkit.services.CoreService
4646
import to.bitkit.services.LightningService
4747
import to.bitkit.services.LnurlService
4848
import to.bitkit.services.LspNotificationsService
49+
import to.bitkit.services.MigrationService
4950
import to.bitkit.test.BaseUnitTest
5051
import kotlin.test.assertEquals
5152
import kotlin.test.assertFalse
@@ -67,6 +68,7 @@ class LightningRepoTest : BaseUnitTest() {
6768
private val lnurlService = mock<LnurlService>()
6869
private val connectivityRepo = mock<ConnectivityRepo>()
6970
private val vssBackupClientLdk = mock<VssBackupClientLdk>()
71+
private val migrationService = mock<MigrationService>()
7072

7173
@Before
7274
fun setUp() = runBlocking {
@@ -76,6 +78,7 @@ class LightningRepoTest : BaseUnitTest() {
7678
whenever(connectivityRepo.isOnline).thenReturn(MutableStateFlow(ConnectivityState.CONNECTED))
7779
whenever(settingsStore.data).thenReturn(flowOf(SettingsData()))
7880
whenever(lightningService.aresRequiredPeersInNetworkGraph()).thenReturn(true)
81+
whenever(migrationService.tryFetchMigrationPeersFromBackup()).thenReturn(emptyList())
7982
sut = LightningRepo(
8083
bgDispatcher = testDispatcher,
8184
lightningService = lightningService,
@@ -89,6 +92,7 @@ class LightningRepoTest : BaseUnitTest() {
8992
preActivityMetadataRepo = preActivityMetadataRepo,
9093
connectivityRepo = connectivityRepo,
9194
vssBackupClientLdk = vssBackupClientLdk,
95+
migrationServiceProvider = { migrationService },
9296
)
9397
}
9498

0 commit comments

Comments
 (0)