[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Stop thrashing on page save failure and save on subsequent runs

2017-04-25 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
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

Stops relying on a ContentObserver to trigger the saved page sync service.
This isn't viable because of the way the ContentObserver works and the way
the DAO works.

Instead, we'll manually kick off saved page syncing after a reading list
sync event (such as happens when the app is launched or after a page is
added to a reading list).

No more thrashing!

Also added logging for successful page saves for dev convenience.

Bug: T162894
Change-Id: I1d0bfd2e2071942f3c7ad977ae271cf78db82235
---
M app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
M app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
M app/src/main/java/org/wikipedia/savedpages/SavedPageSyncService.java
3 files changed, 11 insertions(+), 6 deletions(-)

Approvals:
  Niedzielski: Looks good to me, approved
  jenkins-bot: Verified



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..56d6c4a 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPageObserver.java
@@ -1,16 +1,13 @@
 package org.wikipedia.readinglist.page;
 
 import android.content.Context;
-import android.content.Intent;
 import android.database.ContentObserver;
 import android.net.Uri;
 import android.os.Handler;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
-import org.wikipedia.WikipediaApp;
 import org.wikipedia.database.contract.ReadingListPageContract;
-import org.wikipedia.savedpages.SavedPageSyncService;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -42,7 +39,6 @@
 if (uri.equals(ReadingListPageContract.Disk.URI)) {
 notifyListeners();
 }
-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/sync/ReadingListSynchronizer.java 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
index 2866816..cfd5ea4 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
@@ -1,5 +1,6 @@
 package org.wikipedia.readinglist.sync;
 
+import android.content.Intent;
 import android.os.Handler;
 import android.os.Looper;
 import android.support.annotation.NonNull;
@@ -16,6 +17,7 @@
 import org.wikipedia.readinglist.ReadingListData;
 import org.wikipedia.readinglist.page.ReadingListPage;
 import org.wikipedia.readinglist.page.database.ReadingListDaoProxy;
+import org.wikipedia.savedpages.SavedPageSyncService;
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.useroption.UserOption;
 import org.wikipedia.useroption.dataclient.UserInfo;
@@ -52,12 +54,14 @@
 }
 
 public void sync() {
+// TODO: remove when ready for beta/production
 if (!ReleaseUtil.isPreBetaRelease()) {
-// TODO: remove when ready for beta/production
+syncSavedPages();
 return;
 }
 if (!User.isLoggedIn()) {
 L.d("Not logged in, so skipping sync of reading lists.");
+syncSavedPages();
 return;
 }
 CallbackTask.execute(new CallbackTask.Task() {
@@ -95,6 +99,7 @@
 L.d("Local and remote reading lists are in sync.");
 }
 }
+syncSavedPages();
 
 } catch (IOException e) {
 e.printStackTrace();
@@ -242,4 +247,8 @@
 List lists = 
ReadingListData.instance().queryMruLists(null);
 return new RemoteReadingLists(Prefs.getReadingListSyncRev(), lists);
 }
+
+private void syncSavedPages() {
+WikipediaApp.getInstance().startService(new 
Intent(WikipediaApp.getInstance(), SavedPageSyncService.class));
+}
 }
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 

[MediaWiki-commits] [Gerrit] apps...wikipedia[master]: Stop thrashing on page save failure and save on subsequent runs

2017-04-19 Thread Mholloway (Code Review)
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
---