From 2cce0f5fe20e48e171dbaf871bcde4293b8fa5c9 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 29 Apr 2019 12:02:10 +0100 Subject: [PATCH] Remove OpenDatabaseHook priorities. --- .../api/lifecycle/LifecycleManager.java | 9 ++++---- .../bramble/identity/IdentityModule.java | 4 +--- .../lifecycle/LifecycleManagerImpl.java | 17 +++++--------- .../bramble/properties/PropertiesModule.java | 4 +--- .../bramble/versioning/VersioningModule.java | 4 +--- .../lifecycle/LifecycleManagerImplTest.java | 22 ++++++------------- .../bramble/test/TestLifecycleModule.java | 4 +--- .../briarproject/briar/android/AppModule.java | 3 +-- .../briarproject/briar/blog/BlogModule.java | 3 +-- .../briarproject/briar/feed/FeedModule.java | 4 +--- .../introduction/IntroductionModule.java | 3 +-- .../briar/messaging/MessagingModule.java | 3 +-- .../invitation/GroupInvitationModule.java | 4 +--- .../briar/sharing/SharingModule.java | 6 ++--- 14 files changed, 28 insertions(+), 62 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/lifecycle/LifecycleManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/lifecycle/LifecycleManager.java index 4bc82918a..b5980e4ba 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/lifecycle/LifecycleManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/lifecycle/LifecycleManager.java @@ -4,7 +4,6 @@ import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; -import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.util.concurrent.ExecutorService; @@ -48,7 +47,7 @@ public interface LifecycleManager { * {@link Service services} are started. This method should be called * before {@link #startServices(SecretKey)}. */ - void registerOpenDatabaseHook(OpenDatabaseHook hook, Priority p); + void registerOpenDatabaseHook(OpenDatabaseHook hook); /** * Registers a {@link Service} to be started and stopped. This method @@ -99,10 +98,10 @@ public interface LifecycleManager { LifecycleState getLifecycleState(); interface OpenDatabaseHook { - - enum Priority {EARLY, NORMAL, LATE} - /** + * Called when the database is being opened, before + * {@link #waitForDatabase()} returns. + * * @param txn A read-write transaction */ void onDatabaseOpened(Transaction txn) throws DbException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java index 1457b89e0..725e931e9 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/identity/IdentityModule.java @@ -10,8 +10,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.EARLY; - @Module public class IdentityModule { @@ -29,7 +27,7 @@ public class IdentityModule { @Singleton IdentityManager provideIdentityManager(LifecycleManager lifecycleManager, IdentityManagerImpl identityManager) { - lifecycleManager.registerOpenDatabaseHook(identityManager, EARLY); + lifecycleManager.registerOpenDatabaseHook(identityManager); return identityManager; } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java index a87d6bdf2..d749f616a 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/lifecycle/LifecycleManagerImpl.java @@ -1,6 +1,5 @@ package org.briarproject.bramble.lifecycle; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.db.DataTooNewException; import org.briarproject.bramble.api.db.DataTooOldException; @@ -9,13 +8,11 @@ import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.MigrationListener; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.lifecycle.LifecycleManager; -import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority; import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.lifecycle.ServiceException; import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; @@ -26,7 +23,6 @@ import java.util.logging.Logger; import javax.annotation.concurrent.ThreadSafe; import javax.inject.Inject; -import static java.util.Collections.sort; import static java.util.logging.Level.FINE; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; @@ -57,7 +53,7 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener { private final DatabaseComponent db; private final EventBus eventBus; private final List services; - private final List> openDatabaseHooks; + private final List openDatabaseHooks; private final List executors; private final Semaphore startStopSemaphore = new Semaphore(1); private final CountDownLatch dbLatch = new CountDownLatch(1); @@ -83,12 +79,12 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener { } @Override - public void registerOpenDatabaseHook(OpenDatabaseHook hook, Priority p) { + public void registerOpenDatabaseHook(OpenDatabaseHook hook) { if (LOG.isLoggable(INFO)) { LOG.info("Registering open database hook " + hook.getClass().getSimpleName()); } - openDatabaseHooks.add(new Pair<>(hook, p)); + openDatabaseHooks.add(hook); } @Override @@ -109,13 +105,10 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener { boolean reopened = db.open(dbKey, this); if (reopened) logDuration(LOG, "Reopening database", start); else logDuration(LOG, "Creating database", start); - List> hooks = - new ArrayList<>(openDatabaseHooks); - sort(hooks, (a, b) -> a.getSecond().compareTo(b.getSecond())); + db.transaction(false, txn -> { - for (Pair pair : hooks) { + for (OpenDatabaseHook hook : openDatabaseHooks) { long start1 = now(); - OpenDatabaseHook hook = pair.getFirst(); hook.onDatabaseOpened(txn); if (LOG.isLoggable(FINE)) { logDuration(LOG, "Calling open database hook " diff --git a/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java index 5e668f295..80d4778f4 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/properties/PropertiesModule.java @@ -15,7 +15,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.bramble.api.properties.TransportPropertyManager.CLIENT_ID; import static org.briarproject.bramble.api.properties.TransportPropertyManager.MAJOR_VERSION; import static org.briarproject.bramble.api.properties.TransportPropertyManager.MINOR_VERSION; @@ -49,8 +48,7 @@ public class PropertiesModule { ValidationManager validationManager, ContactManager contactManager, ClientVersioningManager clientVersioningManager, TransportPropertyManagerImpl transportPropertyManager) { - lifecycleManager.registerOpenDatabaseHook(transportPropertyManager, - NORMAL); + lifecycleManager.registerOpenDatabaseHook(transportPropertyManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, transportPropertyManager); contactManager.registerContactHook(transportPropertyManager); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/versioning/VersioningModule.java b/bramble-core/src/main/java/org/briarproject/bramble/versioning/VersioningModule.java index dda209e37..e00b85f47 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/versioning/VersioningModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/versioning/VersioningModule.java @@ -14,7 +14,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.bramble.api.versioning.ClientVersioningManager.CLIENT_ID; import static org.briarproject.bramble.api.versioning.ClientVersioningManager.MAJOR_VERSION; @@ -35,8 +34,7 @@ public class VersioningModule { ClientVersioningManagerImpl clientVersioningManager, LifecycleManager lifecycleManager, ContactManager contactManager, ValidationManager validationManager) { - lifecycleManager.registerOpenDatabaseHook(clientVersioningManager, - NORMAL); + lifecycleManager.registerOpenDatabaseHook(clientVersioningManager); lifecycleManager.registerService(clientVersioningManager); contactManager.registerContactHook(clientVersioningManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, diff --git a/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/LifecycleManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/LifecycleManagerImplTest.java index 37706d051..ee6e4ae55 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/LifecycleManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/lifecycle/LifecycleManagerImplTest.java @@ -11,13 +11,9 @@ import org.briarproject.bramble.test.DbExpectations; import org.junit.Before; import org.junit.Test; -import java.util.ArrayList; -import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; -import static java.util.Arrays.asList; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.EARLY; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.LATE; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; +import static junit.framework.TestCase.assertTrue; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult.SUCCESS; import static org.briarproject.bramble.test.TestUtils.getSecretKey; import static org.junit.Assert.assertEquals; @@ -37,12 +33,10 @@ public class LifecycleManagerImplTest extends BrambleMockTestCase { } @Test - public void testOpenDatabaseHooksRunInOrderOfPriority() throws Exception { + public void testOpenDatabaseHooksAreCalledAtStartup() throws Exception { Transaction txn = new Transaction(null, false); - List results = new ArrayList<>(); - OpenDatabaseHook hook1 = transaction -> results.add(1); - OpenDatabaseHook hook2 = transaction -> results.add(2); - OpenDatabaseHook hook3 = transaction -> results.add(3); + AtomicBoolean called = new AtomicBoolean(false); + OpenDatabaseHook hook = transaction -> called.set(true); context.checking(new DbExpectations() {{ oneOf(db).open(dbKey, lifecycleManager); @@ -51,11 +45,9 @@ public class LifecycleManagerImplTest extends BrambleMockTestCase { allowing(eventBus).broadcast(with(any(LifecycleEvent.class))); }}); - lifecycleManager.registerOpenDatabaseHook(hook1, LATE); - lifecycleManager.registerOpenDatabaseHook(hook2, NORMAL); - lifecycleManager.registerOpenDatabaseHook(hook3, EARLY); + lifecycleManager.registerOpenDatabaseHook(hook); assertEquals(SUCCESS, lifecycleManager.startServices(dbKey)); - assertEquals(asList(3, 2, 1), results); + assertTrue(called.get()); } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestLifecycleModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestLifecycleModule.java index 5d4d627b2..70430a94c 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestLifecycleModule.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestLifecycleModule.java @@ -3,7 +3,6 @@ package org.briarproject.bramble.test; import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.LifecycleManager; -import org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority; import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.lifecycle.ShutdownManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -32,8 +31,7 @@ public class TestLifecycleModule { } @Override - public void registerOpenDatabaseHook(OpenDatabaseHook hook, - Priority p) { + public void registerOpenDatabaseHook(OpenDatabaseHook hook) { } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index c82cd4d30..c3ccaa9cc 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -56,7 +56,6 @@ import dagger.Provides; import static android.content.Context.MODE_PRIVATE; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX; @@ -227,7 +226,7 @@ public class AppModule { @Singleton RecentEmoji provideRecentEmoji(LifecycleManager lifecycleManager, RecentEmojiImpl recentEmoji) { - lifecycleManager.registerOpenDatabaseHook(recentEmoji, NORMAL); + lifecycleManager.registerOpenDatabaseHook(recentEmoji); return recentEmoji; } } diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java index ff60e9dd8..081df929d 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogModule.java @@ -18,7 +18,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID; import static org.briarproject.briar.api.blog.BlogManager.MAJOR_VERSION; @@ -37,7 +36,7 @@ public class BlogModule { BlogManager provideBlogManager(BlogManagerImpl blogManager, LifecycleManager lifecycleManager, ContactManager contactManager, ValidationManager validationManager) { - lifecycleManager.registerOpenDatabaseHook(blogManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(blogManager); contactManager.registerContactHook(blogManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, blogManager); diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java index 5b82fa948..d873c0cd6 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedModule.java @@ -11,8 +11,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; - @Module public class FeedModule { @@ -26,7 +24,7 @@ public class FeedModule { FeedManager provideFeedManager(FeedManagerImpl feedManager, LifecycleManager lifecycleManager, EventBus eventBus, BlogManager blogManager) { - lifecycleManager.registerOpenDatabaseHook(feedManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(feedManager); eventBus.addListener(feedManager); blogManager.registerRemoveBlogHook(feedManager); return feedManager; diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java index 4f326ba2e..89d1f1fb7 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/IntroductionModule.java @@ -16,7 +16,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.briar.api.introduction.IntroductionManager.CLIENT_ID; import static org.briarproject.briar.api.introduction.IntroductionManager.MAJOR_VERSION; import static org.briarproject.briar.api.introduction.IntroductionManager.MINOR_VERSION; @@ -52,7 +51,7 @@ public class IntroductionModule { ConversationManager conversationManager, ClientVersioningManager clientVersioningManager, IntroductionManagerImpl introductionManager) { - lifecycleManager.registerOpenDatabaseHook(introductionManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(introductionManager); contactManager.registerContactHook(introductionManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, introductionManager); diff --git a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java index 2a64fd1cd..8e2e4e042 100644 --- a/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/messaging/MessagingModule.java @@ -17,7 +17,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.briar.api.messaging.MessagingManager.CLIENT_ID; import static org.briarproject.briar.api.messaging.MessagingManager.MAJOR_VERSION; import static org.briarproject.briar.api.messaging.MessagingManager.MINOR_VERSION; @@ -59,7 +58,7 @@ public class MessagingModule { ConversationManager conversationManager, ClientVersioningManager clientVersioningManager, MessagingManagerImpl messagingManager) { - lifecycleManager.registerOpenDatabaseHook(messagingManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(messagingManager); contactManager.registerContactHook(messagingManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, messagingManager); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java index 7ec8512c6..0628357e3 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationModule.java @@ -19,7 +19,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.CLIENT_ID; import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.MAJOR_VERSION; import static org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager.MINOR_VERSION; @@ -43,8 +42,7 @@ public class GroupInvitationModule { PrivateGroupManager privateGroupManager, ConversationManager conversationManager, ClientVersioningManager clientVersioningManager) { - lifecycleManager.registerOpenDatabaseHook(groupInvitationManager, - NORMAL); + lifecycleManager.registerOpenDatabaseHook(groupInvitationManager); validationManager.registerIncomingMessageHook(CLIENT_ID, MAJOR_VERSION, groupInvitationManager); contactManager.registerContactHook(groupInvitationManager); diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java index 8d460f369..0bab71a49 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingModule.java @@ -25,8 +25,6 @@ import javax.inject.Singleton; import dagger.Module; import dagger.Provides; -import static org.briarproject.bramble.api.lifecycle.LifecycleManager.OpenDatabaseHook.Priority.NORMAL; - @Module public class SharingModule { @@ -78,7 +76,7 @@ public class SharingModule { ConversationManager conversationManager, BlogManager blogManager, ClientVersioningManager clientVersioningManager, BlogSharingManagerImpl blogSharingManager) { - lifecycleManager.registerOpenDatabaseHook(blogSharingManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(blogSharingManager); contactManager.registerContactHook(blogSharingManager); validationManager.registerIncomingMessageHook( BlogSharingManager.CLIENT_ID, BlogSharingManager.MAJOR_VERSION, @@ -137,7 +135,7 @@ public class SharingModule { ConversationManager conversationManager, ForumManager forumManager, ClientVersioningManager clientVersioningManager, ForumSharingManagerImpl forumSharingManager) { - lifecycleManager.registerOpenDatabaseHook(forumSharingManager, NORMAL); + lifecycleManager.registerOpenDatabaseHook(forumSharingManager); contactManager.registerContactHook(forumSharingManager); validationManager.registerIncomingMessageHook( ForumSharingManager.CLIENT_ID,