Skip to content

Commit f43674f

Browse files
Add additional logging on failed backup validations.
1 parent 130ad99 commit f43674f

File tree

4 files changed

+57
-5
lines changed

4 files changed

+57
-5
lines changed

app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveValidator.kt

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55

66
package org.thoughtcrime.securesms.backup.v2
77

8+
import org.signal.core.util.isNotNullOrBlank
89
import org.signal.libsignal.messagebackup.MessageBackup
910
import org.signal.libsignal.messagebackup.ValidationError
11+
import org.thoughtcrime.securesms.database.SignalDatabase
1012
import org.thoughtcrime.securesms.keyvalue.SignalStore
13+
import org.thoughtcrime.securesms.util.isStory
14+
import org.thoughtcrime.securesms.util.isStoryReaction
1115
import org.whispersystems.signalservice.api.backup.MessageBackupKey
1216
import java.io.File
1317
import java.io.IOException
@@ -31,13 +35,61 @@ object ArchiveValidator {
3135
} catch (e: IOException) {
3236
ValidationResult.ReadError(e)
3337
} catch (e: ValidationError) {
34-
ValidationResult.ValidationError(e)
38+
val sentTimestamp = "\\d{10,}+".toRegex().find(e.message ?: "")?.value?.toLongOrNull()
39+
ValidationResult.ValidationError(
40+
exception = e,
41+
messageDetails = sentTimestamp?.let { fetchMessageDetails(it) } ?: emptyList()
42+
)
43+
}
44+
}
45+
46+
private fun fetchMessageDetails(sentTimestamp: Long): List<MessageDetails> {
47+
val messages = SignalDatabase.messages.getMessagesBySentTimestamp(sentTimestamp)
48+
return messages.map {
49+
MessageDetails(
50+
messageId = it.id,
51+
dateSent = it.dateSent,
52+
threadId = it.threadId,
53+
threadRecipientId = SignalDatabase.threads.getRecipientForThreadId(it.threadId)?.id?.toLong() ?: 0L,
54+
type = it.type,
55+
fromRecipientId = it.fromRecipient.id.toLong(),
56+
toRecipientId = it.toRecipient.id.toLong(),
57+
hasBody = it.body.isNotNullOrBlank(),
58+
hasExtras = it.messageExtras != null,
59+
outgoing = it.isOutgoing,
60+
viewOnce = it.isViewOnce,
61+
isStory = it.isStory(),
62+
isStoryReaction = it.isStoryReaction(),
63+
originalMessageId = it.originalMessageId?.id ?: 0,
64+
isLatestRevision = it.isLatestRevision
65+
)
3566
}
3667
}
3768

3869
sealed interface ValidationResult {
3970
data object Success : ValidationResult
4071
data class ReadError(val exception: IOException) : ValidationResult
41-
data class ValidationError(val exception: org.signal.libsignal.messagebackup.ValidationError) : ValidationResult
72+
data class ValidationError(
73+
val exception: org.signal.libsignal.messagebackup.ValidationError,
74+
val messageDetails: List<MessageDetails>
75+
) : ValidationResult
4276
}
77+
78+
data class MessageDetails(
79+
val messageId: Long,
80+
val dateSent: Long,
81+
val threadId: Long,
82+
val threadRecipientId: Long,
83+
val type: Long,
84+
val fromRecipientId: Long,
85+
val toRecipientId: Long,
86+
val hasBody: Boolean,
87+
val hasExtras: Boolean,
88+
val outgoing: Boolean,
89+
val viewOnce: Boolean,
90+
val isStory: Boolean,
91+
val isStoryReaction: Boolean,
92+
val originalMessageId: Long,
93+
val isLatestRevision: Boolean
94+
)
4395
}

app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
152152
is ArchiveValidator.ValidationResult.ReadError -> "Failed to read backup file!"
153153
ArchiveValidator.ValidationResult.Success -> "Validation passed!"
154154
is ArchiveValidator.ValidationResult.ValidationError -> {
155-
Log.w(TAG, "Validation failed!", result.exception)
155+
Log.w(TAG, "Validation failed! Details: ${result.messageDetails}", result.exception)
156156
"Validation failed :( Check the logs for details."
157157
}
158158
}

app/src/main/java/org/thoughtcrime/securesms/jobs/BackupMessagesJob.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class BackupMessagesJob private constructor(
226226
}
227227

228228
is ArchiveValidator.ValidationResult.ValidationError -> {
229-
Log.w(TAG, "The backup file fails validation! Message: " + result.exception.message)
229+
Log.w(TAG, "The backup file fails validation! Message: ${result.exception.message}, Details: ${result.messageDetails}")
230230
ArchiveUploadProgress.onValidationFailure()
231231
return BackupFileResult.Failure
232232
}

app/src/main/java/org/thoughtcrime/securesms/linkdevice/LinkDeviceRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ object LinkDeviceRepository {
277277
return LinkUploadArchiveResult.BackupCreationFailure(result.exception)
278278
}
279279
is ArchiveValidator.ValidationResult.ValidationError -> {
280-
Log.w(TAG, "[createAndUploadArchive] The backup file fails validation!", result.exception)
280+
Log.w(TAG, "[createAndUploadArchive] The backup file fails validation! Details: ${result.messageDetails}", result.exception)
281281
return LinkUploadArchiveResult.BackupCreationFailure(result.exception)
282282
}
283283
}

0 commit comments

Comments
 (0)