From edfa0d6074a12a2a3a2091791fa5b2ec4e6b0b92 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Wed, 27 Jul 2022 17:21:24 +0200 Subject: [PATCH] Don't set all channels to inactive when the updater runs --- .../src/tasks/lightning/node-sync.service.ts | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/backend/src/tasks/lightning/node-sync.service.ts b/backend/src/tasks/lightning/node-sync.service.ts index 3b2eb18e2..dd2c5868e 100644 --- a/backend/src/tasks/lightning/node-sync.service.ts +++ b/backend/src/tasks/lightning/node-sync.service.ts @@ -38,11 +38,13 @@ class NodeSyncService { await $lookupNodeLocation(); } - await this.$setChannelsInactive(); - + const graphChannelsIds: string[] = []; for (const channel of networkGraph.channels) { await this.$saveChannel(channel); + graphChannelsIds.push(channel.id); } + await this.$setChannelsInactive(graphChannelsIds); + logger.info(`Channels updated.`); await this.$findInactiveNodesAndChannels(); @@ -106,7 +108,22 @@ class NodeSyncService { try { // @ts-ignore - const [channels]: [ILightningApi.Channel[]] = await DB.query(`SELECT channels.id FROM channels WHERE channels.status = 1 AND ((SELECT COUNT(*) FROM nodes WHERE nodes.public_key = channels.node1_public_key) = 0 OR (SELECT COUNT(*) FROM nodes WHERE nodes.public_key = channels.node2_public_key) = 0)`); + const [channels]: [ILightningApi.Channel[]] = await DB.query(` + SELECT channels.id + FROM channels + WHERE channels.status = 1 + AND ( + ( + SELECT COUNT(*) + FROM nodes + WHERE nodes.public_key = channels.node1_public_key + ) = 0 + OR ( + SELECT COUNT(*) + FROM nodes + WHERE nodes.public_key = channels.node2_public_key + ) = 0) + `); for (const channel of channels) { await this.$updateChannelStatus(channel.id, 0); @@ -356,9 +373,15 @@ class NodeSyncService { } } - private async $setChannelsInactive(): Promise { + private async $setChannelsInactive(graphChannelsIds: string[]): Promise { try { - await DB.query(`UPDATE channels SET status = 0 WHERE status = 1`); + await DB.query(` + UPDATE channels + SET status = 0 + WHERE short_id NOT IN ( + ${graphChannelsIds.map(id => `"${id}"`).join(',')} + ) + `); } catch (e) { logger.err('$setChannelsInactive() error: ' + (e instanceof Error ? e.message : e)); }