2024-10-13 16:00:32 -07:00
|
|
|
# Upgrade Notes
|
|
|
|
|
2024-11-14 16:50:34 -08:00
|
|
|
## 2024.10.0
|
|
|
|
|
|
|
|
### Hellspawns
|
|
|
|
|
|
|
|
Sharkey versions before 2024.10 suffered from a bug in the "Mark instance as NSFW" feature.
|
|
|
|
When a user from such an instance boosted a note, the boost would be converted to a hellspawn (pure renote with Content Warning).
|
|
|
|
Hellspawns are buggy and do not properly federate, so it may be desirable to correct any that already exist in the database.
|
|
|
|
The following script will correct any local or remote hellspawns in the database.
|
|
|
|
|
|
|
|
```postgresql
|
|
|
|
/* Remove "instance is marked as NSFW" hellspawns */
|
2024-11-17 06:32:13 -08:00
|
|
|
UPDATE "note"
|
|
|
|
SET "cw" = null
|
2024-11-14 16:50:34 -08:00
|
|
|
WHERE
|
|
|
|
"renoteId" IS NOT NULL
|
|
|
|
AND "text" IS NULL
|
2024-11-17 06:32:13 -08:00
|
|
|
AND "cw" = 'Instance is marked as NSFW'
|
2024-11-14 16:50:34 -08:00
|
|
|
AND "replyId" IS NULL
|
|
|
|
AND "hasPoll" = false
|
|
|
|
AND "fileIds" = '{}';
|
|
|
|
|
|
|
|
/* Fix legacy / user-created hellspawns */
|
2024-11-17 06:32:13 -08:00
|
|
|
UPDATE "note"
|
|
|
|
SET "text" = '.'
|
2024-11-14 16:50:34 -08:00
|
|
|
WHERE
|
|
|
|
"renoteId" IS NOT NULL
|
|
|
|
AND "text" IS NULL
|
2024-11-17 06:32:13 -08:00
|
|
|
AND "cw" IS NOT NULL
|
2024-11-14 16:50:34 -08:00
|
|
|
AND "replyId" IS NULL
|
|
|
|
AND "hasPoll" = false
|
|
|
|
AND "fileIds" = '{}';
|
|
|
|
```
|
|
|
|
|
2024-10-13 16:00:32 -07:00
|
|
|
## 2024.9.0
|
|
|
|
|
|
|
|
### Following Feed
|
|
|
|
|
|
|
|
When upgrading an existing instance to version 2024.9.0, the Following Feed will initially be empty.
|
|
|
|
The feed will gradually fill as new posts federate, but it may be desirable to back-fill the feed with existing data.
|
|
|
|
This database script will populate the feed with the latest post of each type for all users, ensuring that data is fully populated after the update.
|
|
|
|
Run this after migrations but before starting the instance.
|
|
|
|
Warning: the script may take a long time to execute!
|
|
|
|
|
|
|
|
```postgresql
|
|
|
|
INSERT INTO latest_note (user_id, note_id, is_public, is_reply, is_quote)
|
|
|
|
SELECT
|
|
|
|
"userId" as user_id,
|
|
|
|
id as note_id,
|
|
|
|
visibility = 'public' AS is_public,
|
|
|
|
"replyId" IS NOT NULL AS is_reply,
|
|
|
|
(
|
|
|
|
"renoteId" IS NOT NULL
|
|
|
|
AND (
|
|
|
|
text IS NOT NULL
|
|
|
|
OR cw IS NOT NULL
|
|
|
|
OR "replyId" IS NOT NULL
|
|
|
|
OR "hasPoll"
|
|
|
|
OR "fileIds" != '{}'
|
|
|
|
)
|
|
|
|
) AS is_quote
|
|
|
|
FROM note
|
|
|
|
WHERE ( -- Exclude pure renotes (boosts)
|
|
|
|
"renoteId" IS NULL
|
|
|
|
OR text IS NOT NULL
|
|
|
|
OR cw IS NOT NULL
|
|
|
|
OR "replyId" IS NOT NULL
|
|
|
|
OR "hasPoll"
|
|
|
|
OR "fileIds" != '{}'
|
|
|
|
)
|
|
|
|
ORDER BY id DESC -- This part is very important: it ensures that we only load the *latest* notes of each type. Do not remove it!
|
|
|
|
ON CONFLICT DO NOTHING; -- Any conflicts are guaranteed to be older notes that we can ignore.
|
|
|
|
```
|