Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/349124 )

Change subject: Stop thrashing on page save failure and save on subsequent runs
......................................................................

Stop thrashing on page save failure and save on subsequent runs

This patch does the following:

1. Kicks off the service only for changes to ReadingListPageDisk table.
   Previously, it was also being triggered for changes to the Reading-
   ListPageHttp and ReadingListPage tables as well, or thrice per
   substantive change.  This is because the ContentObserver also notifies
   on changes to those tables depsite being registered for /page/disk.

2. Removes the upsert() calls from startTransaction() and
   failTransaction(), which stops each transaction in the service from
   (twice) again retriggering the service.

3. Added (OR status == OUTDATED) to the SQL query for pending rows, so
   that rows left in an OUTDATED state due to a failure, and no longer
   upserted, will be picked up on subsequent runs and saved as originally
   intended.

Also added logging for successful page saves and made minor cosmetic
changes.

Bug: T162894
Change-Id: I1d0bfd2e2071942f3c7ad977ae271cf78db82235
---
M app/src/main/java/org/wikipedia/database/async/AsyncDao.java
M app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
M 
app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDao.java
M app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java
4 files changed, 7 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/24/349124/1

diff --git a/app/src/main/java/org/wikipedia/database/async/AsyncDao.java 
b/app/src/main/java/org/wikipedia/database/async/AsyncDao.java
index eb0e193..d8302b8 100644
--- a/app/src/main/java/org/wikipedia/database/async/AsyncDao.java
+++ b/app/src/main/java/org/wikipedia/database/async/AsyncDao.java
@@ -47,13 +47,11 @@
 
     protected void startTransaction(@NonNull Row row) {
         row.startTransaction();
-        upsert(row);
     }
 
     protected synchronized void failTransaction(@NonNull Row row) {
         if (completableTransaction(row)) {
             row.failTransaction();
-            upsert(row);
         }
     }
 
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java 
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
index 8ace611..03cf711 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
@@ -41,8 +41,8 @@
     @Override public void onChange(boolean selfChange, Uri uri) {
         if (uri.equals(ReadingListPageContract.Disk.URI)) {
             notifyListeners();
+            WikipediaApp.getInstance().startService(new 
Intent(WikipediaApp.getInstance(), SavedPageSyncService.class));
         }
-        WikipediaApp.getInstance().startService(new 
Intent(WikipediaApp.getInstance(), SavedPageSyncService.class));
     }
 
     public void register(@NonNull Context context) {
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDao.java
 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDao.java
index 54f2336..6e8623c 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDao.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDao.java
@@ -183,10 +183,12 @@
             .replaceAll(":keyCol", 
ReadingListPageContract.Page.KEY.qualifiedName());
 
         private static final String SELECT_ROWS_WITH_LIST_KEY = "',' || 
:listKeyCol || ',' like '%,' || ? || ',%'"
-             .replaceAll(":listKeyCol", 
ReadingListPageContract.Page.LIST_KEYS.qualifiedName());
+            .replaceAll(":listKeyCol", 
ReadingListPageContract.Page.LIST_KEYS.qualifiedName());
 
-        private static String SELECT_ROWS_PENDING_DISK_TRANSACTION = 
":transactionIdCol == :noTransactionId"
+        private static String SELECT_ROWS_PENDING_DISK_TRANSACTION = 
":transactionIdCol == :noTransactionId OR :diskStatusCol == :outdated"
             .replaceAll(":transactionIdCol", 
ReadingListPageContract.DiskWithPage.DISK_TRANSACTION_ID.qualifiedName())
-            .replaceAll(":noTransactionId", 
String.valueOf(AsyncConstant.NO_TRANSACTION_ID));
+            .replaceAll(":noTransactionId", 
String.valueOf(AsyncConstant.NO_TRANSACTION_ID))
+            .replaceAll(":diskStatusCol", 
ReadingListPageContract.DiskWithPage.DISK_STATUS.qualifiedName())
+            .replaceAll(":outdated", 
String.valueOf(DiskStatus.OUTDATED.code()));
     }
 }
diff --git 
a/app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java 
b/app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java
index d37964f..9f29075 100644
--- a/app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java
+++ b/app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java
@@ -142,7 +142,7 @@
             L.e("Failed to save page " + title, e);
             return false;
         }
-
+        L.i("Saved page " + title);
         return true;
     }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/349124
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1d0bfd2e2071942f3c7ad977ae271cf78db82235
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to