Remove raw message method from DatabaseComponent interface.

This commit is contained in:
akwizgran
2018-08-24 16:21:04 +01:00
parent 0fce224d88
commit 5626f3d761
7 changed files with 25 additions and 86 deletions

View File

@@ -306,15 +306,6 @@ public interface DatabaseComponent {
Collection<MessageId> getMessagesToShare(Transaction txn) Collection<MessageId> getMessagesToShare(Transaction txn)
throws DbException; throws DbException;
/**
* Returns the message with the given ID, in serialised form.
* <p/>
* Read-only.
*
* @throws MessageDeletedException if the message has been deleted
*/
byte[] getRawMessage(Transaction txn, MessageId m) throws DbException;
/** /**
* Returns the metadata for all delivered messages in the given group. * Returns the metadata for all delivered messages in the given group.
* <p/> * <p/>

View File

@@ -127,7 +127,7 @@ class ClientHelperImpl implements ClientHelper {
@Override @Override
public Message getMessage(Transaction txn, MessageId m) throws DbException { public Message getMessage(Transaction txn, MessageId m) throws DbException {
return messageFactory.createMessage(m, db.getRawMessage(txn, m)); return db.getMessage(txn, m);
} }
@Override @Override
@@ -147,7 +147,7 @@ class ClientHelperImpl implements ClientHelper {
@Override @Override
public BdfList getMessageAsList(Transaction txn, MessageId m) public BdfList getMessageAsList(Transaction txn, MessageId m)
throws DbException, FormatException { throws DbException, FormatException {
byte[] raw = db.getRawMessage(txn, m); byte[] raw = db.getMessage(txn, m).getRaw();
return toList(raw, MESSAGE_HEADER_LENGTH, return toList(raw, MESSAGE_HEADER_LENGTH,
raw.length - MESSAGE_HEADER_LENGTH); raw.length - MESSAGE_HEADER_LENGTH);
} }

View File

@@ -496,15 +496,6 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
return db.getMessagesToShare(txn); return db.getMessagesToShare(txn);
} }
@Override
public byte[] getRawMessage(Transaction transaction, MessageId m)
throws DbException {
T txn = unbox(transaction);
if (!db.containsMessage(txn, m))
throw new NoSuchMessageException();
return db.getRawMessage(txn, m);
}
@Override @Override
public Map<MessageId, Metadata> getMessageMetadata(Transaction transaction, public Map<MessageId, Metadata> getMessageMetadata(Transaction transaction,
GroupId g) throws DbException { GroupId g) throws DbException {

View File

@@ -16,7 +16,6 @@ import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.InvalidMessageException;
import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.MessageContext; import org.briarproject.bramble.api.sync.MessageContext;
import org.briarproject.bramble.api.sync.MessageFactory;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.sync.ValidationManager; import org.briarproject.bramble.api.sync.ValidationManager;
import org.briarproject.bramble.api.sync.event.MessageAddedEvent; import org.briarproject.bramble.api.sync.event.MessageAddedEvent;
@@ -52,7 +51,6 @@ class ValidationManagerImpl implements ValidationManager, Service,
private final DatabaseComponent db; private final DatabaseComponent db;
private final Executor dbExecutor, validationExecutor; private final Executor dbExecutor, validationExecutor;
private final MessageFactory messageFactory;
private final Map<ClientMajorVersion, MessageValidator> validators; private final Map<ClientMajorVersion, MessageValidator> validators;
private final Map<ClientMajorVersion, IncomingMessageHook> hooks; private final Map<ClientMajorVersion, IncomingMessageHook> hooks;
private final AtomicBoolean used = new AtomicBoolean(false); private final AtomicBoolean used = new AtomicBoolean(false);
@@ -60,12 +58,10 @@ class ValidationManagerImpl implements ValidationManager, Service,
@Inject @Inject
ValidationManagerImpl(DatabaseComponent db, ValidationManagerImpl(DatabaseComponent db,
@DatabaseExecutor Executor dbExecutor, @DatabaseExecutor Executor dbExecutor,
@ValidationExecutor Executor validationExecutor, @ValidationExecutor Executor validationExecutor) {
MessageFactory messageFactory) {
this.db = db; this.db = db;
this.dbExecutor = dbExecutor; this.dbExecutor = dbExecutor;
this.validationExecutor = validationExecutor; this.validationExecutor = validationExecutor;
this.messageFactory = messageFactory;
validators = new ConcurrentHashMap<>(); validators = new ConcurrentHashMap<>();
hooks = new ConcurrentHashMap<>(); hooks = new ConcurrentHashMap<>();
} }
@@ -128,8 +124,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
Transaction txn = db.startTransaction(true); Transaction txn = db.startTransaction(true);
try { try {
MessageId id = unvalidated.poll(); MessageId id = unvalidated.poll();
byte[] raw = db.getRawMessage(txn, id); m = db.getMessage(txn, id);
m = messageFactory.createMessage(id, raw);
g = db.getGroup(txn, m.getGroupId()); g = db.getGroup(txn, m.getGroupId());
db.commitTransaction(txn); db.commitTransaction(txn);
} finally { } finally {
@@ -196,8 +191,7 @@ class ValidationManagerImpl implements ValidationManager, Service,
invalidateMessage(txn, id); invalidateMessage(txn, id);
invalidate = getDependentsToInvalidate(txn, id); invalidate = getDependentsToInvalidate(txn, id);
} else if (allDelivered) { } else if (allDelivered) {
byte[] raw = db.getRawMessage(txn, id); Message m = db.getMessage(txn, id);
Message m = messageFactory.createMessage(id, raw);
Group g = db.getGroup(txn, m.getGroupId()); Group g = db.getGroup(txn, m.getGroupId());
ClientId c = g.getClientId(); ClientId c = g.getClientId();
int majorVersion = g.getMajorVersion(); int majorVersion = g.getMajorVersion();

View File

@@ -71,7 +71,6 @@ public class ClientHelperImplTest extends BrambleTestCase {
private final Message message = getMessage(groupId); private final Message message = getMessage(groupId);
private final MessageId messageId = message.getId(); private final MessageId messageId = message.getId();
private final long timestamp = message.getTimestamp(); private final long timestamp = message.getTimestamp();
private final byte[] rawMessage = message.getRaw();
private final Metadata metadata = new Metadata(); private final Metadata metadata = new Metadata();
private final BdfList list = BdfList.of("Sign this!", getRandomBytes(42)); private final BdfList list = BdfList.of("Sign this!", getRandomBytes(42));
private final String label = StringUtils.getRandomString(5); private final String label = StringUtils.getRandomString(5);
@@ -120,8 +119,8 @@ public class ClientHelperImplTest extends BrambleTestCase {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn)); will(returnValue(txn));
oneOf(db).getRawMessage(txn, messageId); oneOf(db).getMessage(txn, messageId);
will(returnValue(rawMessage)); will(returnValue(message));
oneOf(db).commitTransaction(txn); oneOf(db).commitTransaction(txn);
oneOf(db).endTransaction(txn); oneOf(db).endTransaction(txn);
}}); }});
@@ -267,7 +266,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
public void testToList() throws Exception { public void testToList() throws Exception {
expectToList(true); expectToList(true);
assertEquals(list, clientHelper.toList(rawMessage)); assertEquals(list, clientHelper.toList(getRandomBytes(123)));
context.assertIsSatisfied(); context.assertIsSatisfied();
} }
@@ -276,7 +275,7 @@ public class ClientHelperImplTest extends BrambleTestCase {
expectToList(false); // no EOF after list expectToList(false); // no EOF after list
try { try {
clientHelper.toList(rawMessage); clientHelper.toList(getRandomBytes(123));
fail(); fail();
} catch (FormatException e) { } catch (FormatException e) {
// expected // expected

View File

@@ -613,11 +613,11 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase {
throws Exception { throws Exception {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
// Check whether the message is in the DB (which it's not) // Check whether the message is in the DB (which it's not)
exactly(12).of(database).startTransaction(); exactly(11).of(database).startTransaction();
will(returnValue(txn)); will(returnValue(txn));
exactly(12).of(database).containsMessage(txn, messageId); exactly(11).of(database).containsMessage(txn, messageId);
will(returnValue(false)); will(returnValue(false));
exactly(12).of(database).abortTransaction(txn); exactly(11).of(database).abortTransaction(txn);
// This is needed for getMessageStatus() to proceed // This is needed for getMessageStatus() to proceed
exactly(1).of(database).containsContact(txn, contactId); exactly(1).of(database).containsContact(txn, contactId);
will(returnValue(true)); will(returnValue(true));
@@ -655,16 +655,6 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase {
db.endTransaction(transaction); db.endTransaction(transaction);
} }
transaction = db.startTransaction(false);
try {
db.getRawMessage(transaction, messageId);
fail();
} catch (NoSuchMessageException expected) {
// Expected
} finally {
db.endTransaction(transaction);
}
transaction = db.startTransaction(false); transaction = db.startTransaction(false);
try { try {
db.getMessageMetadata(transaction, messageId); db.getMessageMetadata(transaction, messageId);

View File

@@ -12,7 +12,6 @@ import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.InvalidMessageException;
import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.MessageContext; import org.briarproject.bramble.api.sync.MessageContext;
import org.briarproject.bramble.api.sync.MessageFactory;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.sync.ValidationManager.IncomingMessageHook; import org.briarproject.bramble.api.sync.ValidationManager.IncomingMessageHook;
import org.briarproject.bramble.api.sync.ValidationManager.MessageValidator; import org.briarproject.bramble.api.sync.ValidationManager.MessageValidator;
@@ -45,8 +44,6 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
public class ValidationManagerImplTest extends BrambleMockTestCase { public class ValidationManagerImplTest extends BrambleMockTestCase {
private final DatabaseComponent db = context.mock(DatabaseComponent.class); private final DatabaseComponent db = context.mock(DatabaseComponent.class);
private final MessageFactory messageFactory =
context.mock(MessageFactory.class);
private final MessageValidator validator = private final MessageValidator validator =
context.mock(MessageValidator.class); context.mock(MessageValidator.class);
private final IncomingMessageHook hook = private final IncomingMessageHook hook =
@@ -75,8 +72,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
@Before @Before
public void setUp() { public void setUp() {
vm = new ValidationManagerImpl(db, dbExecutor, validationExecutor, vm = new ValidationManagerImpl(db, dbExecutor, validationExecutor);
messageFactory);
vm.registerMessageValidator(clientId, majorVersion, validator); vm.registerMessageValidator(clientId, majorVersion, validator);
vm.registerIncomingMessageHook(clientId, majorVersion, hook); vm.registerIncomingMessageHook(clientId, majorVersion, hook);
} }
@@ -136,9 +132,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
// Load the first raw message and group // Load the first raw message and group
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn1)); will(returnValue(txn1));
oneOf(db).getRawMessage(txn1, messageId); oneOf(db).getMessage(txn1, messageId);
will(returnValue(message.getRaw()));
oneOf(messageFactory).createMessage(messageId, message.getRaw());
will(returnValue(message)); will(returnValue(message));
oneOf(db).getGroup(txn1, groupId); oneOf(db).getGroup(txn1, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -163,9 +157,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
// Load the second raw message and group // Load the second raw message and group
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn3)); will(returnValue(txn3));
oneOf(db).getRawMessage(txn3, messageId1); oneOf(db).getMessage(txn3, messageId1);
will(returnValue(message1.getRaw()));
oneOf(messageFactory).createMessage(messageId1, message1.getRaw());
will(returnValue(message1)); will(returnValue(message1));
oneOf(db).getGroup(txn3, groupId); oneOf(db).getGroup(txn3, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -237,9 +229,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn2, messageId); oneOf(db).getMessageDependencies(txn2, messageId);
will(returnValue(singletonMap(messageId1, DELIVERED))); will(returnValue(singletonMap(messageId1, DELIVERED)));
// Get the message and its metadata to deliver // Get the message and its metadata to deliver
oneOf(db).getRawMessage(txn2, messageId); oneOf(db).getMessage(txn2, messageId);
will(returnValue(message.getRaw()));
oneOf(messageFactory).createMessage(messageId, message.getRaw());
will(returnValue(message)); will(returnValue(message));
oneOf(db).getGroup(txn2, groupId); oneOf(db).getGroup(txn2, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -262,9 +252,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn3, messageId2); oneOf(db).getMessageDependencies(txn3, messageId2);
will(returnValue(singletonMap(messageId1, DELIVERED))); will(returnValue(singletonMap(messageId1, DELIVERED)));
// Get the dependent and its metadata to deliver // Get the dependent and its metadata to deliver
oneOf(db).getRawMessage(txn3, messageId2); oneOf(db).getMessage(txn3, messageId2);
will(returnValue(message2.getRaw()));
oneOf(messageFactory).createMessage(messageId2, message2.getRaw());
will(returnValue(message2)); will(returnValue(message2));
oneOf(db).getGroup(txn3, groupId); oneOf(db).getGroup(txn3, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -414,16 +402,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
// Load the first raw message - *gasp* it's gone! // Load the first raw message - *gasp* it's gone!
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn1)); will(returnValue(txn1));
oneOf(db).getRawMessage(txn1, messageId); oneOf(db).getMessage(txn1, messageId);
will(throwException(new NoSuchMessageException())); will(throwException(new NoSuchMessageException()));
never(db).commitTransaction(txn1); never(db).commitTransaction(txn1);
oneOf(db).endTransaction(txn1); oneOf(db).endTransaction(txn1);
// Load the second raw message and group // Load the second raw message and group
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn2)); will(returnValue(txn2));
oneOf(db).getRawMessage(txn2, messageId1); oneOf(db).getMessage(txn2, messageId1);
will(returnValue(message1.getRaw()));
oneOf(messageFactory).createMessage(messageId1, message1.getRaw());
will(returnValue(message1)); will(returnValue(message1));
oneOf(db).getGroup(txn2, groupId); oneOf(db).getGroup(txn2, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -485,9 +471,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
// Load the first raw message // Load the first raw message
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn1)); will(returnValue(txn1));
oneOf(db).getRawMessage(txn1, messageId); oneOf(db).getMessage(txn1, messageId);
will(returnValue(message.getRaw()));
oneOf(messageFactory).createMessage(messageId, message.getRaw());
will(returnValue(message)); will(returnValue(message));
// Load the group - *gasp* it's gone! // Load the group - *gasp* it's gone!
oneOf(db).getGroup(txn1, groupId); oneOf(db).getGroup(txn1, groupId);
@@ -497,9 +481,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
// Load the second raw message and group // Load the second raw message and group
oneOf(db).startTransaction(true); oneOf(db).startTransaction(true);
will(returnValue(txn2)); will(returnValue(txn2));
oneOf(db).getRawMessage(txn2, messageId1); oneOf(db).getMessage(txn2, messageId1);
will(returnValue(message1.getRaw()));
oneOf(messageFactory).createMessage(messageId1, message1.getRaw());
will(returnValue(message1)); will(returnValue(message1));
oneOf(db).getGroup(txn2, groupId); oneOf(db).getGroup(txn2, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -860,9 +842,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn2, messageId1); oneOf(db).getMessageDependencies(txn2, messageId1);
will(returnValue(singletonMap(messageId, DELIVERED))); will(returnValue(singletonMap(messageId, DELIVERED)));
// Get message 1 and its metadata // Get message 1 and its metadata
oneOf(db).getRawMessage(txn2, messageId1); oneOf(db).getMessage(txn2, messageId1);
will(returnValue(message1.getRaw()));
oneOf(messageFactory).createMessage(messageId1, message1.getRaw());
will(returnValue(message1)); will(returnValue(message1));
oneOf(db).getGroup(txn2, groupId); oneOf(db).getGroup(txn2, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -885,9 +865,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn3, messageId2); oneOf(db).getMessageDependencies(txn3, messageId2);
will(returnValue(singletonMap(messageId, DELIVERED))); will(returnValue(singletonMap(messageId, DELIVERED)));
// Get message 2 and its metadata // Get message 2 and its metadata
oneOf(db).getRawMessage(txn3, messageId2); oneOf(db).getMessage(txn3, messageId2);
will(returnValue(message2.getRaw()));
oneOf(messageFactory).createMessage(messageId2, message2.getRaw());
will(returnValue(message2)); will(returnValue(message2));
oneOf(db).getGroup(txn3, groupId); oneOf(db).getGroup(txn3, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -910,9 +888,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn4, messageId3); oneOf(db).getMessageDependencies(txn4, messageId3);
will(returnValue(twoDependencies)); will(returnValue(twoDependencies));
// Get message 3 and its metadata // Get message 3 and its metadata
oneOf(db).getRawMessage(txn4, messageId3); oneOf(db).getMessage(txn4, messageId3);
will(returnValue(message3.getRaw()));
oneOf(messageFactory).createMessage(messageId3, message3.getRaw());
will(returnValue(message3)); will(returnValue(message3));
oneOf(db).getGroup(txn4, groupId); oneOf(db).getGroup(txn4, groupId);
will(returnValue(group)); will(returnValue(group));
@@ -941,9 +917,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase {
oneOf(db).getMessageDependencies(txn6, messageId4); oneOf(db).getMessageDependencies(txn6, messageId4);
will(returnValue(singletonMap(messageId3, DELIVERED))); will(returnValue(singletonMap(messageId3, DELIVERED)));
// Get message 4 and its metadata // Get message 4 and its metadata
oneOf(db).getRawMessage(txn6, messageId4); oneOf(db).getMessage(txn6, messageId4);
will(returnValue(message4.getRaw()));
oneOf(messageFactory).createMessage(messageId4, message4.getRaw());
will(returnValue(message4)); will(returnValue(message4));
oneOf(db).getGroup(txn6, groupId); oneOf(db).getGroup(txn6, groupId);
will(returnValue(group)); will(returnValue(group));