From f72395756a5cad11ec5b5a76b05331316832b1d2 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 9 Apr 2025 20:02:16 -0400 Subject: [PATCH] ssb: If things time out because we're following a million accounts...recover ungracefully. --- apps/ssb.json | 2 +- apps/ssb/tf-app.js | 114 ++++++++++++++++++----------------- apps/ssb/tf-tab-news-feed.js | 6 +- 3 files changed, 65 insertions(+), 57 deletions(-) diff --git a/apps/ssb.json b/apps/ssb.json index db051bf1..40568eb5 100644 --- a/apps/ssb.json +++ b/apps/ssb.json @@ -1,5 +1,5 @@ { "type": "tildefriends-app", "emoji": "🦀", - "previous": "&YZCzXrfB6j+y0sXF4KspAibwjLsSCaMoB5rdO3mQl+Q=.sha256" + "previous": "&VE+OD1O5xdeiqipvbxXpmatUHu7dTbliuQpFnuZgsGQ=.sha256" } diff --git a/apps/ssb/tf-app.js b/apps/ssb/tf-app.js index f4de2144..a3debd56 100644 --- a/apps/ssb/tf-app.js +++ b/apps/ssb/tf-app.js @@ -175,63 +175,67 @@ class TfElement extends LitElement { } } - let abouts = await tfrpc.rpc.query( - ` - SELECT - messages.author, json(messages.content) AS content, messages.sequence - FROM - messages, - json_each(?1) AS following - WHERE - messages.author = following.value AND - messages.content ->> 'type' = 'about' AND - messages.rowid > ?3 AND - messages.rowid <= ?4 - UNION - SELECT - messages.author, json(messages.content) AS content, messages.sequence - FROM - messages, - json_each(?2) AS following - WHERE - messages.author = following.value AND - messages.content ->> 'type' = 'about' AND - messages.rowid <= ?4 - ORDER BY messages.author, messages.sequence - `, - [ - JSON.stringify(ids.filter((id) => cache.about[id])), - JSON.stringify(ids.filter((id) => !cache.about[id])), - cache.last_row_id, - max_row_id, - ] - ); - for (let about of abouts) { - let content = JSON.parse(about.content); - if (content.about === about.author) { - delete content.type; - delete content.about; - cache.about[about.author] = Object.assign( - cache.about[about.author] || {}, - content + try { + let abouts = await tfrpc.rpc.query( + ` + SELECT + messages.author, json(messages.content) AS content, messages.sequence + FROM + messages, + json_each(?1) AS following + WHERE + messages.author = following.value AND + messages.content ->> 'type' = 'about' AND + messages.rowid > ?3 AND + messages.rowid <= ?4 + UNION + SELECT + messages.author, json(messages.content) AS content, messages.sequence + FROM + messages, + json_each(?2) AS following + WHERE + messages.author = following.value AND + messages.content ->> 'type' = 'about' AND + messages.rowid <= ?4 + ORDER BY messages.author, messages.sequence + `, + [ + JSON.stringify(ids.filter((id) => cache.about[id])), + JSON.stringify(ids.filter((id) => !cache.about[id])), + cache.last_row_id, + max_row_id, + ] + ); + for (let about of abouts) { + let content = JSON.parse(about.content); + if (content.about === about.author) { + delete content.type; + delete content.about; + cache.about[about.author] = Object.assign( + cache.about[about.author] || {}, + content + ); + } + } + cache.last_row_id = max_row_id; + let new_cache = JSON.stringify(cache); + if (new_cache !== original_cache) { + let start_time = new Date(); + tfrpc.rpc.databaseSet('about', new_cache).then(function () { + console.log('saving about took', (new Date() - start_time) / 1000); + }); + } + users = users || {}; + for (let id of Object.keys(cache.about)) { + users[id] = Object.assign( + {follow_depth: following[id]?.d}, + users[id] || {}, + cache.about[id] ); } - } - cache.last_row_id = max_row_id; - let new_cache = JSON.stringify(cache); - if (new_cache !== original_cache) { - let start_time = new Date(); - tfrpc.rpc.databaseSet('about', new_cache).then(function () { - console.log('saving about took', (new Date() - start_time) / 1000); - }); - } - users = users || {}; - for (let id of Object.keys(cache.about)) { - users[id] = Object.assign( - {follow_depth: following[id]?.d}, - users[id] || {}, - cache.about[id] - ); + } catch (e) { + console.log(e); } return Object.assign({}, users); } diff --git a/apps/ssb/tf-tab-news-feed.js b/apps/ssb/tf-tab-news-feed.js index 103b48a4..bfea4b97 100644 --- a/apps/ssb/tf-tab-news-feed.js +++ b/apps/ssb/tf-tab-news-feed.js @@ -253,7 +253,11 @@ class TfTabNewsFeedElement extends LitElement { try { let more = []; let last_start_time = this.time_range[0]; - more = await this.fetch_messages(null, last_start_time); + try { + more = await this.fetch_messages(null, last_start_time); + } catch (e) { + console.log(e); + } this.update_time_range_from_messages( more.filter((x) => x.timestamp < last_start_time) );