Merge pull request #2203 from mempool/nymkappa/bugfix/channels-update-status

Don't set all channels to inactive when the updater runs
This commit is contained in:
wiz 2022-07-27 19:16:54 +00:00 committed by GitHub
commit 3e2cf5c058
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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,16 @@ class NodeSyncService {
}
}
private async $setChannelsInactive(): Promise<void> {
private async $setChannelsInactive(graphChannelsIds: string[]): Promise<void> {
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(',')}
)
AND status != 2
`);
} catch (e) {
logger.err('$setChannelsInactive() error: ' + (e instanceof Error ? e.message : e));
}