Create a write-through cache for PendingRetryReceiptDatabase.

This commit is contained in:
Greyson Parrelli
2021-07-01 12:56:25 -04:00
committed by Alex Hart
parent 0921ebe5f1
commit 62040d06b4
9 changed files with 152 additions and 34 deletions

View File

@@ -13,9 +13,9 @@ import androidx.annotation.WorkerThread;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessageDatabase;
import org.thoughtcrime.securesms.database.PendingRetryReceiptDatabase;
import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.database.PendingRetryReceiptCache;
import org.thoughtcrime.securesms.util.FeatureFlags;
@@ -26,13 +26,13 @@ public final class PendingRetryReceiptManager extends TimedEventManager<PendingR
private static final String TAG = Log.tag(PendingRetryReceiptManager.class);
private final PendingRetryReceiptDatabase pendingDatabase;
private final MessageDatabase messageDatabase;
private final PendingRetryReceiptCache pendingCache;
private final MessageDatabase messageDatabase;
public PendingRetryReceiptManager(@NonNull Application application) {
super(application, "PendingRetryReceiptManager");
this.pendingDatabase = DatabaseFactory.getPendingRetryReceiptDatabase(application);
this.pendingCache = ApplicationDependencies.getPendingRetryReceiptCache();
this.messageDatabase = DatabaseFactory.getSmsDatabase(application);
scheduleIfNecessary();
@@ -41,7 +41,7 @@ public final class PendingRetryReceiptManager extends TimedEventManager<PendingR
@WorkerThread
@Override
protected @Nullable PendingRetryReceiptModel getNextClosestEvent() {
PendingRetryReceiptModel model = pendingDatabase.getOldest();
PendingRetryReceiptModel model = pendingCache.getOldest();
if (model != null) {
Log.i(TAG, "Next closest expiration is in " + getDelayForEvent(model) + " ms for timestamp " + model.getSentTimestamp() + ".");
@@ -57,7 +57,7 @@ public final class PendingRetryReceiptManager extends TimedEventManager<PendingR
protected void executeEvent(@NonNull PendingRetryReceiptModel event) {
Log.w(TAG, "It's been " + (System.currentTimeMillis() - event.getReceivedTimestamp()) + " ms since this retry receipt was received. Showing an error.");
messageDatabase.insertBadDecryptMessage(event.getAuthor(), event.getAuthorDevice(), event.getSentTimestamp(), event.getReceivedTimestamp(), event.getThreadId());
pendingDatabase.delete(event.getId());
pendingCache.delete(event);
}
@WorkerThread