diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index 123ce4396f9b0d1e08a7c888792e5bca4cd304f7..be4aba0cfcdf12eb37b5fd074e7f8c7e2766f5c9 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -259,31 +259,30 @@ public interface DatabaseComponent { Collection<LocalAuthor> getLocalAuthors(Transaction txn) throws DbException; /** - * Returns the IDs of any messages that need to be validated by the given - * client. + * Returns the IDs of any messages that need to be validated. * <p/> * Read-only. */ - Collection<MessageId> getMessagesToValidate(Transaction txn, ClientId c) + Collection<MessageId> getMessagesToValidate(Transaction txn) throws DbException; /** - * Returns the IDs of any messages that are valid but pending delivery due - * to dependencies on other messages for the given client. + * Returns the IDs of any messages that are pending delivery due to + * dependencies on other messages. * <p/> * Read-only. */ - Collection<MessageId> getPendingMessages(Transaction txn, ClientId c) + Collection<MessageId> getPendingMessages(Transaction txn) throws DbException; /** - * Returns the IDs of any messages from the given client - * that have a shared dependent, but are still not shared themselves. + * Returns the IDs of any messages that have shared dependents but have + * not yet been shared themselves. * <p/> * Read-only. */ - Collection<MessageId> getMessagesToShare(Transaction txn, - ClientId c) throws DbException; + Collection<MessageId> getMessagesToShare(Transaction txn) + throws DbException; /** * Returns the message with the given ID, in serialised form, or null if diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 0a6e54fbd85d47b5417444ab5b0c2b0513004289..28666f9a3231ef7c2551fa292e5e4f285a7d209c 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -424,31 +424,27 @@ interface Database<T> { throws DbException; /** - * Returns the IDs of any messages that need to be validated by the given - * client. + * Returns the IDs of any messages that need to be validated. * <p/> * Read-only. */ - Collection<MessageId> getMessagesToValidate(T txn, ClientId c) - throws DbException; + Collection<MessageId> getMessagesToValidate(T txn) throws DbException; /** - * Returns the IDs of any messages that are still pending due to - * dependencies to other messages for the given client. + * Returns the IDs of any messages that are pending delivery due to + * dependencies on other messages. * <p/> * Read-only. */ - Collection<MessageId> getPendingMessages(T txn, ClientId c) - throws DbException; + Collection<MessageId> getPendingMessages(T txn) throws DbException; /** - * Returns the IDs of any messages from the given client - * that have a shared dependent, but are still not shared themselves. + * Returns the IDs of any messages that have a shared dependent but have + * not yet been shared themselves. * <p/> * Read-only. */ - Collection<MessageId> getMessagesToShare(T txn, ClientId c) - throws DbException; + Collection<MessageId> getMessagesToShare(T txn) throws DbException; /** * Returns the next time (in milliseconds since the Unix epoch) when a diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index 5809c09eef279fb8b284c31bfb5b049027d28a57..c97a63a611c3f868627cb92fbc3a924d94371bf1 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -455,24 +455,24 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } @Override - public Collection<MessageId> getMessagesToValidate(Transaction transaction, - ClientId c) throws DbException { + public Collection<MessageId> getMessagesToValidate(Transaction transaction) + throws DbException { T txn = unbox(transaction); - return db.getMessagesToValidate(txn, c); + return db.getMessagesToValidate(txn); } @Override - public Collection<MessageId> getPendingMessages(Transaction transaction, - ClientId c) throws DbException { + public Collection<MessageId> getPendingMessages(Transaction transaction) + throws DbException { T txn = unbox(transaction); - return db.getPendingMessages(txn, c); + return db.getPendingMessages(txn); } @Override - public Collection<MessageId> getMessagesToShare( - Transaction transaction, ClientId c) throws DbException { + public Collection<MessageId> getMessagesToShare(Transaction transaction) + throws DbException { T txn = unbox(transaction); - return db.getMessagesToShare(txn, c); + return db.getMessagesToShare(txn); } @Nullable @@ -573,7 +573,7 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { @Override public long getNextSendTime(Transaction transaction, ContactId c) - throws DbException { + throws DbException { T txn = unbox(transaction); return db.getNextSendTime(txn, c); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index e71f30c587215dda0cd8510981258e5fdc94c548..02f2876b0edd4f73fb27e8fa3f7f4ff96f267ea5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -1868,28 +1868,26 @@ abstract class JdbcDatabase implements Database<Connection> { } @Override - public Collection<MessageId> getMessagesToValidate(Connection txn, - ClientId c) throws DbException { - return getMessagesInState(txn, c, UNKNOWN); + public Collection<MessageId> getMessagesToValidate(Connection txn) + throws DbException { + return getMessagesInState(txn, UNKNOWN); } @Override - public Collection<MessageId> getPendingMessages(Connection txn, - ClientId c) throws DbException { - return getMessagesInState(txn, c, PENDING); + public Collection<MessageId> getPendingMessages(Connection txn) + throws DbException { + return getMessagesInState(txn, PENDING); } - private Collection<MessageId> getMessagesInState(Connection txn, ClientId c, + private Collection<MessageId> getMessagesInState(Connection txn, State state) throws DbException { PreparedStatement ps = null; ResultSet rs = null; try { - String sql = "SELECT messageId FROM messages AS m" - + " JOIN groups AS g ON m.groupId = g.groupId" - + " WHERE state = ? AND clientId = ? AND raw IS NOT NULL"; + String sql = "SELECT messageId FROM messages" + + " WHERE state = ? AND raw IS NOT NULL"; ps = txn.prepareStatement(sql); ps.setInt(1, state.getValue()); - ps.setString(2, c.getString()); rs = ps.executeQuery(); List<MessageId> ids = new ArrayList<>(); while (rs.next()) ids.add(new MessageId(rs.getBytes(1))); @@ -1904,7 +1902,7 @@ abstract class JdbcDatabase implements Database<Connection> { } @Override - public Collection<MessageId> getMessagesToShare(Connection txn, ClientId c) + public Collection<MessageId> getMessagesToShare(Connection txn) throws DbException { PreparedStatement ps = null; ResultSet rs = null; @@ -1914,12 +1912,10 @@ abstract class JdbcDatabase implements Database<Connection> { + " ON m.messageId = d.dependencyId" + " JOIN messages AS m1" + " ON d.messageId = m1.messageId" - + " JOIN groups AS g" - + " ON m.groupId = g.groupId" - + " WHERE m.shared = FALSE AND m1.shared = TRUE" - + " AND g.clientId = ?"; + + " WHERE m.state = ?" + + " AND m.shared = FALSE AND m1.shared = TRUE"; ps = txn.prepareStatement(sql); - ps.setString(1, c.getString()); + ps.setInt(1, DELIVERED.getValue()); rs = ps.executeQuery(); List<MessageId> ids = new ArrayList<>(); while (rs.next()) ids.add(new MessageId(rs.getBytes(1))); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java index 3184a11082f97dacd3266fa2c599a6e96ee2f8e8..a9c79c33215ca42702a6fed86fbff31429adc527 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java @@ -71,11 +71,9 @@ class ValidationManagerImpl implements ValidationManager, Service, @Override public void startService() { if (used.getAndSet(true)) throw new IllegalStateException(); - for (ClientId c : validators.keySet()) { - validateOutstandingMessagesAsync(c); - deliverOutstandingMessagesAsync(c); - shareOutstandingMessagesAsync(c); - } + validateOutstandingMessagesAsync(); + deliverOutstandingMessagesAsync(); + shareOutstandingMessagesAsync(); } @Override @@ -93,17 +91,17 @@ class ValidationManagerImpl implements ValidationManager, Service, hooks.put(c, hook); } - private void validateOutstandingMessagesAsync(ClientId c) { - dbExecutor.execute(() -> validateOutstandingMessages(c)); + private void validateOutstandingMessagesAsync() { + dbExecutor.execute(this::validateOutstandingMessages); } @DatabaseExecutor - private void validateOutstandingMessages(ClientId c) { + private void validateOutstandingMessages() { try { Queue<MessageId> unvalidated = new LinkedList<>(); Transaction txn = db.startTransaction(true); try { - unvalidated.addAll(db.getMessagesToValidate(txn, c)); + unvalidated.addAll(db.getMessagesToValidate(txn)); db.commitTransaction(txn); } finally { db.endTransaction(txn); @@ -148,17 +146,17 @@ class ValidationManagerImpl implements ValidationManager, Service, } } - private void deliverOutstandingMessagesAsync(ClientId c) { - dbExecutor.execute(() -> deliverOutstandingMessages(c)); + private void deliverOutstandingMessagesAsync() { + dbExecutor.execute(this::deliverOutstandingMessages); } @DatabaseExecutor - private void deliverOutstandingMessages(ClientId c) { + private void deliverOutstandingMessages() { try { Queue<MessageId> pending = new LinkedList<>(); Transaction txn = db.startTransaction(true); try { - pending.addAll(db.getPendingMessages(txn, c)); + pending.addAll(db.getPendingMessages(txn)); db.commitTransaction(txn); } finally { db.endTransaction(txn); @@ -353,17 +351,17 @@ class ValidationManagerImpl implements ValidationManager, Service, return pending; } - private void shareOutstandingMessagesAsync(ClientId c) { - dbExecutor.execute(() -> shareOutstandingMessages(c)); + private void shareOutstandingMessagesAsync() { + dbExecutor.execute(this::shareOutstandingMessages); } @DatabaseExecutor - private void shareOutstandingMessages(ClientId c) { + private void shareOutstandingMessages() { try { Queue<MessageId> toShare = new LinkedList<>(); Transaction txn = db.startTransaction(true); try { - toShare.addAll(db.getMessagesToShare(txn, c)); + toShare.addAll(db.getMessagesToShare(txn)); db.commitTransaction(txn); } finally { db.endTransaction(txn); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java index 8424c0fec074e6311a28becaf85444d70700011f..df308cd7fdec81530272925ba624d51db5d9fec7 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java @@ -477,30 +477,30 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { @Test public void testGetMessagesToShare() throws Exception { - String name = "getMessagesToShare(T, ClientId)"; + String name = "getMessagesToShare(T)"; benchmark(name, db -> { Connection txn = db.startTransaction(); - db.getMessagesToShare(txn, pickRandom(clientIds)); + db.getMessagesToShare(txn); db.commitTransaction(txn); }); } @Test public void testGetMessagesToValidate() throws Exception { - String name = "getMessagesToValidate(T, ClientId)"; + String name = "getMessagesToValidate(T)"; benchmark(name, db -> { Connection txn = db.startTransaction(); - db.getMessagesToValidate(txn, pickRandom(clientIds)); + db.getMessagesToValidate(txn); db.commitTransaction(txn); }); } @Test public void testGetPendingMessages() throws Exception { - String name = "getPendingMessages(T, ClientId)"; + String name = "getPendingMessages(T)"; benchmark(name, db -> { Connection txn = db.startTransaction(); - db.getPendingMessages(txn, pickRandom(clientIds)); + db.getPendingMessages(txn); db.commitTransaction(txn); }); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index 81d1c902578e1eaa6f7b6e3ba84fda69ad9a5b0a..c21d5b26a4bd050b387a8a0f07cee7b9dfadc0d9 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -1376,12 +1376,12 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { Collection<MessageId> result; // Retrieve messages to be validated - result = db.getMessagesToValidate(txn, clientId); + result = db.getMessagesToValidate(txn); assertEquals(1, result.size()); assertTrue(result.contains(mId1)); // Retrieve pending messages - result = db.getPendingMessages(txn, clientId); + result = db.getPendingMessages(txn); assertEquals(1, result.size()); assertTrue(result.contains(mId3)); @@ -1416,8 +1416,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { db.addMessageDependency(txn, groupId, mId4, mId3); // Retrieve messages to be shared - Collection<MessageId> result = - db.getMessagesToShare(txn, clientId); + Collection<MessageId> result = db.getMessagesToShare(txn); assertEquals(2, result.size()); assertTrue(result.contains(mId2)); assertTrue(result.contains(mId3)); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java index c2285bd5f61694f9feca500ccf2e272141e3f88d..cf6b73fa028eb9adf465eb0debbe2e76dc1d78b5 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java @@ -100,21 +100,21 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // validateOutstandingMessages() oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); // deliverOutstandingMessages() oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getPendingMessages(txn1, clientId); + oneOf(db).getPendingMessages(txn1); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn1); oneOf(db).endTransaction(txn1); // shareOutstandingMessages() oneOf(db).startTransaction(true); will(returnValue(txn2)); - oneOf(db).getMessagesToShare(txn2, clientId); + oneOf(db).getMessagesToShare(txn2); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn2); oneOf(db).endTransaction(txn2); @@ -138,7 +138,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to validate oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Arrays.asList(messageId, messageId1))); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); @@ -199,14 +199,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get pending messages to deliver oneOf(db).startTransaction(true); will(returnValue(txn5)); - oneOf(db).getPendingMessages(txn5, clientId); + oneOf(db).getPendingMessages(txn5); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn5); oneOf(db).endTransaction(txn5); // Get messages to share oneOf(db).startTransaction(true); will(returnValue(txn6)); - oneOf(db).getMessagesToShare(txn6, clientId); + oneOf(db).getMessagesToShare(txn6); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn6); oneOf(db).endTransaction(txn6); @@ -227,14 +227,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to validate oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); // Get pending messages to deliver oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getPendingMessages(txn1, clientId); + oneOf(db).getPendingMessages(txn1); will(returnValue(Collections.singletonList(messageId))); oneOf(db).commitTransaction(txn1); oneOf(db).endTransaction(txn1); @@ -292,7 +292,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to share oneOf(db).startTransaction(true); will(returnValue(txn4)); - oneOf(db).getMessagesToShare(txn4, clientId); + oneOf(db).getMessagesToShare(txn4); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn4); oneOf(db).endTransaction(txn4); @@ -313,14 +313,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // No messages to validate oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); // No pending messages to deliver oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getPendingMessages(txn1, clientId); + oneOf(db).getPendingMessages(txn1); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn1); oneOf(db).endTransaction(txn1); @@ -328,7 +328,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to share oneOf(db).startTransaction(true); will(returnValue(txn2)); - oneOf(db).getMessagesToShare(txn2, clientId); + oneOf(db).getMessagesToShare(txn2); will(returnValue(Collections.singletonList(messageId))); oneOf(db).commitTransaction(txn2); oneOf(db).endTransaction(txn2); @@ -416,7 +416,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to validate oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Arrays.asList(messageId, messageId1))); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); @@ -457,14 +457,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get pending messages to deliver oneOf(db).startTransaction(true); will(returnValue(txn4)); - oneOf(db).getPendingMessages(txn4, clientId); + oneOf(db).getPendingMessages(txn4); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn4); oneOf(db).endTransaction(txn4); // Get messages to share oneOf(db).startTransaction(true); will(returnValue(txn5)); - oneOf(db).getMessagesToShare(txn5, clientId); + oneOf(db).getMessagesToShare(txn5); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn5); oneOf(db).endTransaction(txn5); @@ -487,7 +487,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get messages to validate oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getMessagesToValidate(txn, clientId); + oneOf(db).getMessagesToValidate(txn); will(returnValue(Arrays.asList(messageId, messageId1))); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); @@ -533,14 +533,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Get pending messages to deliver oneOf(db).startTransaction(true); will(returnValue(txn4)); - oneOf(db).getPendingMessages(txn4, clientId); + oneOf(db).getPendingMessages(txn4); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn4); oneOf(db).endTransaction(txn4); // Get messages to share oneOf(db).startTransaction(true); will(returnValue(txn5)); - oneOf(db).getMessagesToShare(txn5, clientId); + oneOf(db).getMessagesToShare(txn5); will(returnValue(Collections.emptyList())); oneOf(db).commitTransaction(txn5); oneOf(db).endTransaction(txn5);