Skip to content

Conversation

@bepaald
Copy link
Contributor

@bepaald bepaald commented Nov 21, 2024

First time contributor checklist

Contributor checklist

  • I am following the Code Style Guidelines
  • I have tested my contribution on these devices:
  • My contribution is fully baked and ready to be merged as is
  • I ensure that all the open issues my contribution fixes are mentioned in the commit message of my first commit using the Fixes #1234 syntax

Description

This is strongly related to #13809. The exact same FTS-table-drop-and-recreate pattern is used in these two migrations (239, and 242). These will certainly again cause database corruptions. For more information, please see #13809.

I am not currently aware of open issues caused by this problem (I only found them now just by grepping for "message_fts" through the migration-helpers), and I have not tested these two 1-liners, but both the problem and solution are identical to #13809 (which was thoroughly investigated and tested).

If i'm understanding everything right, some people may already have inconsistent FTS tables due to these migrations, so I strongly suggest a new database version and a migration like this:

object V2XX_EnsureSearchTableConsistency : SignalDatabaseMigration {

  private const val FTS_TABLE_NAME = "message_fts"
  db.execSQL("INSERT INTO $FTS_TABLE_NAME ($FTS_TABLE_NAME) VALUES('rebuild')")

}

I'd be willing to write a patch like this if requested. Then after that, it should just be a matter of keeping the table consistent.

Thanks!

@greyson-signal
Copy link
Contributor

I think these changes are reasonable, thank you! They'll be in 7.27.

I wanna hold off on a new migration that just does a rebuild, though. On large installs this can take 7-10 seconds and can be very disruptive, so I want to take more of a "wait and see" approach.

@bepaald
Copy link
Contributor Author

bepaald commented Nov 22, 2024

Thanks!

In regards to a new migration: it is possible to do the actual rebuild conditionally on whether or not the fts table is good. For this use INSERT INTO message_fts(message_fts, rank) VALUES('integrity-check', 1); and check the return code. (reference: https://www.sqlite.org/fts5.html#the_integrity_check_command). This way there is no penalty for users if the fts table is good (most users I would think). For others, indeed it could take some time, but it could be argued that it needs to be done in their case regardless.

Note also that if it's not done, similar problems like #13034 and #13506 could easily happen again if any future migration touches the message table again. (at least assuming the separate job that exists for rebuilding does not run during the migrations.)

But I'll leave that up to you (though I'm still willing to create a pr if desired). Thank you for all your hard work on this!

TheTechZone pushed a commit to Cerenia/Signal-Android that referenced this pull request Jan 6, 2025
AbandonedCart pushed a commit to SamSprung/Signal-Android that referenced this pull request Jan 31, 2025
Update libphonenumber to 8.13.50

Import correct InvalidKeyException in LinkDeviceRepository.

Resolves signalapp#13808

Use the correct link device flag.

Add support for the new Benin phone format.

Update translations and other static files.

Bump version to 7.26.1

Update backup integration tests.

Add new rules to log scrubber.

Potential fix for a backup validation error.

Force relays only if remote user is not a 'Signal Connection'.

Add "your media will be deleted today" mechanism based off last checkin time and media TTL.

Remove orphaned attachments when creating a new backup.

Add sgnl://ideal support to app deeplinks.

Add unit test for RegistrationUtil.

Use AEP for regv3 flows.

Fix creating message_fts table during database migration.

Fixes signalapp#13034
Fixes signalapp#13506

Rebuild FTS index in V239_MessageFullTextSearchEmojiSupport.

Rebuild FTS index in V242_MessageFullTextSearchEmojiSupportV2.

Resolves signalapp#13810

Fix multiple activity finish after donation.

Fix icon gradient.

Use ChatListener to get connection interrupted event from libsignal; clear connection state when received

Flesh out restore paths for regv3.

Update to libsignal 0.63.0

Add an internal sqlite playground.

Update linked devices strings.

Allow renaming of linked device.

Fix export bugs causing validation errors.

Update GV2 spinner transformer to for group updates in message extras.

Improve storage service diff logging.

Remove some unnecessary call tab requeries.

Verify group ids on peer-to-peer group changes.

Inject SignalWebSocket into IncomingMessageObserver.

Resolves signalapp#13820

Use calling service type for calls.

Kotlin-ize some more tests.

Resolves signalapp#13813

Fix empty username backupv2 export.

Fix lost voice notes on orientation change.

Allow group removal shortcut in chat folders.

Use EmojiTextView for chat folder names.

Center call link button.

Add validation error UI.

Split remote user check for group vs individual calls.

Ensure updateMessageRequestAcceptedState runs on main thread.

Convert more tests to kotlin.

Resolves signalapp#13825

Update most of the backup integration tests.

Add some more link+sync logs.

Use AEP when validating backup.

Fix incorrect ACI/PNI storage for revoked invites in group updates.

Fix denial dialog for call links.

Handle web socket closed unexpectedly errors more gracefully.

Inline the expireVersion capability.

Inline the deleteSync capability.

Fix calls silent ringer bug.

Fix GSE crash when attempting to send to non-GV2 groups.

Update to the latest backup tests.

Add call link strings.

Add sms provider failed specific messaging during registration.

Better progress messaging.

Update translations and other static files.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants