Update SVRB error handling.

This commit is contained in:
Greyson Parrelli
2025-08-15 13:58:40 -04:00
committed by Jeffrey Starke
parent 03c6094ea3
commit dfdadc9d7a
4 changed files with 67 additions and 32 deletions

View File

@@ -2090,15 +2090,23 @@ object BackupRepository {
result.data.forwardSecrecyToken
}
is SvrBApi.RestoreResult.NetworkError -> {
return RemoteRestoreResult.NetworkError.logW(TAG, "[remoteRestore] Network error during SVRB.", result.exception)
Log.w(TAG, "[remoteRestore] Network error during SVRB.", result.exception)
return RemoteRestoreResult.NetworkError
}
is SvrBApi.RestoreResult.RestoreFailedError,
SvrBApi.RestoreResult.InvalidDataError -> {
Log.w(TAG, "[remoteRestore] Permanent SVRB error! $result")
return RemoteRestoreResult.PermanentSvrBFailure
}
SvrBApi.RestoreResult.DataMissingError,
is SvrBApi.RestoreResult.RestoreFailedError,
is SvrBApi.RestoreResult.SvrError,
is SvrBApi.RestoreResult.UnknownError -> {
is SvrBApi.RestoreResult.SvrError -> {
Log.w(TAG, "[remoteRestore] Failed to fetch SVRB data: $result")
return RemoteRestoreResult.Failure
}
is SvrBApi.RestoreResult.UnknownError -> {
Log.e(TAG, "[remoteRestore] Unknown SVRB result! Crashing.", result.throwable)
throw result.throwable
}
}
val self = Recipient.self()

View File

@@ -249,7 +249,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
val forwardSecrecyToken = when (val result = SignalNetwork.svrB.restore(svrBAuth, SignalStore.backup.messageBackupKey, forwardSecrecyMetadata)) {
is SvrBApi.RestoreResult.Success -> result.data.forwardSecrecyToken
else -> throw IOException("Failed to read forward secrecy metadata!")
else -> throw IOException("Failed to read forward secrecy metadata! $result")
}
val encryptedStream = tempBackupFile.inputStream().apply {

View File

@@ -166,8 +166,13 @@ class BackupMessagesJob private constructor(
val svrBMetadata: SvrBStoreResponse = when (val result = SignalNetwork.svrB.store(auth, SignalStore.backup.messageBackupKey, backupSecretData)) {
is SvrBApi.StoreResult.Success -> result.data
is SvrBApi.StoreResult.NetworkError -> return Result.retry(defaultBackoff()).logW(TAG, "SVRB transient network error.", result.exception)
is SvrBApi.StoreResult.NetworkError -> return Result.retry(result.retryAfter?.inWholeMilliseconds ?: defaultBackoff()).logW(TAG, "SVRB transient network error.", result.exception)
is SvrBApi.StoreResult.SvrError -> return Result.retry(defaultBackoff()).logW(TAG, "SVRB error.", result.throwable)
SvrBApi.StoreResult.InvalidDataError -> {
Log.w(TAG, "Invalid SVRB data on the server! Clearing backup secret data and retrying.")
SignalStore.backup.nextBackupSecretData = null
return Result.retry(defaultBackoff())
}
is SvrBApi.StoreResult.UnknownError -> return Result.fatalFailure(RuntimeException(result.throwable))
}