From cac841d8e6d05cf4478c391bfb863112c735c926 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 4 Oct 2021 15:52:17 -0400 Subject: [PATCH] Flush logs before trimming to size. There are situations where we may be hitting our SQLITE_BUSY timeout when we go to trim. One possibility is that we may have a large ongoing write when we go to trim. So, this change just makes sure we're caught up before we go to trim, which is the simplest thing we can do to address this. It's not a foolproof solution though, so if we still see it crop up, we'll just have to re-route all log operations through the single thread we have setup in the PersistentLogger or something. --- .../java/org/thoughtcrime/securesms/ApplicationContext.java | 5 ++++- .../securesms/logsubmit/SubmitDebugLogRepository.java | 1 + .../securesms/logsubmit/SubmitDebugLogViewModel.java | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index d976840f6..aa0113dab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -258,7 +258,10 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr SignalProtocolLoggerProvider.setProvider(new CustomSignalProtocolLogger()); - SignalExecutors.UNBOUNDED.execute(() -> LogDatabase.getInstance(this).trimToSize()); + SignalExecutors.UNBOUNDED.execute(() -> { + Log.blockUntilAllWritesFinished(); + LogDatabase.getInstance(this).trimToSize(); + }); } private void initializeCrashHandling() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java index 96a235eb3..88dc806b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -104,6 +104,7 @@ public class SubmitDebugLogRepository { public void buildAndSubmitLog(@NonNull Callback> callback) { SignalExecutors.UNBOUNDED.execute(() -> { + Log.blockUntilAllWritesFinished(); LogDatabase.getInstance(context).trimToSize(); callback.onResult(submitLogInternal(System.currentTimeMillis(), getPrefixLogLinesInternal(), Tracer.getInstance().serialize())); }); diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java index f2d8183ab..3fd178138 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java @@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.ThreadUtil; +import org.signal.core.util.logging.Log; import org.signal.core.util.tracing.Tracer; import org.signal.paging.PagedData; import org.signal.paging.PagingConfig; @@ -43,6 +44,7 @@ public class SubmitDebugLogViewModel extends ViewModel { repo.getPrefixLogLines(staticLines -> { this.staticLines.addAll(staticLines); + Log.blockUntilAllWritesFinished(); LogDatabase.getInstance(ApplicationDependencies.getApplication()).trimToSize(); LogDataSource dataSource = new LogDataSource(ApplicationDependencies.getApplication(), staticLines, firstViewTime);