Verified Commit eae329cd authored by akwizgran's avatar akwizgran
Browse files

Refactor manager and tasks to remove reliance on files.

parent 0ce0551f
Pipeline #6697 passed with stages
in 9 minutes and 59 seconds
......@@ -2,8 +2,7 @@ package org.briarproject.bramble.api.plugin.file;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import org.briarproject.bramble.api.properties.TransportProperties;
import javax.annotation.Nullable;
......@@ -26,15 +25,17 @@ public interface RemovableDriveManager {
/**
* Starts and returns a reader task for the given contact, reading from
* the given file. If a reader task for the contact is already running,
* it will be returned and the file argument will be ignored.
* a stream described by the given transport properties. If a reader task
* for the contact is already running, it will be returned and the
* transport properties will be ignored.
*/
RemovableDriveTask startReaderTask(ContactId c, File f);
RemovableDriveTask startReaderTask(ContactId c, TransportProperties p);
/**
* Starts and returns a writer task for the given contact, writing to
* the given file. If a writer task for the contact is already running,
* it will be returned and the file argument will be ignored.
* a stream described by the given transport properties. If a writer task
* for the contact is already running, it will be returned and the
* transport properties will be ignored.
*/
RemovableDriveTask startWriterTask(ContactId c, File f);
RemovableDriveTask startWriterTask(ContactId c, TransportProperties p);
}
......@@ -2,16 +2,16 @@ package org.briarproject.bramble.api.plugin.file;
import org.briarproject.bramble.api.Consumer;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import java.io.File;
import org.briarproject.bramble.api.properties.TransportProperties;
@NotNullByDefault
public interface RemovableDriveTask extends Runnable {
/**
* Returns the file that this task is reading from or writing to.
* Returns the {@link TransportProperties} that were used for creating
* this task.
*/
File getFile();
TransportProperties getTransportProperties();
/**
* Adds an observer to the task. The observer will be notified of state
......@@ -37,10 +37,19 @@ public interface RemovableDriveTask extends Runnable {
this.success = success;
}
/**
* Returns the total length in bytes of the messages read or written
* so far.
*/
public long getDone() {
return done;
}
/**
* Returns the total length in bytes of the messages that will have
* been read or written when the task is complete, or zero if the
* total is unknown.
*/
public long getTotal() {
return total;
}
......
......@@ -5,8 +5,8 @@ import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.file.RemovableDriveManager;
import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import org.briarproject.bramble.api.properties.TransportProperties;
import java.io.File;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
......@@ -46,8 +46,9 @@ class RemovableDriveManagerImpl
}
@Override
public RemovableDriveTask startReaderTask(ContactId c, File f) {
RemovableDriveTask task = taskFactory.createReader(this, c, f);
public RemovableDriveTask startReaderTask(ContactId c,
TransportProperties p) {
RemovableDriveTask task = taskFactory.createReader(this, c, p);
RemovableDriveTask old = readers.putIfAbsent(c, task);
if (old == null) {
ioExecutor.execute(task);
......@@ -58,8 +59,9 @@ class RemovableDriveManagerImpl
}
@Override
public RemovableDriveTask startWriterTask(ContactId c, File f) {
RemovableDriveTask task = taskFactory.createWriter(this, c, f);
public RemovableDriveTask startWriterTask(ContactId c,
TransportProperties p) {
RemovableDriveTask task = taskFactory.createWriter(this, c, p);
RemovableDriveTask old = writers.putIfAbsent(c, task);
if (old == null) {
ioExecutor.execute(task);
......
......@@ -8,9 +8,9 @@ import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginManager;
import org.briarproject.bramble.api.plugin.TransportConnectionReader;
import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.sync.event.MessageAddedEvent;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.Executor;
......@@ -33,22 +33,21 @@ class RemovableDriveReaderTask extends RemovableDriveTaskImpl
EventBus eventBus,
RemovableDriveTaskRegistry registry,
ContactId contactId,
File file) {
TransportProperties transportProperties) {
super(eventExecutor, pluginManager, connectionManager, eventBus,
registry, contactId, file);
registry, contactId, transportProperties);
}
@Override
public void run() {
TransportConnectionReader r =
getPlugin().createReader(createProperties());
getPlugin().createReader(transportProperties);
if (r == null) {
LOG.warning("Failed to create reader");
registry.removeReader(contactId, this);
setSuccess(false);
return;
}
setTotal(file.length());
eventBus.addListener(this);
connectionManager.manageIncomingConnection(ID, new DecoratedReader(r));
}
......
......@@ -3,15 +3,14 @@ package org.briarproject.bramble.plugin.file;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import java.io.File;
import org.briarproject.bramble.api.properties.TransportProperties;
@NotNullByDefault
interface RemovableDriveTaskFactory {
RemovableDriveTask createReader(RemovableDriveTaskRegistry registry,
ContactId c, File f);
ContactId c, TransportProperties p);
RemovableDriveTask createWriter(RemovableDriveTaskRegistry registry,
ContactId c, File f);
ContactId c, TransportProperties p);
}
......@@ -8,8 +8,8 @@ import org.briarproject.bramble.api.event.EventExecutor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginManager;
import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import org.briarproject.bramble.api.properties.TransportProperties;
import java.io.File;
import java.util.concurrent.Executor;
import javax.annotation.concurrent.Immutable;
......@@ -41,15 +41,15 @@ class RemovableDriveTaskFactoryImpl implements RemovableDriveTaskFactory {
@Override
public RemovableDriveTask createReader(RemovableDriveTaskRegistry registry,
ContactId c, File f) {
ContactId c, TransportProperties p) {
return new RemovableDriveReaderTask(eventExecutor, pluginManager,
connectionManager, eventBus, registry, c, f);
connectionManager, eventBus, registry, c, p);
}
@Override
public RemovableDriveTask createWriter(RemovableDriveTaskRegistry registry,
ContactId c, File f) {
ContactId c, TransportProperties p) {
return new RemovableDriveWriterTask(db, eventExecutor, pluginManager,
connectionManager, eventBus, registry, c, f);
connectionManager, eventBus, registry, c, p);
}
}
......@@ -10,7 +10,6 @@ import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
import org.briarproject.bramble.api.properties.TransportProperties;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
......@@ -20,7 +19,6 @@ import javax.annotation.concurrent.ThreadSafe;
import static java.lang.Math.min;
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
import static org.briarproject.bramble.api.plugin.file.FileConstants.PROP_PATH;
import static org.briarproject.bramble.api.plugin.file.RemovableDriveConstants.ID;
@ThreadSafe
......@@ -33,7 +31,7 @@ abstract class RemovableDriveTaskImpl implements RemovableDriveTask {
final EventBus eventBus;
final RemovableDriveTaskRegistry registry;
final ContactId contactId;
final File file;
final TransportProperties transportProperties;
private final Object lock = new Object();
@GuardedBy("lock")
......@@ -48,19 +46,19 @@ abstract class RemovableDriveTaskImpl implements RemovableDriveTask {
EventBus eventBus,
RemovableDriveTaskRegistry registry,
ContactId contactId,
File file) {
TransportProperties transportProperties) {
this.eventExecutor = eventExecutor;
this.pluginManager = pluginManager;
this.connectionManager = connectionManager;
this.eventBus = eventBus;
this.registry = registry;
this.contactId = contactId;
this.file = file;
this.transportProperties = transportProperties;
}
@Override
public File getFile() {
return file;
public TransportProperties getTransportProperties() {
return transportProperties;
}
@Override
......@@ -86,12 +84,6 @@ abstract class RemovableDriveTaskImpl implements RemovableDriveTask {
return (SimplexPlugin) requireNonNull(pluginManager.getPlugin(ID));
}
TransportProperties createProperties() {
TransportProperties p = new TransportProperties();
p.put(PROP_PATH, file.getAbsolutePath());
return p;
}
void setTotal(long total) {
synchronized (lock) {
state = new State(state.getDone(), total, state.isFinished(),
......
......@@ -11,9 +11,9 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginManager;
import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.sync.event.MessagesSentEvent;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.concurrent.Executor;
......@@ -42,16 +42,16 @@ class RemovableDriveWriterTask extends RemovableDriveTaskImpl
EventBus eventBus,
RemovableDriveTaskRegistry registry,
ContactId contactId,
File file) {
TransportProperties transportProperties) {
super(eventExecutor, pluginManager, connectionManager, eventBus,
registry, contactId, file);
registry, contactId, transportProperties);
this.db = db;
}
@Override
public void run() {
SimplexPlugin plugin = getPlugin();
TransportConnectionWriter w = plugin.createWriter(createProperties());
TransportConnectionWriter w = plugin.createWriter(transportProperties);
if (w == null) {
LOG.warning("Failed to create writer");
registry.removeWriter(contactId, this);
......
......@@ -11,6 +11,7 @@ import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.file.RemovableDriveTask;
import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.sync.event.MessageStateChangedEvent;
import org.briarproject.bramble.test.BrambleTestCase;
import org.briarproject.bramble.test.TestDatabaseConfigModule;
......@@ -22,6 +23,7 @@ import java.io.File;
import java.util.concurrent.CountDownLatch;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.briarproject.bramble.api.plugin.file.FileConstants.PROP_PATH;
import static org.briarproject.bramble.api.sync.validation.MessageState.DELIVERED;
import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory;
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
......@@ -96,8 +98,10 @@ public class RemovableDriveIntegrationTest extends BrambleTestCase {
new MessageDeliveryListener(deliveries);
device.getEventBus().addListener(listener);
// Read the incoming stream
TransportProperties p = new TransportProperties();
p.put(PROP_PATH, file.getAbsolutePath());
RemovableDriveTask reader = device.getRemovableDriveManager()
.startReaderTask(contactId, file);
.startReaderTask(contactId, p);
CountDownLatch disposedLatch = new CountDownLatch(1);
reader.addObserver(state -> {
if (state.isFinished()) disposedLatch.countDown();
......@@ -114,8 +118,10 @@ public class RemovableDriveIntegrationTest extends BrambleTestCase {
ContactId contactId) throws Exception {
// Write the outgoing stream to a file
File file = File.createTempFile("sync", ".tmp", testDir);
TransportProperties p = new TransportProperties();
p.put(PROP_PATH, file.getAbsolutePath());
RemovableDriveTask writer = device.getRemovableDriveManager()
.startWriterTask(contactId, file);
.startWriterTask(contactId, p);
CountDownLatch disposedLatch = new CountDownLatch(1);
writer.addObserver(state -> {
if (state.isFinished()) disposedLatch.countDown();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment