From 393042896912280dc9dce655f22eaeb12d0eba37 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 1 Aug 2019 09:37:09 +0200 Subject: [PATCH] Retry on compute fails --- .../androidx/room/RoomTrackingLiveData.java | 11 +++++----- patches/room.patch | 20 +++++++++++++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/androidx/room/RoomTrackingLiveData.java b/app/src/main/java/androidx/room/RoomTrackingLiveData.java index 40214ba4cb..8b2350ff8b 100644 --- a/app/src/main/java/androidx/room/RoomTrackingLiveData.java +++ b/app/src/main/java/androidx/room/RoomTrackingLiveData.java @@ -84,15 +84,16 @@ class RoomTrackingLiveData extends LiveData { // as long as it is invalid, keep computing. try { T value = null; - while (mInvalid.compareAndSet(true, false)) { - computed = true; + int retry = 0; + while (mInvalid.compareAndSet(true, false) && !computed) { try { value = mComputeFunction.call(); + computed = true; } catch (Exception e) { + if (++retry > 3) + throw new RuntimeException( + "Exception while computing database live data.", e); eu.faircode.email.Log.w(e); - //throw new RuntimeException("Exception while computing database" - // + " live data.", e); - computed = false; try { Thread.sleep(3000L); } catch (InterruptedException ignored) { diff --git a/patches/room.patch b/patches/room.patch index 671c5bba2d..817a79c7e2 100644 --- a/patches/room.patch +++ b/patches/room.patch @@ -1,15 +1,23 @@ --- /home/marcel/support/room/runtime/src/main/java/androidx/room/RoomTrackingLiveData.java 2019-07-27 12:47:44.950985792 +0200 -+++ app/src/main/java/androidx/room/RoomTrackingLiveData.java 2019-07-29 07:27:21.478734412 +0200 -@@ -89,8 +89,14 @@ class RoomTrackingLiveData extends Li ++++ app/src/main/java/androidx/room/RoomTrackingLiveData.java 2019-08-01 09:33:53.297685740 +0200 +@@ -84,13 +84,20 @@ class RoomTrackingLiveData extends Li + // as long as it is invalid, keep computing. + try { + T value = null; +- while (mInvalid.compareAndSet(true, false)) { +- computed = true; ++ int retry = 0; ++ while (mInvalid.compareAndSet(true, false) && !computed) { try { value = mComputeFunction.call(); ++ computed = true; } catch (Exception e) { - throw new RuntimeException("Exception while computing database" - + " live data.", e); ++ if (++retry > 3) ++ throw new RuntimeException( ++ "Exception while computing database live data.", e); + eu.faircode.email.Log.w(e); -+ //throw new RuntimeException("Exception while computing database" -+ // + " live data.", e); -+ computed = false; + try { + Thread.sleep(3000L); + } catch (InterruptedException ignored) { @@ -17,7 +25,7 @@ } } if (computed) { -@@ -125,6 +131,7 @@ class RoomTrackingLiveData extends Li +@@ -125,6 +132,7 @@ class RoomTrackingLiveData extends Li } } };