2.4 KiB
GEL WorkManager database grows into a long serial history
Klassifikation
CONFIRMED BUG / CONFIRMED enqueue-policy root cause – Medium. Gerät und
Firmware wie BUG-001. Komponente /system/app/gel/gel.apk, AndroidX
WorkManager, GELWorker, Unique-Name GEL_WORK.
Benutzerwirkung
androidx.work.workdb erreichte 229.453.824 Byte plus 524.288-Byte-WAL und
32.768-Byte-SHM. Der feste Unique-Work-Graph benötigte Minuten, um seine
Abhängigkeiten zu traversieren; neue GEL-Intents wurden merklich verzögert.
Erwartetes und tatsächliches Verhalten
Abgeschlossene Telemetriearbeiten sollten begrenzt und prune-fähig bleiben.
Tatsächlich bestand eine jahrelange serielle GEL_WORK-Kette. Nach dem
autorisierten Paketdatenreset begann die DB bei 4.096 Byte; später blieb sie bei
ca. 102.400 Byte (WAL ca. 461 KiB). Der offizielle DiagnosticsWorker zeigte nur
elf sichtbare, erfolgreiche GEL-Arbeiten und keinen Rückstau.
Reproduktion / Beweis
dumpsys dbinfo org.droidtv.gel -v, WorkManager-Diagnosebroadcast und GEL-Logs
verwenden; keine privaten Payloads ausgeben. Belege:
phase3-storage-repair.md; der interne
Live-Validierungsbericht ist aus der kuratierten Veröffentlichung ausgeschlossen.
Root Cause
CONFIRMED: GatheringService.onStartCommand in classes.dex,
code_off=0x50bf0, baut aus jedem Intent einen OneTimeWorkRequest, lädt
GEL_WORK, Policy-Integer 4 und ruft WorkContinuationImpl.enqueue() auf.
Der eingebettete AndroidX-Code bestätigt Wert 4 als APPEND_OR_REPLACE: neue
Arbeit hängt an den aktuellen Blättern. Das erzeugt die jahrelange serielle
Abhängigkeitsgeschichte und verteuert die Blatttraversierung.
Workaround und Fix
Workaround: gezielter GEL-Datenreset nach Backup/Risikoabwägung. Ein bloßes
Ändern von Policy 4 auf KEEP ist nicht sicher, weil GELWorker unterschiedliche
Intents verarbeitet und dabei Ereignisse verloren gingen. Fix: persistente,
begrenzte FIFO/Outbox, Koaleszierung nur bewiesener State-Alarme, ein KEEP-
Drain-Worker und KEEP-Watchdog, Ack erst nach Dispatch. Siehe
ROOT-CAUSE.md.
Regression Tests / Hash
Das Phase-6-Modell bestand 10.000 koaleszierbare Alarme und 10.000 FIFO-
Ereignisse bei O(1) aktivem WorkSpec, begrenzter Queue und Crash-Retry.
gel.apk SHA-256:
29A68E6B09700ED4CCDF312C0B99EEE0C3F67E329A537FE87ED4341A71D383D7.