seedvault icon indicating copy to clipboard operation
seedvault copied to clipboard

MetadataManager.getMetadata() throws AssertionError after storage full

Open BradNut opened this issue 4 years ago • 14 comments
trafficstars

While investigating why SeedVault had not run a backup since 12-12-2020 on GrapheneOS where this is implemented as the OS backup solution I found that the backup page shows a black screen and not the seed vault settings.

Device: Pixel 3a XL GrapheneOS Build: RQ1A.210205.004.2021.02.19.15 With what I assume is the latest release of SeedVault.

ADB Logcat when navigating to GrapheneOS' backup screen (a full log taken here: Logcat_seedvault_error.log):

02-23 16:22:12.738  8292  8292 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 8292
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:22:12.779  1006  4808 I ActivityManager: Process com.stevesoltys.seedvault (pid 8292) has died: fg  IMPF
02-23 16:22:12.780  1006  4808 W ActivityManager: Scheduling restart of crashed service com.stevesoltys.seedvault/.transport.ConfigurableBackupTransportService in 1024000ms for connection
02-23 16:22:53.439  1006  1513 E BackupManagerService: [UserID:0] Unable to get management intent from transport: Transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport not registered
02-23 16:23:38.515  1006  4931 E BackupManagerService: [UserID:0] Unable to get management intent from transport: Transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport not registered

A separate crash monitored here:

--------- beginning of crash
02-23 16:16:24.849  3857  3857 E AndroidRuntime: FATAL EXCEPTION: main
02-23 16:16:24.849  3857  3857 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 3857
02-23 16:16:24.849  3857  3857 E AndroidRuntime: java.lang.AssertionError: Error reading metadata from cache
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6715)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.app.ActivityThread.access$1300(ActivityThread.java:237)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:223)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:7660)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.android.internal.os.ExecInit.main(ExecInit.java:48)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
02-23 16:16:24.849  3857  3857 E AndroidRuntime: Caused by: java.io.IOException
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        ... 19 more
02-23 16:16:24.850  3857  3857 E AndroidRuntime: Error reporting crash
02-23 16:16:24.850  3857  3857 E AndroidRuntime: java.lang.RuntimeException: Bad file descriptor
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at android.os.BinderProxy.transactNative(Native Method)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at android.os.BinderProxy.transact(BinderProxy.java:550)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at android.app.IActivityManager$Stub$Proxy.handleApplicationCrash(IActivityManager.java:5208)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$KillApplicationHandler.uncaughtException(RuntimeInit.java:158)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1073)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
02-23 16:16:24.850  3857  3857 E AndroidRuntime:        at java.lang.Thread.dispatchUncaughtException(Thread.java:2203)
02-23 16:16:24.900  1006  3749 I ActivityManager: Process com.stevesoltys.seedvault (pid 3857) has died: fg  IMPF
02-23 16:16:24.901  1006  3749 W ActivityManager: Scheduling restart of crashed service com.stevesoltys.seedvault/.transport.ConfigurableBackupTransportService in 1000ms for connection

BradNut avatar Feb 24 '21 01:02 BradNut

Thanks a lot for filing this issue! For some reason your device violates an assertion we made here:

MetadataManager.kt:39-44

This is essentially doing Context#openFileInput() which should not throw. But there could be an error when parsing the metadata.

Unfortunately, your log only contains indirect stack traces from the AndroidRuntime, but no logs from Seedvault itself. Could you please check if you find something else? It should have the tag MetadataManager. It could be though that this is a release build that doesn't do any logging.

grote avatar Feb 24 '21 16:02 grote

@grote, I just tried running adp logcat | grep seedvault and found something that has MetadataManager:

02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:16:24.849  3857  3857 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:16:27.409  4165  4165 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 4165
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:16:27.409  4165  4165 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:16:32.785  4543  4543 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 4543
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:16:32.785  4543  4543 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:16:49.881  5153  5153 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 5153
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:16:49.881  5153  5153 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:17:54.894  7038  7038 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 7038
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:17:54.894  7038  7038 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:22:12.738  8292  8292 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 8292
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:22:12.738  8292  8292 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 16:39:17.738  9775  9775 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 9775
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 16:39:17.738  9775  9775 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-23 17:47:34.861 13694 13694 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 13694
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-23 17:47:34.861 13694 13694 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)
02-24 02:32:05.589 24087 24087 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 24087
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:102)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:37)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:87)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$2.invoke(App.kt:37)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:131)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:86)
02-24 02:32:05.589 24087 24087 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40)```

Maybe that helps?

BradNut avatar Feb 24 '21 18:02 BradNut

No, this is all coming from the tag AndroidRuntime.

Maybe

adb logcat -b all -v color --pid=`adb shell pidof -s com.stevesoltys.seedvault`

brings up something? (only works when seedvault is already running)

grote avatar Feb 24 '21 18:02 grote

Or adb logcat -s MetadataManager -b all -v color

grote avatar Feb 24 '21 18:02 grote

Running that shows really nothing in the logs: `➜ ~ adb logcat -s MetadataManager -b all -v color

--------- beginning of crash

--------- beginning of radio

--------- beginning of system

--------- beginning of events

--------- beginning of main`

BradNut avatar Feb 24 '21 18:02 BradNut

Well, if there's no way to get more info here, a workaround to get this to work again is to clear all app data of Seedvault in system app settings. You will get a new recovery code and then should be able to run backups again.

grote avatar Feb 24 '21 18:02 grote

@grote Clearing app settings and restarting my phone now allows me to do the new recovery code process. Not sure what happened but I guess at least I can continue with backups this way.

BradNut avatar Feb 24 '21 18:02 BradNut

@grote Backup worked after clearing but again stopped after installing GrapheneOS' latest OTA and I assume after restarting the phone. GrapheneOS does not believe this is anything to do with the OS as they just minimally add SeedVault and do not modify it.

The issue must be with my device after installing an OS update and SeedVault starting up or something along those lines.

It was suggested that maybe a restart in general causes the issue on my device so I tried clearing app settings, recreating the recovery code, doing a backup, and then restarting the phone but this does not cause an issue.

On next GrapheneOS OTA I will try to log out when restarting.

BradNut avatar Mar 01 '21 20:03 BradNut

when you can roughly pinpoint when the issue starts to happen, it would be great if you could capture logs from that moment, so we can figure out what's going on.

grote avatar Mar 01 '21 20:03 grote

@grote I beleive I found out the case in which this issue occurs but I was not able to capture logs of it happeneing.

I think the app crashes and cannot recover when it tries to backup but runs out of space on system storage. I believe this is the issue because my phone ran out of space after a separate backup task and I noticed other apps complaining about not working properly. I checked SeedVault backup and again the app would not load.

BradNut avatar Mar 14 '21 17:03 BradNut

Thanks for keeping an eye on this @BradNut! The app should never crash, but it might. Would be great to get a logcat for the crash.

But a task for us can be to artificially create an out-of-space situation and then do a backup. I imagine that the metadata can get corrupted, if it writes a few bytes, but can't write all it needs to.

Where did you set the storage location of your backups to?

grote avatar Mar 15 '21 12:03 grote

I'm setting the storage location to the device itself. So I think it backs up to /storage/emulated/0/.SeedVaultAndroidBackup.

I can also try to create another out of space issue on purpose and then manually backup to try and reproduce the issue with logcat. I'll comment back on my attempt.

BradNut avatar Mar 15 '21 16:03 BradNut

Still trying to get a log of this happening as I would need to purposefully fill up my phone's space and have not had time to do so. However, it is worth noting that when this issue occurs and you have to reset the whole backup I still see old backups persisting on the phone which never get cleaned up.

BradNut avatar Apr 06 '21 21:04 BradNut

If somebody can try to almost fill their storage, then start capturing logs, then run a backup and then reproduce the issue with sharing logs afterwards, this would be helpful. It just happened to someone else: #351

grote avatar Jan 04 '22 19:01 grote

I've run into this I think. On a Fairphone 2, running LineageOS 18.1-20230920-NIGHTLY-FP2. De-googled, so no play services. Magisk installed.

Got errors in a pop-up dialog on starting phone, along the lines of "Seedvault Backup keeps stopping"

Checked logcat for mentions of seed, found this:

2$ grep seed tmp 09-25 09:10:19.592  1997  3312 V BackupManagerService: [UserID:0] Starting with transport com.stevesoltys.seedvault.transport.ConfigurableBackupTransport 09-25 09:10:26.544  1997  2233 I ActivityManager: Start proc 6632:com.stevesoltys.seedvault/u0a88 for service {com.stevesoltys.seedvault/com.stevesoltys.seedvault.transport.ConfigurableBackupTransportService} 09-25 09:10:27.961  6632  6632 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 6632 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:108) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:39) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:75) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:39) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:136) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:74) 09-25 09:10:27.961  6632  6632 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40) 09-25 09:10:28.031  1997  5683 I ActivityManager: Process com.stevesoltys.seedvault (pid 6632) has died: fg  IMPF 09-25 09:10:28.032  1997  5683 W ActivityManager: Scheduling restart of crashed service com.stevesoltys.seedvault/.transport.ConfigurableBackupTransportService in 1000ms for connection 09-25 09:10:29.147  1997  2233 I ActivityManager: Start proc 7005:com.stevesoltys.seedvault/u0a88 for service {com.stevesoltys.seedvault/com.stevesoltys.seedvault.transport.ConfigurableBackupTransportService} 09-25 09:10:29.320  7005  7005 E AndroidRuntime: Process: com.stevesoltys.seedvault, PID: 7005 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:43) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:195) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:108) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:39) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:75) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:39) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:136) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.App.onCreate(App.kt:74) 09-25 09:10:29.320  7005  7005 E AndroidRuntime:        at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:40) 09-25 09:11:30.125  1997  5637 I ActivityManager: Killing 7005:com.stevesoltys.seedvault/u0a88 (adj 0): crash 09-25 09:11:30.199  1997  5591 E BackupTransportManager: Couldn't connect to transport com.stevesoltys.seedvault/.transport.ConfigurableBackupTransportService for registration

Searched the web, found only this one issue, then subsequently the current issue searching for "getMetadata" in the seedvault open issues.

Tried the workaround above: clear seedvault's cache and data in the app's settings, then restart, and re-enable seedvault backups. (Set this to use the external SDCard, I'd used Nextcloud but it has seemed problematic in the past.) Got a new recovery key. Started a backup.

This completed successfully (although checking the status it seems like various apps have the "Backup quota exceeded" status, e.g. FDroid, Wallabag). Local contacts "Waiting to back up...". What's App: just a red exclamation mark.

Output from the logcat command suggested above, whilst backup running, got:

$ adb logcat -s MetadataManager -b all -v color
--------- beginning of kernel
--------- beginning of events
--------- beginning of system
--------- beginning of radio
--------- beginning of crash
--------- beginning of main
09-25 09:36:58.570 13020 13036 D MetadataManager: Cached metadata not found, creating...

Nothing more. Grepping logcat for seedv gets:

09-25 09:43:48.561  2002  2002 D NotificationService: 0|com.stevesoltys.seedvault|1|null|10088: granting content://settings/system/notification_sound
09-25 09:45:00.805 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 14455(2159KB) AllocSpace objects, 102(6936KB) LOS objects, 49% free, 6534KB/12MB, paused 102us total 131.332ms
09-25 09:45:09.678 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 11920(1798KB) AllocSpace objects, 88(5984KB) LOS objects, 49% free, 6770KB/13MB, paused 111us total 111.215ms
09-25 09:45:19.028 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 17577(2150KB) AllocSpace objects, 90(6120KB) LOS objects, 49% free, 7169KB/14MB, paused 123us total 131.763ms
09-25 09:45:26.222 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 38387(2651KB) AllocSpace objects, 120(6456KB) LOS objects, 49% free, 7118KB/13MB, paused 571us total 155.838ms
09-25 09:45:31.877 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 52215(3069KB) AllocSpace objects, 113(5412KB) LOS objects, 49% free, 7252KB/14MB, paused 78us total 158.841ms
09-25 09:45:32.637 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 21077(2315KB) AllocSpace objects, 98(6664KB) LOS objects, 49% free, 7104KB/13MB, paused 145us total 100.540ms
09-25 09:45:39.556 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 44895(2839KB) AllocSpace objects, 115(5936KB) LOS objects, 49% free, 7282KB/14MB, paused 83us total 177.791ms
09-25 09:45:42.232 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 13543(1991KB) AllocSpace objects, 94(6392KB) LOS objects, 49% free, 7324KB/14MB, paused 99us total 117.112ms
09-25 09:45:50.199 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 13900(2009KB) AllocSpace objects, 97(6596KB) LOS objects, 49% free, 6773KB/13MB, paused 76us total 112.534ms
09-25 09:45:51.830 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 13368(1951KB) AllocSpace objects, 93(6324KB) LOS objects, 49% free, 7063KB/13MB, paused 89us total 103.714ms
09-25 09:45:54.376 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 17339(1911KB) AllocSpace objects, 90(5552KB) LOS objects, 51% free, 5888KB/11MB, paused 76us total 129.533ms
09-25 09:46:10.076 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 64843(2841KB) AllocSpace objects, 93(3044KB) LOS objects, 49% free, 6591KB/12MB, paused 77us total 109.414ms
09-25 09:46:15.061 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 25268(2122KB) AllocSpace objects, 80(5440KB) LOS objects, 49% free, 6261KB/12MB, paused 92us total 103.194ms
09-25 09:46:16.904 13020 13032 I oltys.seedvaul: Background young concurrent copying GC freed 24460(1815KB) AllocSpace objects, 79(4236KB) LOS objects, 45% free, 6874KB/12MB, paused 97us total 110.240ms
09-25 09:46:23.620 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 51709(2828KB) AllocSpace objects, 95(4188KB) LOS objects, 49% free, 7362KB/14MB, paused 125us total 117.409ms
09-25 09:46:36.103 13020 13032 I oltys.seedvaul: Background young concurrent copying GC freed 62050(2889KB) AllocSpace objects, 49(2068KB) LOS objects, 40% free, 7273KB/11MB, paused 80us total 101.705ms
09-25 09:46:38.605 13020 13032 I oltys.seedvaul: Background concurrent copying GC freed 51758(2654KB) AllocSpace objects, 76(4192KB) LOS objects, 49% free, 6987KB/13MB, paused 151us total 119.159ms

Grepping logcat for Metadata finds nothing.

Storage space is not full:

$ adb shell df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 924M  1.1M  923M   1% /dev
tmpfs                 924M     0  924M   0% /mnt
/dev/block/mmcblk0p13 1.9G  1.4G  580M  72% /
magisk                924M  2.8M  921M   1% /debug_ramdisk
tmpfs                 924M     0  924M   0% /apex
/dev/block/mmcblk0p20  26G   21G  4.4G  83% /data
/dev/block/mmcblk0p15 630M   17M  606M   3% /cache
/dev/block/mmcblk0p14 4.9M  4.9M     0 100% /persist
/dev/block/mmcblk0p1   64M   56M  7.7M  88% /firmware
worker                924M     0  924M   0% /debug_ramdisk/.magisk/worker
/dev/fuse              26G   21G  4.4G  83% /storage/emulated
/dev/fuse              59G  7.8G   52G  14% /storage/E488-6A1F

Will wait and watch for a bit. Hoping to get backup-ups to Nextcloud working later.

wu-lee avatar Sep 25 '23 09:09 wu-lee

I'm running into the same symptom, probably the same bug. @grote, here is a backtrace you were asking for above:

~$ adb logcat -s MetadataManager -b all -v color
--------- beginning of main
12-08 17:15:17.453  6971  6971 E MetadataManager: Error parsing cached metadata
12-08 17:15:17.453  6971  6971 E MetadataManager: java.lang.SecurityException: org.json.JSONException: End of input at character 0 of 
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataReaderImpl.decode(MetadataReader.kt:158)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataReader$DefaultImpls.decode$default(MetadataReader.kt:31)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadataFromCache(MetadataManager.kt:250)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataManager.getMetadata(MetadataManager.kt:45)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataManager.getBackupToken(MetadataManager.kt:209)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.App.migrateTokenFromMetadataToSettingsManager(App.kt:109)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.App.access$migrateTokenFromMetadataToSettingsManager(App.kt:40)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:76)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.App$onCreate$1.invoke(App.kt:75)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.AppKt.permitDiskReads(App.kt:138)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.App.onCreate(App.kt:75)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1215)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6727)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.app.ActivityThread.access$1500(ActivityThread.java:248)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2054)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.os.Handler.dispatchMessage(Handler.java:106)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.os.Looper.loopOnce(Looper.java:201)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.os.Looper.loop(Looper.java:288)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at android.app.ActivityThread.main(ActivityThread.java:7841)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at java.lang.reflect.Method.invoke(Native Method)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.android.internal.os.ExecInit.main(ExecInit.java:48)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:355)
12-08 17:15:17.453  6971  6971 E MetadataManager: Caused by: org.json.JSONException: End of input at character 0 of 
12-08 17:15:17.453  6971  6971 E MetadataManager:       at org.json.JSONTokener.syntaxError(JSONTokener.java:460)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at org.json.JSONTokener.nextValue(JSONTokener.java:101)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at org.json.JSONObject.<init>(JSONObject.java:168)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at org.json.JSONObject.<init>(JSONObject.java:185)
12-08 17:15:17.453  6971  6971 E MetadataManager:       at com.stevesoltys.seedvault.metadata.MetadataReaderImpl.decode(MetadataReader.kt:89)
12-08 17:15:17.453  6971  6971 E MetadataManager:       ... 23 more

So looks like the metadata.cache file exists but is 0 bytes. I've had available disk space go to 0 as well (usable from user, not sure about system apps). Can the metadata.cache be rebuilt from the backup files?

crass avatar Dec 09 '23 01:12 crass