From 2c13e35dc450567301f1ef2b6c5f03c95639d345 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Sun, 14 Aug 2011 13:36:21 +0200 Subject: [PATCH] Calculate the timestamp outside the subscription/transport update writer - this will allow it to be saved so new connections can work out whether they should send updates. --- .../api/protocol/writers/SubscriptionWriter.java | 3 ++- .../briar/api/protocol/writers/TransportWriter.java | 4 ++-- .../sf/briar/db/ReadWriteLockDatabaseComponent.java | 5 +++-- .../sf/briar/db/SynchronizedDatabaseComponent.java | 5 +++-- .../protocol/writers/SubscriptionWriterImpl.java | 5 +++-- .../briar/protocol/writers/TransportWriterImpl.java | 5 +++-- test/net/sf/briar/FileReadWriteTest.java | 12 +++++------- test/net/sf/briar/db/DatabaseComponentTest.java | 8 +++++--- .../net/sf/briar/protocol/ProtocolReadWriteTest.java | 11 +++++------ 9 files changed, 31 insertions(+), 27 deletions(-) diff --git a/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java b/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java index e3f81b917f..fe88229a9d 100644 --- a/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java +++ b/api/net/sf/briar/api/protocol/writers/SubscriptionWriter.java @@ -9,5 +9,6 @@ import net.sf.briar.api.protocol.Group; public interface SubscriptionWriter { /** Writes the contents of the update. */ - void writeSubscriptions(Map<Group, Long> subs) throws IOException; + void writeSubscriptionUpdate(Map<Group, Long> subs, long timestamp) + throws IOException; } diff --git a/api/net/sf/briar/api/protocol/writers/TransportWriter.java b/api/net/sf/briar/api/protocol/writers/TransportWriter.java index a8e7f9f76a..70fb8251cf 100644 --- a/api/net/sf/briar/api/protocol/writers/TransportWriter.java +++ b/api/net/sf/briar/api/protocol/writers/TransportWriter.java @@ -7,6 +7,6 @@ import java.util.Map; public interface TransportWriter { /** Writes the contents of the update. */ - void writeTransports(Map<String, Map<String, String>> transports) - throws IOException; + void writeTransportUpdate(Map<String, Map<String, String>> transports, + long timestamp) throws IOException; } diff --git a/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java b/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java index eb8e93375e..adc1e64a46 100644 --- a/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java +++ b/components/net/sf/briar/db/ReadWriteLockDatabaseComponent.java @@ -445,7 +445,7 @@ class ReadWriteLockDatabaseComponent<Txn> extends DatabaseComponentImpl<Txn> { Txn txn = db.startTransaction(); try { Map<Group, Long> subs = db.getVisibleSubscriptions(txn, c); - s.writeSubscriptions(subs); + s.writeSubscriptionUpdate(subs, System.currentTimeMillis()); if(LOG.isLoggable(Level.FINE)) LOG.fine("Added " + subs.size() + " subscriptions"); db.commitTransaction(txn); @@ -475,7 +475,8 @@ class ReadWriteLockDatabaseComponent<Txn> extends DatabaseComponentImpl<Txn> { try { Map<String, Map<String, String>> transports = db.getTransports(txn); - t.writeTransports(transports); + long timestamp = System.currentTimeMillis(); + t.writeTransportUpdate(transports, timestamp); if(LOG.isLoggable(Level.FINE)) LOG.fine("Added " + transports.size() + " transports"); db.commitTransaction(txn); diff --git a/components/net/sf/briar/db/SynchronizedDatabaseComponent.java b/components/net/sf/briar/db/SynchronizedDatabaseComponent.java index 466efead75..5bc52fd67b 100644 --- a/components/net/sf/briar/db/SynchronizedDatabaseComponent.java +++ b/components/net/sf/briar/db/SynchronizedDatabaseComponent.java @@ -339,7 +339,7 @@ class SynchronizedDatabaseComponent<Txn> extends DatabaseComponentImpl<Txn> { Txn txn = db.startTransaction(); try { Map<Group, Long> subs = db.getVisibleSubscriptions(txn, c); - s.writeSubscriptions(subs); + s.writeSubscriptionUpdate(subs, System.currentTimeMillis()); if(LOG.isLoggable(Level.FINE)) LOG.fine("Added " + subs.size() + " subscriptions"); db.commitTransaction(txn); @@ -363,7 +363,8 @@ class SynchronizedDatabaseComponent<Txn> extends DatabaseComponentImpl<Txn> { try { Map<String, Map<String, String>> transports = db.getTransports(txn); - t.writeTransports(transports); + long timestamp = System.currentTimeMillis(); + t.writeTransportUpdate(transports, timestamp); if(LOG.isLoggable(Level.FINE)) LOG.fine("Added " + transports.size() + " transports"); db.commitTransaction(txn); diff --git a/components/net/sf/briar/protocol/writers/SubscriptionWriterImpl.java b/components/net/sf/briar/protocol/writers/SubscriptionWriterImpl.java index b8f080e27b..9e7d5c6329 100644 --- a/components/net/sf/briar/protocol/writers/SubscriptionWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/SubscriptionWriterImpl.java @@ -20,10 +20,11 @@ class SubscriptionWriterImpl implements SubscriptionWriter { w = writerFactory.createWriter(out); } - public void writeSubscriptions(Map<Group, Long> subs) throws IOException { + public void writeSubscriptionUpdate(Map<Group, Long> subs, long timestamp) + throws IOException { w.writeUserDefinedTag(Tags.SUBSCRIPTION_UPDATE); w.writeMap(subs); - w.writeInt64(System.currentTimeMillis()); + w.writeInt64(timestamp); out.flush(); } } diff --git a/components/net/sf/briar/protocol/writers/TransportWriterImpl.java b/components/net/sf/briar/protocol/writers/TransportWriterImpl.java index 8381f4d064..aeb74c5e6b 100644 --- a/components/net/sf/briar/protocol/writers/TransportWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/TransportWriterImpl.java @@ -20,7 +20,8 @@ class TransportWriterImpl implements TransportWriter { w = writerFactory.createWriter(out); } - public void writeTransports(Map<String, Map<String, String>> transports) + public void writeTransportUpdate( + Map<String, Map<String, String>> transports, long timestamp) throws IOException { w.writeUserDefinedTag(Tags.TRANSPORT_UPDATE); w.writeListStart(); @@ -30,7 +31,7 @@ class TransportWriterImpl implements TransportWriter { w.writeMap(e.getValue()); } w.writeListEnd(); - w.writeInt64(System.currentTimeMillis()); + w.writeInt64(timestamp); out.flush(); } } diff --git a/test/net/sf/briar/FileReadWriteTest.java b/test/net/sf/briar/FileReadWriteTest.java index 363710f53b..64725290bb 100644 --- a/test/net/sf/briar/FileReadWriteTest.java +++ b/test/net/sf/briar/FileReadWriteTest.java @@ -64,7 +64,7 @@ public class FileReadWriteTest extends TestCase { private final File file = new File(testDir, "foo"); private final BatchId ack = new BatchId(TestUtils.getRandomId()); - private final long start = System.currentTimeMillis(); + private final long timestamp = System.currentTimeMillis(); private final PacketReaderFactory packetReaderFactory; private final PacketWriterFactory packetWriterFactory; @@ -172,11 +172,11 @@ public class FileReadWriteTest extends TestCase { Map<Group, Long> subs = new LinkedHashMap<Group, Long>(); subs.put(group, 0L); subs.put(group1, 0L); - s.writeSubscriptions(subs); + s.writeSubscriptionUpdate(subs, timestamp); packetWriter.finishPacket(); TransportWriter t = protocolWriterFactory.createTransportWriter(out); - t.writeTransports(transports); + t.writeTransportUpdate(transports, timestamp); packetWriter.finishPacket(); out.flush(); @@ -257,16 +257,14 @@ public class FileReadWriteTest extends TestCase { assertEquals(2, subs.size()); assertEquals(Long.valueOf(0L), subs.get(group)); assertEquals(Long.valueOf(0L), subs.get(group1)); - assertTrue(s.getTimestamp() > start); - assertTrue(s.getTimestamp() <= System.currentTimeMillis()); + assertTrue(s.getTimestamp() == timestamp); // Read the transport update assertTrue(protocolReader.hasTransportUpdate()); TransportUpdate t = protocolReader.readTransportUpdate(); packetReader.finishPacket(); assertEquals(transports, t.getTransports()); - assertTrue(t.getTimestamp() > start); - assertTrue(t.getTimestamp() <= System.currentTimeMillis()); + assertTrue(t.getTimestamp() == timestamp); in.close(); } diff --git a/test/net/sf/briar/db/DatabaseComponentTest.java b/test/net/sf/briar/db/DatabaseComponentTest.java index f49ce59077..f1d6eef225 100644 --- a/test/net/sf/briar/db/DatabaseComponentTest.java +++ b/test/net/sf/briar/db/DatabaseComponentTest.java @@ -779,8 +779,9 @@ public abstract class DatabaseComponentTest extends TestCase { oneOf(database).getVisibleSubscriptions(txn, contactId); will(returnValue(Collections.singletonMap(group, 0L))); // Add the subscriptions to the writer - oneOf(subscriptionWriter).writeSubscriptions( - Collections.singletonMap(group, 0L)); + oneOf(subscriptionWriter).writeSubscriptionUpdate( + with(Collections.singletonMap(group, 0L)), + with(any(long.class))); }}); DatabaseComponent db = createDatabaseComponent(database, cleaner); @@ -811,7 +812,8 @@ public abstract class DatabaseComponentTest extends TestCase { oneOf(database).getTransports(txn); will(returnValue(transports)); // Add the properties to the writer - oneOf(transportWriter).writeTransports(transports); + oneOf(transportWriter).writeTransportUpdate(with(transports), + with(any(long.class))); }}); DatabaseComponent db = createDatabaseComponent(database, cleaner); diff --git a/test/net/sf/briar/protocol/ProtocolReadWriteTest.java b/test/net/sf/briar/protocol/ProtocolReadWriteTest.java index 3757ad9f04..e4cbc879f9 100644 --- a/test/net/sf/briar/protocol/ProtocolReadWriteTest.java +++ b/test/net/sf/briar/protocol/ProtocolReadWriteTest.java @@ -51,6 +51,7 @@ public class ProtocolReadWriteTest extends TestCase { private final BitSet bitSet; private final Map<Group, Long> subscriptions; private final Map<String, Map<String, String>> transports; + private final long timestamp = System.currentTimeMillis(); public ProtocolReadWriteTest() throws Exception { super(); @@ -75,8 +76,6 @@ public class ProtocolReadWriteTest extends TestCase { @Test public void testWriteAndRead() throws Exception { - long start = System.currentTimeMillis(); - // Write ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -96,10 +95,10 @@ public class ProtocolReadWriteTest extends TestCase { r.writeRequest(offerId, bitSet, 10); SubscriptionWriter s = writerFactory.createSubscriptionWriter(out); - s.writeSubscriptions(subscriptions); + s.writeSubscriptionUpdate(subscriptions, timestamp); TransportWriter t = writerFactory.createTransportWriter(out); - t.writeTransports(transports); + t.writeTransportUpdate(transports, timestamp); // Read ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); @@ -120,10 +119,10 @@ public class ProtocolReadWriteTest extends TestCase { SubscriptionUpdate subscriptionUpdate = reader.readSubscriptionUpdate(); assertEquals(subscriptions, subscriptionUpdate.getSubscriptions()); - assertTrue(subscriptionUpdate.getTimestamp() >= start); + assertTrue(subscriptionUpdate.getTimestamp() == timestamp); TransportUpdate transportUpdate = reader.readTransportUpdate(); assertEquals(transports, transportUpdate.getTransports()); - assertTrue(transportUpdate.getTimestamp() >= start); + assertTrue(transportUpdate.getTimestamp() == timestamp); } } -- GitLab