From 783402f7454e1878782f062062bb8585bc60239d Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 27 Jun 2020 18:00:22 +0100 Subject: [PATCH] Convert lib module to Java (#487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lib.FileScannerTest: convert to Java * lib.Filters: convert to Java * lib.FiltersTest: convert to Java * lib.Archive: convert to Java * lib.LocalFileSystem: convert to Java * domain.Channel: better channel termination * domain.Channel: improve assurance that threads die * Ensure uisink and storage shutdown when exiting program * domain.HashesTest: clean up * domain.Channel.run() already shuts down channel when runner finishes * lib.FileScannerTest: add listener before run * domain.Channel: add lock around take and only interrupt if waiting * .run: add intellij test run configurations * app. update in-code version * app: chain ui channel construction * domain.Channel: add tracing option and simplify thread naming * storage-aws: use default multipartUploadThreshold * app: force exit once program is completed * domain.channel: split up and move Channel to its own package * lib.LocalFileSystemTest: convert to Java * lib.SequencedAction: convert to Java * domain.LocalFile: don’t box file length * lib.FileScannerTest: include hashes * lib.UnversionedMirrorArchive: convert to Java * lib: remove scala dependencies --- .run/Main.run.xml | 16 + .run/Test whole project.run.xml | 23 + .../main/scala/net/kemitix/thorp/Main.scala | 4 +- .../scala/net/kemitix/thorp/Program.scala | 53 ++- .../kemitix/thorp/config/Configuration.java | 2 +- docs/images/reactor-graph.png | Bin 197873 -> 181293 bytes .../net/kemitix/thorp/domain/Channel.java | 188 -------- .../java/net/kemitix/thorp/domain/Filter.java | 2 - .../kemitix/thorp/domain/HashGenerator.java | 4 + .../net/kemitix/thorp/domain/LocalFile.java | 6 +- .../kemitix/thorp/domain/channel/Channel.java | 26 ++ .../thorp/domain/channel/ChannelImpl.java | 97 ++++ .../thorp/domain/channel/Listener.java | 5 + .../kemitix/thorp/domain/channel/Runner.java | 107 +++++ .../kemitix/thorp/domain/channel/Sink.java | 5 + .../net/kemitix/thorp/domain/HashesTest.java | 35 +- lib/pom.xml | 23 +- .../java/net/kemitix/thorp/lib/Archive.java | 49 ++ .../net/kemitix/thorp/lib/FileScanner.java | 10 +- .../java/net/kemitix/thorp/lib/Filters.java | 56 +++ .../kemitix/thorp/lib/LocalFileSystem.java | 183 ++++++++ .../kemitix/thorp/lib/SequencedAction.java | 20 + .../thorp/lib/UnversionedMirrorArchive.java | 55 +++ .../scala/net/kemitix/thorp/lib/Filters.scala | 50 -- .../kemitix/thorp/lib/LocalFileSystem.scala | 262 ----------- .../kemitix/thorp/lib/SequencedAction.scala | 8 - .../net/kemitix/thorp/lib/ThorpArchive.scala | 44 -- .../thorp/lib/UnversionedMirrorArchive.scala | 92 ---- .../kemitix/thorp/lib/FileScannerTest.java | 49 ++ .../net/kemitix/thorp/lib/FiltersTest.java | 190 ++++++++ .../thorp/lib/LocalFileSystemTest.java | 426 ++++++++++++++++++ .../net.kemitix.thorp.domain.HashGenerator | 1 + .../kemitix/thorp/lib/FileScannerTest.scala | 46 -- .../net/kemitix/thorp/lib/FiltersSuite.scala | 139 ------ .../thorp/lib/LocalFileSystemTest.scala | 369 --------------- .../thorp/storage/aws/S3ETagGenerator.java | 24 +- .../thorp/storage/aws/ETagGeneratorTest.java | 3 +- .../net/kemitix/thorp/uishell/UIShell.java | 5 +- .../thorp/uishell/UploadEventListener.java | 6 +- 39 files changed, 1402 insertions(+), 1281 deletions(-) create mode 100644 .run/Main.run.xml create mode 100644 .run/Test whole project.run.xml delete mode 100644 domain/src/main/java/net/kemitix/thorp/domain/Channel.java create mode 100644 domain/src/main/java/net/kemitix/thorp/domain/channel/Channel.java create mode 100644 domain/src/main/java/net/kemitix/thorp/domain/channel/ChannelImpl.java create mode 100644 domain/src/main/java/net/kemitix/thorp/domain/channel/Listener.java create mode 100644 domain/src/main/java/net/kemitix/thorp/domain/channel/Runner.java create mode 100644 domain/src/main/java/net/kemitix/thorp/domain/channel/Sink.java create mode 100644 lib/src/main/java/net/kemitix/thorp/lib/Archive.java create mode 100644 lib/src/main/java/net/kemitix/thorp/lib/Filters.java create mode 100644 lib/src/main/java/net/kemitix/thorp/lib/LocalFileSystem.java create mode 100644 lib/src/main/java/net/kemitix/thorp/lib/SequencedAction.java create mode 100644 lib/src/main/java/net/kemitix/thorp/lib/UnversionedMirrorArchive.java delete mode 100644 lib/src/main/scala/net/kemitix/thorp/lib/Filters.scala delete mode 100644 lib/src/main/scala/net/kemitix/thorp/lib/LocalFileSystem.scala delete mode 100644 lib/src/main/scala/net/kemitix/thorp/lib/SequencedAction.scala delete mode 100644 lib/src/main/scala/net/kemitix/thorp/lib/ThorpArchive.scala delete mode 100644 lib/src/main/scala/net/kemitix/thorp/lib/UnversionedMirrorArchive.scala create mode 100644 lib/src/test/java/net/kemitix/thorp/lib/FileScannerTest.java create mode 100644 lib/src/test/java/net/kemitix/thorp/lib/FiltersTest.java create mode 100644 lib/src/test/java/net/kemitix/thorp/lib/LocalFileSystemTest.java create mode 100644 lib/src/test/resources/META-INF/services/net.kemitix.thorp.domain.HashGenerator delete mode 100644 lib/src/test/scala/net/kemitix/thorp/lib/FileScannerTest.scala delete mode 100644 lib/src/test/scala/net/kemitix/thorp/lib/FiltersSuite.scala delete mode 100644 lib/src/test/scala/net/kemitix/thorp/lib/LocalFileSystemTest.scala diff --git a/.run/Main.run.xml b/.run/Main.run.xml new file mode 100644 index 0000000..5815443 --- /dev/null +++ b/.run/Main.run.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/.run/Test whole project.run.xml b/.run/Test whole project.run.xml new file mode 100644 index 0000000..6ff84cd --- /dev/null +++ b/.run/Test whole project.run.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/scala/net/kemitix/thorp/Main.scala b/app/src/main/scala/net/kemitix/thorp/Main.scala index efab8d5..4c97997 100644 --- a/app/src/main/scala/net/kemitix/thorp/Main.scala +++ b/app/src/main/scala/net/kemitix/thorp/Main.scala @@ -2,7 +2,9 @@ package net.kemitix.thorp object Main { - def main(args: Array[String]): Unit = + def main(args: Array[String]): Unit = { Program.run(args.toList) + System.exit(0) + } } diff --git a/app/src/main/scala/net/kemitix/thorp/Program.scala b/app/src/main/scala/net/kemitix/thorp/Program.scala index 23eb4c5..7cd2320 100644 --- a/app/src/main/scala/net/kemitix/thorp/Program.scala +++ b/app/src/main/scala/net/kemitix/thorp/Program.scala @@ -9,7 +9,8 @@ import net.kemitix.thorp.domain.StorageEvent.{ ErrorEvent, UploadEvent } -import net.kemitix.thorp.domain.{Channel, Counters, StorageEvent} +import net.kemitix.thorp.domain.channel.{Channel, Sink} +import net.kemitix.thorp.domain.{Counters, StorageEvent} import net.kemitix.thorp.lib.{LocalFileSystem, UnversionedMirrorArchive} import net.kemitix.thorp.storage.Storage import net.kemitix.thorp.uishell.{UIEvent, UIShell} @@ -19,7 +20,7 @@ import scala.jdk.CollectionConverters._ trait Program { - val version = "0.11.0" + val version = "1.1.0-SNAPSHOT" lazy val versionLabel = s"${WHITE}Thorp v$version$RESET" def run(args: List[String]): Unit = { @@ -35,33 +36,39 @@ trait Program { cli => ConfigQuery.showVersion(cli) private def executeWithUI(configuration: Configuration): Unit = { - val uiChannel: Channel[UIEvent] = Channel.create("thorp-ui") - uiChannel.addListener(UIShell.listener(configuration)) - uiChannel.run(sink => execute(configuration, sink), "thorp-main") - uiChannel.start() - uiChannel.waitForShutdown() + Channel + .create("ui") + .addListener(UIShell.listener(configuration)) + .run(execute(configuration)(_)) + .start() + .waitForShutdown() } - private def execute(configuration: Configuration, - uiSink: Channel.Sink[UIEvent]) = { - showValidConfig(uiSink) - val remoteObjects = - fetchRemoteData(configuration, uiSink) - val archive = UnversionedMirrorArchive - val storageEvents = LocalFileSystem - .scanCopyUpload(configuration, uiSink, remoteObjects, archive) - val deleteEvents = LocalFileSystem - .scanDelete(configuration, uiSink, remoteObjects, archive) - Storage.getInstance().shutdown(); - showSummary(uiSink)(storageEvents ++ deleteEvents) - uiSink.shutdown(); + private def execute( + configuration: Configuration + )(uiSink: Sink[UIEvent]): Unit = { + try { + showValidConfig(uiSink) + val remoteObjects = + fetchRemoteData(configuration, uiSink) + val archive = UnversionedMirrorArchive.create + val storageEvents = LocalFileSystem + .scanCopyUpload(configuration, uiSink, remoteObjects, archive) + val deleteEvents = LocalFileSystem + .scanDelete(configuration, uiSink, remoteObjects, archive) + showSummary(uiSink)( + (storageEvents.asScala ++ deleteEvents.asScala).toList + ) + } finally { + Storage.getInstance().shutdown() + } } - private def showValidConfig(uiSink: Channel.Sink[UIEvent]): Unit = + private def showValidConfig(uiSink: Sink[UIEvent]): Unit = uiSink.accept(UIEvent.showValidConfig) private def fetchRemoteData(configuration: Configuration, - uiSink: Channel.Sink[UIEvent]) = { + uiSink: Sink[UIEvent]) = { val bucket = configuration.bucket val prefix = configuration.prefix val objects = Storage.getInstance().list(bucket, prefix) @@ -78,7 +85,7 @@ trait Program { } private def showSummary( - uiSink: Channel.Sink[UIEvent] + uiSink: Sink[UIEvent] )(events: Seq[StorageEvent]): Unit = { val counters = events.foldLeft(Counters.empty)(countActivities) uiSink.accept(UIEvent.showSummary(counters)) diff --git a/config/src/main/java/net/kemitix/thorp/config/Configuration.java b/config/src/main/java/net/kemitix/thorp/config/Configuration.java index 1fc138c..5d8675f 100644 --- a/config/src/main/java/net/kemitix/thorp/config/Configuration.java +++ b/config/src/main/java/net/kemitix/thorp/config/Configuration.java @@ -21,7 +21,7 @@ public class Configuration { public final boolean batchMode; public final int parallel; public final Sources sources; - static Configuration create() { + public static Configuration create() { return new Configuration( Bucket.named(""), RemoteKey.create(""), diff --git a/docs/images/reactor-graph.png b/docs/images/reactor-graph.png index d9e9193894360fa3122b27338273c253bf3b8afe..9e9e45bfbcb9bf06ce692220ee773c3dce122203 100644 GIT binary patch literal 181293 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 literal 197873 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 diff --git a/domain/src/main/java/net/kemitix/thorp/domain/Channel.java b/domain/src/main/java/net/kemitix/thorp/domain/Channel.java deleted file mode 100644 index 59ad8d6..0000000 --- a/domain/src/main/java/net/kemitix/thorp/domain/Channel.java +++ /dev/null @@ -1,188 +0,0 @@ -package net.kemitix.thorp.domain; - -import lombok.RequiredArgsConstructor; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.LinkedTransferQueue; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.Consumer; - -public interface Channel { - static Channel create(String name) { - return new ChannelImpl(name); - } - - void start(); - Channel add(T item); - Channel addAll(Collection items); - Channel addListener(Listener listener); - Channel removeListener(Listener listener); - Channel run(Consumer> program, String name); - void shutdown(); - void shutdownNow() throws InterruptedException; - void waitForShutdown() throws InterruptedException; - - class ChannelImpl implements Channel { - private final BlockingQueue queue = new LinkedTransferQueue<>(); - private final Runner runner; - private final Thread thread; - - public ChannelImpl(String name) { - runner = new Runner(name, queue); - thread = new Thread(runner, name); - } - - @Override - public void start() { - thread.start(); - } - - @Override - public Channel add(T item) { - queue.add(item); - return this; - } - - @Override - public Channel addAll(Collection items) { - queue.addAll(items); - return this; - } - - @Override - public Channel addListener(Listener listener) { - runner.addListener(listener); - return this; - } - - @Override - public Channel removeListener(Listener listener) { - runner.removeListener(listener); - return this; - } - - @Override - public Channel run(Consumer> program, String name) { - return spawn(() -> program.accept(runner), name); - } - - private Channel spawn(Runnable runnable, String name) { - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - try { - runnable.run(); - } catch (Exception e) { - shutdown(); - } - } - }, name); - thread.start(); - return this; - } - - @Override - public void shutdown() { - runner.shutdown(); - } - - @Override - public void shutdownNow() throws InterruptedException { - runner.shutdownNow(); - } - - @Override - public void waitForShutdown() throws InterruptedException { - runner.waitForShutdown(); - } - - } - - @RequiredArgsConstructor - class Runner implements Runnable, Sink { - private final String name; - private final BlockingQueue queue; - private final AtomicBoolean shutdown = new AtomicBoolean(false); - private final List> listeners = new ArrayList<>(); - private final CountDownLatch shutdownLatch = new CountDownLatch(1); - private Thread runnerThread; - - @Override - public void run() { - runnerThread = Thread.currentThread(); - while(isRunning()) { - takeItem() - .ifPresent(item -> { - listeners.forEach(listener -> { - listener.accept(item); - }); - }); - } - shutdownLatch.countDown(); - } - - public void addListener(Listener listener) { - listeners.add(listener); - } - - public void removeListener(Listener listener) { - listeners.remove(listener); - } - - public Optional takeItem() { - try { - return Optional.of(queue.take()); - } catch (InterruptedException e) { - shutdown(); - } - return Optional.empty(); - } - - private boolean isRunning() { - return !isShutdown(); - } - - private boolean isShutdown() { - return shutdown.get() && queue.isEmpty(); - } - - @Override - public void accept(T item) { - queue.add(item); - } - - @Override - public void shutdown() { - if (isRunning()) { - shutdown.set(true); - } - if (queue.isEmpty() && runnerThread != null) { - runnerThread.interrupt(); - } - } - - public void shutdownNow() throws InterruptedException { - shutdown(); - waitForShutdown(); - } - - public void waitForShutdown() throws InterruptedException { - if (isRunning()) - shutdownLatch.await(); - } - } - - interface Listener { - void accept(T item); - } - - interface Sink { - void accept(T item); - void shutdown(); - } -} diff --git a/domain/src/main/java/net/kemitix/thorp/domain/Filter.java b/domain/src/main/java/net/kemitix/thorp/domain/Filter.java index 0ed7aa7..15a3329 100644 --- a/domain/src/main/java/net/kemitix/thorp/domain/Filter.java +++ b/domain/src/main/java/net/kemitix/thorp/domain/Filter.java @@ -1,7 +1,5 @@ package net.kemitix.thorp.domain; -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; import net.kemitix.mon.TypeAlias; import java.util.function.Predicate; diff --git a/domain/src/main/java/net/kemitix/thorp/domain/HashGenerator.java b/domain/src/main/java/net/kemitix/thorp/domain/HashGenerator.java index afc1779..5d2bf6a 100644 --- a/domain/src/main/java/net/kemitix/thorp/domain/HashGenerator.java +++ b/domain/src/main/java/net/kemitix/thorp/domain/HashGenerator.java @@ -21,6 +21,10 @@ public interface HashGenerator { for(HashGenerator hashGenerator: hashGenerators) { list.add(hashGenerator); } + if (list.isEmpty()) { + throw new UnsupportedOperationException( + "No HashGenerator implementations available"); + } return list; } static HashGenerator generatorFor(String label) { diff --git a/domain/src/main/java/net/kemitix/thorp/domain/LocalFile.java b/domain/src/main/java/net/kemitix/thorp/domain/LocalFile.java index 47cdc19..4aceb53 100644 --- a/domain/src/main/java/net/kemitix/thorp/domain/LocalFile.java +++ b/domain/src/main/java/net/kemitix/thorp/domain/LocalFile.java @@ -1,24 +1,26 @@ package net.kemitix.thorp.domain; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; import java.io.File; import java.util.Optional; +@EqualsAndHashCode @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class LocalFile { public final File file; public final File source; public final Hashes hashes; public final RemoteKey remoteKey; - public final Long length; + public final long length; public static LocalFile create( File file, File source, Hashes hashes, RemoteKey remoteKey, - Long length + long length ) { return new LocalFile(file, source, hashes, remoteKey, length); } diff --git a/domain/src/main/java/net/kemitix/thorp/domain/channel/Channel.java b/domain/src/main/java/net/kemitix/thorp/domain/channel/Channel.java new file mode 100644 index 0000000..06d7e7b --- /dev/null +++ b/domain/src/main/java/net/kemitix/thorp/domain/channel/Channel.java @@ -0,0 +1,26 @@ +package net.kemitix.thorp.domain.channel; + +import java.util.Collection; +import java.util.function.Consumer; + +public interface Channel extends Sink { + + static Channel create(String name) { + return new ChannelImpl<>(name, false); + } + static Channel createWithTracing(String name) { + return new ChannelImpl<>(name, true); + } + + Channel start(); + Channel add(T item); + Channel addAll(Collection items); + Channel addListener(Listener listener); + Channel removeListener(Listener listener); + Channel run(Consumer> program); + + void shutdown(); + void shutdownNow() throws InterruptedException; + void waitForShutdown() throws InterruptedException; + +} diff --git a/domain/src/main/java/net/kemitix/thorp/domain/channel/ChannelImpl.java b/domain/src/main/java/net/kemitix/thorp/domain/channel/ChannelImpl.java new file mode 100644 index 0000000..2f618b5 --- /dev/null +++ b/domain/src/main/java/net/kemitix/thorp/domain/channel/ChannelImpl.java @@ -0,0 +1,97 @@ +package net.kemitix.thorp.domain.channel; + +import java.util.Collection; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedTransferQueue; +import java.util.function.Consumer; + +class ChannelImpl implements Channel { + private final boolean tracing; + private final BlockingQueue queue = new LinkedTransferQueue<>(); + private final Runner runner; + private final Thread thread; + private final String name; + + public ChannelImpl(String name, boolean tracing) { + this.name = name; + this.tracing = tracing; + runner = new Runner<>(queue, tracing); + thread = new Thread(runner, String.format("---->-lnr-%s", name)); + } + + @Override + public Channel start() { + trace("launching"); + thread.start(); + return this; + } + + public void trace(String message) { + if (tracing) + System.out.printf("[channel:%s] %s%n", Thread.currentThread().getName(), message); + } + + @Override + public void accept(T item) { + queue.add(item); + } + + @Override + public Channel add(T item) { + queue.add(item); + return this; + } + + @Override + public Channel addAll(Collection items) { + queue.addAll(items); + return this; + } + + @Override + public Channel addListener(Listener listener) { + runner.addListener(listener); + return this; + } + + @Override + public Channel removeListener(Listener listener) { + runner.removeListener(listener); + return this; + } + + @Override + public Channel run(Consumer> program) { + return spawn(() -> program.accept(runner)); + } + + private Channel spawn(Runnable runnable) { + Thread thread = new Thread(() -> { + trace("starting"); + try { + runnable.run(); + trace("finishing normally"); + } finally { + shutdown(); + trace("stopping"); + } + }, String.format("channel-src->-----%s", name)); + thread.start(); + return this; + } + + @Override + public void shutdown() { + runner.shutdown(); + } + + @Override + public void shutdownNow() throws InterruptedException { + runner.shutdownNow(); + } + + @Override + public void waitForShutdown() throws InterruptedException { + runner.waitForShutdown(); + } +} diff --git a/domain/src/main/java/net/kemitix/thorp/domain/channel/Listener.java b/domain/src/main/java/net/kemitix/thorp/domain/channel/Listener.java new file mode 100644 index 0000000..c5d1af6 --- /dev/null +++ b/domain/src/main/java/net/kemitix/thorp/domain/channel/Listener.java @@ -0,0 +1,5 @@ +package net.kemitix.thorp.domain.channel; + +public interface Listener { + void accept(T item); +} diff --git a/domain/src/main/java/net/kemitix/thorp/domain/channel/Runner.java b/domain/src/main/java/net/kemitix/thorp/domain/channel/Runner.java new file mode 100644 index 0000000..fbffabc --- /dev/null +++ b/domain/src/main/java/net/kemitix/thorp/domain/channel/Runner.java @@ -0,0 +1,107 @@ +package net.kemitix.thorp.domain.channel; + +import lombok.RequiredArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicBoolean; + +@RequiredArgsConstructor +class Runner implements Runnable, Sink { + + private final BlockingQueue queue; + private final boolean tracing; + + private final AtomicBoolean shutdown = new AtomicBoolean(false); + private final AtomicBoolean isWaiting = new AtomicBoolean(false); + private final List> listeners = new ArrayList<>(); + private final CountDownLatch shutdownLatch = new CountDownLatch(1); + private final Object takeLock = new Object(); + + private Thread runnerThread; + + public void trace(String message) { + if (tracing) + System.out.printf("[runner :%s] %s%n", Thread.currentThread().getName(), message); + } + + @Override + public void run() { + runnerThread = Thread.currentThread(); + trace("starting"); + try { + while (isRunning()) { + takeItem() + .ifPresent(item -> { + listeners.forEach(listener -> + listener.accept(item)); + }); + } + trace("finishing"); + } catch (InterruptedException e) { + // would have been waiting to take from an empty queue when it was shutdown + trace(String.format("interrupted (%d items in queue)", queue.size())); + } finally { + trace("complete"); + shutdownLatch.countDown(); + } + } + + public void addListener(Listener listener) { + listeners.add(listener); + } + + public void removeListener(Listener listener) { + listeners.remove(listener); + } + + public Optional takeItem() throws InterruptedException { + synchronized (takeLock) { + isWaiting.set(true); + T take = queue.take(); + isWaiting.set(false); + return Optional.of(take); + } + } + + private boolean isRunning() { + return !isShutdown(); + } + + private boolean isShutdown() { + return shutdown.get() && queue.isEmpty(); + } + + @Override + public void accept(T item) { + queue.add(item); + } + + @Override + public void shutdown() { + String threadName = Thread.currentThread().getName(); + if (isRunning()) { + trace("running - marking as shutdown"); + shutdown.set(true); + } + if (queue.isEmpty() && isWaiting.get() && runnerThread != null) { + trace("interrupting waiting runner"); + runnerThread.interrupt(); + } else { + trace(String.format("NOT interrupting runner (%d items, waiting: %s)", queue.size(), isWaiting.get())); + } + } + + public void shutdownNow() throws InterruptedException { + shutdown(); + waitForShutdown(); + } + + public void waitForShutdown() throws InterruptedException { + if (isRunning()) + shutdownLatch.await(); + } + } diff --git a/domain/src/main/java/net/kemitix/thorp/domain/channel/Sink.java b/domain/src/main/java/net/kemitix/thorp/domain/channel/Sink.java new file mode 100644 index 0000000..ee54a10 --- /dev/null +++ b/domain/src/main/java/net/kemitix/thorp/domain/channel/Sink.java @@ -0,0 +1,5 @@ +package net.kemitix.thorp.domain.channel; + +public interface Sink extends Listener { + void shutdown(); +} diff --git a/domain/src/test/java/net/kemitix/thorp/domain/HashesTest.java b/domain/src/test/java/net/kemitix/thorp/domain/HashesTest.java index 4153d40..078c8ee 100644 --- a/domain/src/test/java/net/kemitix/thorp/domain/HashesTest.java +++ b/domain/src/test/java/net/kemitix/thorp/domain/HashesTest.java @@ -10,24 +10,21 @@ import java.util.Arrays; public class HashesTest implements WithAssertions { - @Nested - @DisplayName("mergeAll") - public class MergeAll { - @Test - @DisplayName("") - public void mergeAll() { - //given - HashType key1 = HashType.MD5; - HashType key2 = HashType.DUMMY; - MD5Hash value1 = MD5Hash.create("1"); - MD5Hash value2 = MD5Hash.create("2"); - Hashes hashes1 = Hashes.create(key1, value1); - Hashes hashes2 = Hashes.create(key2, value2); - //when - Hashes result = Hashes.mergeAll(Arrays.asList(hashes1,hashes2)); - //then - assertThat(result.keys()).containsExactlyInAnyOrder(key1, key2); - assertThat(result.values()).containsExactlyInAnyOrder(value1, value2); - } + @Test + @DisplayName("mergeAll()") + public void mergeAll() { + //given + HashType key1 = HashType.MD5; + HashType key2 = HashType.DUMMY; + MD5Hash value1 = MD5Hash.create("1"); + MD5Hash value2 = MD5Hash.create("2"); + Hashes hashes1 = Hashes.create(key1, value1); + Hashes hashes2 = Hashes.create(key2, value2); + //when + Hashes result = Hashes.mergeAll(Arrays.asList(hashes1, hashes2)); + //then + assertThat(result.keys()).containsExactlyInAnyOrder(key1, key2); + assertThat(result.values()).containsExactlyInAnyOrder(value1, value2); } + } \ No newline at end of file diff --git a/lib/pom.xml b/lib/pom.xml index 20a129f..52c9bb9 100644 --- a/lib/pom.xml +++ b/lib/pom.xml @@ -41,27 +41,16 @@ thorp-storage - + - org.scala-lang - scala-library + org.junit.jupiter + junit-jupiter + test - - - org.scalatest - scalatest_2.13 + org.assertj + assertj-core test - - - - - net.alchim31.maven - scala-maven-plugin - - - - \ No newline at end of file diff --git a/lib/src/main/java/net/kemitix/thorp/lib/Archive.java b/lib/src/main/java/net/kemitix/thorp/lib/Archive.java new file mode 100644 index 0000000..b100fdf --- /dev/null +++ b/lib/src/main/java/net/kemitix/thorp/lib/Archive.java @@ -0,0 +1,49 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.config.Configuration; +import net.kemitix.thorp.console.Console; +import net.kemitix.thorp.console.ConsoleOut; +import net.kemitix.thorp.domain.RemoteKey; +import net.kemitix.thorp.domain.StorageEvent; +import net.kemitix.thorp.domain.channel.Sink; +import net.kemitix.thorp.uishell.UIEvent; + +public interface Archive { + + StorageEvent update( + Configuration configuration, + Sink uiSink, + SequencedAction sequencedAction, + long totalBytesSoFar); + + default StorageEvent logEvent( + Configuration configuration, + StorageEvent event + ) { + boolean batchMode = configuration.batchMode; + + if (event instanceof StorageEvent.UploadEvent) { + RemoteKey remoteKey = ((StorageEvent.UploadEvent) event).remoteKey; + Console.putMessageLnB( + ConsoleOut.uploadComplete(remoteKey), batchMode); + } else if (event instanceof StorageEvent.CopyEvent) { + StorageEvent.CopyEvent copyEvent = (StorageEvent.CopyEvent) event; + RemoteKey sourceKey = copyEvent.sourceKey; + RemoteKey targetKey = copyEvent.targetKey; + Console.putMessageLnB( + ConsoleOut.copyComplete(sourceKey, targetKey), batchMode); + } else if (event instanceof StorageEvent.DeleteEvent) { + RemoteKey remoteKey = ((StorageEvent.DeleteEvent) event).remoteKey; + Console.putMessageLnB( + ConsoleOut.deleteComplete(remoteKey), batchMode); + } else if (event instanceof StorageEvent.ErrorEvent) { + StorageEvent.ErrorEvent errorEvent = (StorageEvent.ErrorEvent) event; + StorageEvent.ActionSummary action = errorEvent.action; + Throwable e = errorEvent.e; + Console.putMessageLnB( + ConsoleOut.errorQueueEventOccurred(action, e), batchMode); + } + + return event; + } +} diff --git a/lib/src/main/java/net/kemitix/thorp/lib/FileScanner.java b/lib/src/main/java/net/kemitix/thorp/lib/FileScanner.java index a65e38c..8a5db43 100644 --- a/lib/src/main/java/net/kemitix/thorp/lib/FileScanner.java +++ b/lib/src/main/java/net/kemitix/thorp/lib/FileScanner.java @@ -2,6 +2,7 @@ package net.kemitix.thorp.lib; import net.kemitix.thorp.config.Configuration; import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Sink; import net.kemitix.thorp.filesystem.FileSystem; import net.kemitix.thorp.filesystem.PathCache; @@ -14,17 +15,16 @@ import java.util.List; public interface FileScanner { static void scanSources( Configuration configuration, - Channel.Sink fileSink + Sink fileSink ) { configuration.sources.paths() .forEach(path -> scanSource(configuration, fileSink, path)); - fileSink.shutdown(); } static void scanSource( Configuration configuration, - Channel.Sink fileSink, + Sink fileSink, Path sourcePath ) { scanPath(configuration, fileSink, sourcePath); @@ -32,7 +32,7 @@ public interface FileScanner { static void scanPath( Configuration configuration, - Channel.Sink fileSink, + Sink fileSink, Path path ) { // dirs @@ -45,7 +45,7 @@ public interface FileScanner { static void handleFile( Configuration configuration, - Channel.Sink fileSink, + Sink fileSink, File file ) { boolean isIncluded = Filters.isIncluded(configuration, file); diff --git a/lib/src/main/java/net/kemitix/thorp/lib/Filters.java b/lib/src/main/java/net/kemitix/thorp/lib/Filters.java new file mode 100644 index 0000000..a40a36a --- /dev/null +++ b/lib/src/main/java/net/kemitix/thorp/lib/Filters.java @@ -0,0 +1,56 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.config.Configuration; +import net.kemitix.thorp.domain.Filter; + +import java.io.File; +import java.nio.file.Path; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +public interface Filters { + + static boolean isIncluded( + Configuration configuration, + File file + ) { + return isIncluded(file.toPath(), configuration.filters); + } + + static boolean isIncluded( + Path path, + List filters + ) { + AtomicBoolean included = new AtomicBoolean(isIncludedByDefault(filters)); + filters.forEach( + filter -> { + if (included.get()) { + if (filter instanceof Filter.Exclude) { + boolean excludedByFilter = isExcludedByFilter(path, filter); + included.set(!excludedByFilter); + } + } else { + if (filter instanceof Filter.Include) { + boolean includedByFilter = isIncludedByFilter(path, filter); + included.set(includedByFilter); + } + } + } + ); + return included.get(); + } + + static boolean isIncludedByDefault(List filters) { + return filters.isEmpty() || + filters.stream() + .allMatch(filter -> + filter instanceof Filter.Exclude); + } + + static boolean isIncludedByFilter(Path path, Filter filter) { + return filter.predicate().test(path.toFile().getPath()); + } + static boolean isExcludedByFilter(Path path, Filter filter) { + return filter.predicate().test(path.toFile().getPath()); + } +} diff --git a/lib/src/main/java/net/kemitix/thorp/lib/LocalFileSystem.java b/lib/src/main/java/net/kemitix/thorp/lib/LocalFileSystem.java new file mode 100644 index 0000000..97ae8e2 --- /dev/null +++ b/lib/src/main/java/net/kemitix/thorp/lib/LocalFileSystem.java @@ -0,0 +1,183 @@ +package net.kemitix.thorp.lib; + +import lombok.val; +import net.kemitix.thorp.config.Configuration; +import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Channel; +import net.kemitix.thorp.domain.channel.Listener; +import net.kemitix.thorp.domain.channel.Sink; +import net.kemitix.thorp.filesystem.FileSystem; +import net.kemitix.thorp.uishell.UIEvent; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Function; + +public interface LocalFileSystem { + static List scanCopyUpload( + Configuration configuration, + Sink uiSink, + RemoteObjects remoteObjects, + Archive archive + ) throws InterruptedException { + AtomicInteger actionCounter = new AtomicInteger(); + AtomicLong bytesCounter = new AtomicLong(); + Map uploads = new HashMap<>(); + Deque events = new LinkedList<>(); + + Channel.create("file-scanner") + .addListener( + listener(configuration, uiSink, remoteObjects, archive, + uploads, actionCounter, bytesCounter, events)) + .run(sink -> FileScanner.scanSources(configuration, sink)) + .start() + .waitForShutdown(); + + return new ArrayList<>(events); + } + + static Listener listener( + Configuration configuration, + Sink uiSink, + RemoteObjects remoteObjects, + Archive archive, + Map uploads, + AtomicInteger actionCounter, + AtomicLong bytesCounter, + Deque events + ) { + val chooseAction = chooseAction(configuration, remoteObjects, uploads, uiSink); + val uiActionChosen = uiActionChosen(uiSink); + val uiActionFinished = uiActionFinished(uiSink, actionCounter, bytesCounter); + return localFile -> { + uiSink.accept(UIEvent.fileFound(localFile)); + Action action = chooseAction.apply(localFile); + actionCounter.incrementAndGet(); + bytesCounter.addAndGet(action.size); + uiActionChosen.accept(action); + SequencedAction sequencedAction = + SequencedAction.create(action, actionCounter.get()); + StorageEvent event = archive.update( + configuration, uiSink, sequencedAction, bytesCounter.get()); + events.addFirst(event); + uiActionFinished.accept(action, event); + }; + } + + static BiConsumer uiActionFinished( + Sink uiSink, + AtomicInteger actionCounter, + AtomicLong bytesCounter + ) { + return (action, event) -> uiSink.accept( + UIEvent.actionFinished(action, + actionCounter.get(), bytesCounter.get(), event)); + } + + static Consumer uiActionChosen(Sink uiSink) { + return action -> uiSink.accept(UIEvent.actionChosen(action)); + } + + static Function chooseAction( + Configuration configuration, + RemoteObjects remoteObjects, + Map uploads, + Sink uiSink + ) { + return localFile -> { + boolean remoteExists = remoteObjects.remoteKeyExists(localFile.remoteKey); + boolean remoteMatches = remoteObjects.remoteMatchesLocalFile(localFile); + Optional> remoteForHash = + remoteObjects.remoteHasHash(localFile.hashes); + Bucket bucket = configuration.bucket; + if (remoteExists && remoteMatches) { + return Action.doNothing(bucket, localFile.remoteKey, localFile.length); + } + if (remoteForHash.isPresent()) { + RemoteKey sourceKey = remoteForHash.get().a; + MD5Hash hash = remoteForHash.get().b; + return Action + .toCopy(bucket, sourceKey, hash, + localFile.remoteKey, + localFile.length); + } else if (localFile.hashes.values().stream() + .anyMatch(uploads::containsKey)) { + return doCopyWithPreviousUpload(localFile, bucket, uploads, uiSink); + } + return Action.toUpload(bucket, localFile, localFile.length); + }; + } + + static Action doCopyWithPreviousUpload( + LocalFile localFile, + Bucket bucket, + Map uploads, + Sink uiSink + ) { + return localFile.hashes + .values() + .stream() + .filter(uploads::containsKey) + .findFirst() + .map(hash -> { + uiSink.accept(UIEvent.awaitingAnotherUpload(localFile.remoteKey, hash)); + Action action = Action.toCopy(bucket, uploads.get(hash), hash, localFile.remoteKey, localFile.length); + //FIXME - there is no waiting going on here!! + uiSink.accept(UIEvent.anotherUploadWaitComplete(action)); + return action; + }).orElseGet(() -> + Action.toUpload(bucket, localFile, localFile.length)); + } + + static List scanDelete( + Configuration configuration, + Sink uiSink, + RemoteObjects remoteData, + Archive archive + ) throws InterruptedException { + AtomicInteger actionCounter = new AtomicInteger(); + AtomicLong bytesCounter = new AtomicLong(); + Deque events = new LinkedList<>(); + Channel.create("delete-scan") + .addListener(deleteListener( + configuration, uiSink, archive, + actionCounter, bytesCounter, events)) + .run(sink -> remoteData.byKey.keys().forEach(sink::accept)) + .start() + .waitForShutdown(); + return new ArrayList<>(events); + } + + static Listener deleteListener( + Configuration configuration, + Sink uiSink, + Archive archive, + AtomicInteger actionCounter, + AtomicLong bytesCounter, + Deque events + ) { + return remoteKey -> { + uiSink.accept(UIEvent.keyFound(remoteKey)); + val sources = configuration.sources; + val prefix = configuration.prefix; + val exists = FileSystem.hasLocalFile(sources, prefix, remoteKey); + if (!exists) { + actionCounter.incrementAndGet(); + val bucket = configuration.bucket; + val action = Action.toDelete(bucket, remoteKey, 0L); + uiActionChosen(uiSink).accept(action); + bytesCounter.addAndGet(action.size); + val sequencedAction = + SequencedAction.create(action, actionCounter.get()); + val event = archive.update(configuration, uiSink, + sequencedAction, 0L); + events.addFirst(event); + uiActionFinished(uiSink, actionCounter, bytesCounter) + .accept(action, event); + } + }; + } +} \ No newline at end of file diff --git a/lib/src/main/java/net/kemitix/thorp/lib/SequencedAction.java b/lib/src/main/java/net/kemitix/thorp/lib/SequencedAction.java new file mode 100644 index 0000000..924a957 --- /dev/null +++ b/lib/src/main/java/net/kemitix/thorp/lib/SequencedAction.java @@ -0,0 +1,20 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.mon.TypeAlias; +import net.kemitix.thorp.domain.Action; +import net.kemitix.thorp.domain.Tuple; + +public class SequencedAction extends TypeAlias> { + private SequencedAction(Tuple value) { + super(value); + } + public static SequencedAction create(Action action, Integer index) { + return new SequencedAction(Tuple.create(action, index)); + } + public Action action() { + return getValue().a; + } + public int index() { + return getValue().b; + } +} diff --git a/lib/src/main/java/net/kemitix/thorp/lib/UnversionedMirrorArchive.java b/lib/src/main/java/net/kemitix/thorp/lib/UnversionedMirrorArchive.java new file mode 100644 index 0000000..47dfde3 --- /dev/null +++ b/lib/src/main/java/net/kemitix/thorp/lib/UnversionedMirrorArchive.java @@ -0,0 +1,55 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.config.Configuration; +import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Sink; +import net.kemitix.thorp.storage.Storage; +import net.kemitix.thorp.uishell.UIEvent; +import net.kemitix.thorp.uishell.UploadEventListener; + +public class UnversionedMirrorArchive implements Archive { + + public static Archive create() { + return new UnversionedMirrorArchive(); + } + + @Override + public StorageEvent update( + Configuration configuration, + Sink uiSink, + SequencedAction sequencedAction, + long totalBytesSoFar + ) { + Action action = sequencedAction.action(); + int index = sequencedAction.index(); + Bucket bucket = action.bucket; + if (action instanceof Action.ToUpload) { + LocalFile localFile = ((Action.ToUpload) action).localFile; + return Storage.getInstance() + .upload(localFile, bucket, + UploadEventListener.settings( + uiSink, localFile, index, totalBytesSoFar, + configuration.batchMode)); + } else if(action instanceof Action.ToCopy) { + Action.ToCopy toCopy = (Action.ToCopy) action; + RemoteKey sourceKey = toCopy.sourceKey; + MD5Hash hash = toCopy.hash; + RemoteKey targetKey = toCopy.targetKey; + return Storage.getInstance() + .copy(bucket, sourceKey, hash, targetKey); + } else if(action instanceof Action.ToDelete) { + RemoteKey remoteKey = action.remoteKey; + try { + return Storage.getInstance().delete(bucket, remoteKey); + } catch (Throwable e) { + return StorageEvent.errorEvent( + StorageEvent.ActionSummary.delete(remoteKey.key()), + remoteKey, e); + } + } else { + RemoteKey remoteKey = action.remoteKey; + return StorageEvent.doNothingEvent(remoteKey); + } + } + +} diff --git a/lib/src/main/scala/net/kemitix/thorp/lib/Filters.scala b/lib/src/main/scala/net/kemitix/thorp/lib/Filters.scala deleted file mode 100644 index 54664da..0000000 --- a/lib/src/main/scala/net/kemitix/thorp/lib/Filters.scala +++ /dev/null @@ -1,50 +0,0 @@ -package net.kemitix.thorp.lib - -import java.io.File -import java.nio.file.Path - -import net.kemitix.thorp.config.Configuration -import net.kemitix.thorp.domain.Filter -import net.kemitix.thorp.domain.Filter.{Exclude, Include} - -import scala.jdk.CollectionConverters._ - -object Filters { - - def isIncluded(configuration: Configuration, file: File): Boolean = - isIncluded(file.toPath)(configuration.filters.asScala.toList) - - def isIncluded(p: Path)(filters: List[Filter]): Boolean = { - sealed trait State - final case class Unknown() extends State - final case class Accepted() extends State - final case class Discarded() extends State - val excluded = isExcludedByFilter(p)(_) - val included = isIncludedByFilter(p)(_) - filters.foldRight(Unknown(): State)( - (filter, state) => - (filter, state) match { - case (_, Accepted()) => Accepted() - case (_, Discarded()) => Discarded() - case (x: Exclude, _) if excluded(x) => Discarded() - case (i: Include, _) if included(i) => Accepted() - case _ => Unknown() - } - ) match { - case Accepted() => true - case Discarded() => false - case Unknown() => - filters.forall { - case _: Include => false - case _ => true - } - } - } - - def isIncludedByFilter(path: Path)(filter: Filter): Boolean = - filter.predicate.test(path.toFile.getPath) - - def isExcludedByFilter(path: Path)(filter: Filter): Boolean = - filter.predicate.test(path.toFile.getPath) - -} diff --git a/lib/src/main/scala/net/kemitix/thorp/lib/LocalFileSystem.scala b/lib/src/main/scala/net/kemitix/thorp/lib/LocalFileSystem.scala deleted file mode 100644 index 98c4b94..0000000 --- a/lib/src/main/scala/net/kemitix/thorp/lib/LocalFileSystem.scala +++ /dev/null @@ -1,262 +0,0 @@ -package net.kemitix.thorp.lib - -import java.util -import java.util.concurrent.atomic.{AtomicInteger, AtomicLong} - -import net.kemitix.thorp.config.Configuration -import net.kemitix.thorp.domain.Channel.{Listener, Sink} -import net.kemitix.thorp.domain.{RemoteObjects, _} -import net.kemitix.thorp.filesystem.FileSystem -import net.kemitix.thorp.uishell.UIEvent - -import scala.jdk.CollectionConverters._ -import scala.jdk.OptionConverters._ - -trait LocalFileSystem { - - def scanCopyUpload(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - remoteObjects: RemoteObjects, - archive: ThorpArchive): Seq[StorageEvent] - - def scanDelete(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - remoteData: RemoteObjects, - archive: ThorpArchive): Seq[StorageEvent] - -} -object LocalFileSystem extends LocalFileSystem { - - override def scanCopyUpload(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - remoteObjects: RemoteObjects, - archive: ThorpArchive): Seq[StorageEvent] = { - - val fileChannel: Channel[LocalFile] = Channel.create("files") - - // state for the file receiver - val actionCounter = new AtomicInteger() - val bytesCounter = new AtomicLong() - val uploads = Map.empty[MD5Hash, RemoteKey] - val events = new util.LinkedList[StorageEvent] - - fileChannel.addListener( - fileReceiver( - configuration, - uiSink, - remoteObjects, - archive, - uploads, - actionCounter, - bytesCounter, - events - ) - ) - - fileChannel.run( - sink => FileScanner.scanSources(configuration, sink), - "scan-sources" - ) - - fileChannel.start() - fileChannel.waitForShutdown() - events.asScala.toList - } - - override def scanDelete(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - remoteData: RemoteObjects, - archive: ThorpArchive): Seq[StorageEvent] = { - val deletionsChannel: Channel[RemoteKey] = Channel.create("deletions") - - // state for the file receiver - val actionCounter = new AtomicInteger() - val bytesCounter = new AtomicLong() - val events = new util.LinkedList[StorageEvent] - - deletionsChannel.addListener( - keyReceiver( - configuration, - uiSink, - archive, - actionCounter, - bytesCounter, - events - ) - ) - - deletionsChannel.run(sink => { - remoteData.byKey.keys().forEach(key => sink.accept(key)) - sink.shutdown() - }, "delete-source") - - deletionsChannel.start() - deletionsChannel.waitForShutdown() - events.asScala.toList - } - - private def fileReceiver( - configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - remoteObjects: RemoteObjects, - archive: ThorpArchive, - uploads: Map[MD5Hash, RemoteKey], - actionCounter: AtomicInteger, - bytesCounter: AtomicLong, - events: util.Deque[StorageEvent] - ): Listener[LocalFile] = { (localFile: LocalFile) => - { - uiFileFound(uiSink)(localFile) - val action = - chooseAction(configuration, remoteObjects, uploads, uiSink)(localFile) - actionCounter.incrementAndGet() - bytesCounter.addAndGet(action.size) - uiActionChosen(uiSink)(action) - val sequencedAction = SequencedAction(action, actionCounter.get()) - val event = archive - .update(configuration, uiSink, sequencedAction, bytesCounter.get) - events.addFirst(event) - uiActionFinished(uiSink)( - action, - actionCounter.get, - bytesCounter.get, - event - ) - } - } - - private def uiActionChosen( - uiSink: Channel.Sink[UIEvent] - )(action: Action): Unit = - uiSink.accept(UIEvent.actionChosen(action)) - - private def uiActionFinished(uiSink: Channel.Sink[UIEvent])( - action: Action, - actionCounter: Int, - bytesCounter: Long, - event: StorageEvent - ): Unit = - uiSink.accept( - UIEvent.actionFinished(action, actionCounter, bytesCounter, event) - ) - - private def uiFileFound( - uiSink: Channel.Sink[UIEvent] - )(localFile: LocalFile): Unit = - uiSink.accept(UIEvent.fileFound(localFile)) - - private def chooseAction(configuration: Configuration, - remoteObjects: RemoteObjects, - uploads: Map[MD5Hash, RemoteKey], - uiSink: Channel.Sink[UIEvent], - )(localFile: LocalFile): Action = { - val remoteExists = remoteObjects.remoteKeyExists(localFile.remoteKey) - val remoteMatches = remoteObjects.remoteMatchesLocalFile(localFile) - val remoteForHash = remoteObjects.remoteHasHash(localFile.hashes).toScala - val previous = uploads - val bucket = configuration.bucket - val action = if (remoteExists && remoteMatches) { - doNothing(localFile, bucket) - } else { - remoteForHash match { - case pair: Some[Tuple[RemoteKey, MD5Hash]] => - val sourceKey = pair.value.a - val hash = pair.value.b - doCopy(localFile, bucket, sourceKey, hash) - case _ if matchesPreviousUpload(previous, localFile.hashes) => - doCopyWithPreviousUpload(localFile, bucket, previous, uiSink) - case _ => - doUpload(localFile, bucket) - } - } - action - } - - private def matchesPreviousUpload(previous: Map[MD5Hash, RemoteKey], - hashes: Hashes) = - hashes - .values() - .stream() - .anyMatch({ hash => - previous.contains(hash) - }) - - private def doNothing(localFile: LocalFile, bucket: Bucket) = - Action.doNothing(bucket, localFile.remoteKey, localFile.length) - - private def doCopy(localFile: LocalFile, - bucket: Bucket, - sourceKey: RemoteKey, - hash: MD5Hash) = - Action - .toCopy(bucket, sourceKey, hash, localFile.remoteKey, localFile.length) - - private def doCopyWithPreviousUpload(localFile: LocalFile, - bucket: Bucket, - previous: Map[MD5Hash, RemoteKey], - uiSink: Channel.Sink[UIEvent], - ) = { - localFile.hashes - .values() - .stream() - .filter({ hash => - previous.contains(hash) - }) - .findFirst() - .toScala - .map({ hash => - { - uiSink - .accept(UIEvent.awaitingAnotherUpload(localFile.remoteKey, hash)) - val action = Action.toCopy( - bucket, - previous(hash), - hash, - localFile.remoteKey, - localFile.length - ) - uiSink.accept(UIEvent.anotherUploadWaitComplete(action)) - action - } - }) - .getOrElse(doUpload(localFile, bucket)) - } - - private def doUpload(localFile: LocalFile, bucket: Bucket) = - Action.toUpload(bucket, localFile, localFile.length) - - def keyReceiver(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - archive: ThorpArchive, - actionCounter: AtomicInteger, - bytesCounter: AtomicLong, - events: util.Deque[StorageEvent]): Listener[RemoteKey] = { - (remoteKey: RemoteKey) => - { - uiKeyFound(uiSink)(remoteKey) - val sources = configuration.sources - val prefix = configuration.prefix - val exists = FileSystem.hasLocalFile(sources, prefix, remoteKey) - if (!exists) { - actionCounter.incrementAndGet() - val bucket = configuration.bucket - val action = Action.toDelete(bucket, remoteKey, 0L) - uiActionChosen(uiSink)(action) - bytesCounter.addAndGet(action.size) - val sequencedAction = SequencedAction(action, actionCounter.get()) - val event = archive.update(configuration, uiSink, sequencedAction, 0L) - events.addFirst(event) - uiActionFinished(uiSink)( - action, - actionCounter.get(), - bytesCounter.get(), - event - ) - } - } - } - - private def uiKeyFound(uiSink: Sink[UIEvent])(remoteKey: RemoteKey): Unit = - uiSink.accept(UIEvent.keyFound(remoteKey)) - -} diff --git a/lib/src/main/scala/net/kemitix/thorp/lib/SequencedAction.scala b/lib/src/main/scala/net/kemitix/thorp/lib/SequencedAction.scala deleted file mode 100644 index c81c05a..0000000 --- a/lib/src/main/scala/net/kemitix/thorp/lib/SequencedAction.scala +++ /dev/null @@ -1,8 +0,0 @@ -package net.kemitix.thorp.lib - -import net.kemitix.thorp.domain.Action - -final case class SequencedAction( - action: Action, - index: Int -) diff --git a/lib/src/main/scala/net/kemitix/thorp/lib/ThorpArchive.scala b/lib/src/main/scala/net/kemitix/thorp/lib/ThorpArchive.scala deleted file mode 100644 index 8950d35..0000000 --- a/lib/src/main/scala/net/kemitix/thorp/lib/ThorpArchive.scala +++ /dev/null @@ -1,44 +0,0 @@ -package net.kemitix.thorp.lib - -import net.kemitix.thorp.config.Configuration -import net.kemitix.thorp.console._ -import net.kemitix.thorp.domain.StorageEvent._ -import net.kemitix.thorp.domain.{Channel, StorageEvent} -import net.kemitix.thorp.uishell.UIEvent - -trait ThorpArchive { - - def update(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - sequencedAction: SequencedAction, - totalBytesSoFar: Long): StorageEvent - - def logEvent(configuration: Configuration, - event: StorageEvent): StorageEvent = { - val batchMode = configuration.batchMode - event match { - case uploadEvent: UploadEvent => - val remoteKey = uploadEvent.remoteKey - Console.putMessageLnB(ConsoleOut.uploadComplete(remoteKey), batchMode) - case copyEvent: CopyEvent => - val sourceKey = copyEvent.sourceKey - val targetKey = copyEvent.targetKey - Console.putMessageLnB( - ConsoleOut.copyComplete(sourceKey, targetKey), - batchMode - ) - case deleteEvent: DeleteEvent => - val remoteKey = deleteEvent.remoteKey - Console.putMessageLnB(ConsoleOut.deleteComplete(remoteKey), batchMode) - case errorEvent: ErrorEvent => - val action = errorEvent.action - val e = errorEvent.e - Console.putMessageLnB( - ConsoleOut.errorQueueEventOccurred(action, e), - batchMode - ) - } - event - } - -} diff --git a/lib/src/main/scala/net/kemitix/thorp/lib/UnversionedMirrorArchive.scala b/lib/src/main/scala/net/kemitix/thorp/lib/UnversionedMirrorArchive.scala deleted file mode 100644 index 121511b..0000000 --- a/lib/src/main/scala/net/kemitix/thorp/lib/UnversionedMirrorArchive.scala +++ /dev/null @@ -1,92 +0,0 @@ -package net.kemitix.thorp.lib - -import net.kemitix.thorp.config.Configuration -import net.kemitix.thorp.domain.Action.{ToCopy, ToDelete, ToUpload} -import net.kemitix.thorp.domain.StorageEvent.ActionSummary -import net.kemitix.thorp.domain._ -import net.kemitix.thorp.storage.Storage -import net.kemitix.thorp.uishell.{UIEvent, UploadEventListener} - -trait UnversionedMirrorArchive extends ThorpArchive { - - override def update(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - sequencedAction: SequencedAction, - totalBytesSoFar: Long): StorageEvent = { - val action = sequencedAction.action - val index = sequencedAction.index - val bucket = action.bucket - action match { - case upload: ToUpload => - val localFile = upload.localFile - doUpload( - configuration, - uiSink, - index, - totalBytesSoFar, - bucket, - localFile - ) - case toCopy: ToCopy => - val sourceKey = toCopy.sourceKey - val hash = toCopy.hash - val targetKey = toCopy.targetKey - Storage - .getInstance() - .copy(bucket, sourceKey, hash, targetKey) - case toDelete: ToDelete => - val remoteKey = toDelete.remoteKey - try { - Storage.getInstance().delete(bucket, remoteKey) - } catch { - case e: Throwable => - StorageEvent.errorEvent( - ActionSummary.delete(remoteKey.key()), - remoteKey, - e - ); - } - case doNothing: Action.DoNothing => - val remoteKey = doNothing.remoteKey - StorageEvent.doNothingEvent(remoteKey) - } - } - - private def doUpload(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - index: Int, - totalBytesSoFar: Long, - bucket: Bucket, - localFile: LocalFile) = - Storage - .getInstance() - .upload( - localFile, - bucket, - listenerSettings( - configuration, - uiSink, - index, - totalBytesSoFar, - bucket, - localFile - ) - ) - - private def listenerSettings(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - index: Int, - totalBytesSoFar: Long, - bucket: Bucket, - localFile: LocalFile) = - UploadEventListener.settings( - uiSink, - localFile, - index, - totalBytesSoFar, - configuration.batchMode - ) - -} - -object UnversionedMirrorArchive extends UnversionedMirrorArchive diff --git a/lib/src/test/java/net/kemitix/thorp/lib/FileScannerTest.java b/lib/src/test/java/net/kemitix/thorp/lib/FileScannerTest.java new file mode 100644 index 0000000..4a386c8 --- /dev/null +++ b/lib/src/test/java/net/kemitix/thorp/lib/FileScannerTest.java @@ -0,0 +1,49 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.config.Configuration; +import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Channel; +import net.kemitix.thorp.filesystem.Resource; +import org.assertj.core.api.WithAssertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class FileScannerTest + implements WithAssertions { + + @Test + @DisplayName("scan resources as source") + public void scanResources() throws InterruptedException { + //given + File source = Resource.select(this, "upload").toFile(); + Configuration configuration = Configuration.create() + .withSources(Sources.create( + Collections.singletonList( + source.toPath()))); + List localFiles = new ArrayList<>(); + //when + Channel.create("test-file-scan") + .addListener(localFiles::add) + .run(sink -> FileScanner.scanSources(configuration, sink)) + .start() + .waitForShutdown(); + //then + File rootFile = source.toPath().resolve("root-file").toFile(); + File leafFile = source.toPath().resolve("subdir/leaf-file").toFile(); + Hashes rootHashes = Hashes.create(HashType.MD5, MD5HashData.Root.hash); + Hashes leafHashes = Hashes.create(HashType.MD5, MD5HashData.Leaf.hash); + RemoteKey rootKey = RemoteKey.create("root-file"); + RemoteKey leafKey = RemoteKey.create("subdir/leaf-file"); + long rootLength = 55L; + long leafLength = 58L; + assertThat(localFiles) + .containsExactlyInAnyOrder( + LocalFile.create(rootFile, source, rootHashes, rootKey, rootLength), + LocalFile.create(leafFile, source, leafHashes, leafKey, leafLength)); + } +} diff --git a/lib/src/test/java/net/kemitix/thorp/lib/FiltersTest.java b/lib/src/test/java/net/kemitix/thorp/lib/FiltersTest.java new file mode 100644 index 0000000..626f378 --- /dev/null +++ b/lib/src/test/java/net/kemitix/thorp/lib/FiltersTest.java @@ -0,0 +1,190 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.domain.Filter; +import org.assertj.core.api.WithAssertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class FiltersTest + implements WithAssertions { + + private final String path1 = "a-file"; + private final String path2 = "another-file.txt"; + private final String path3 = "/path/to/a/file.txt"; + private final String path4 = "/path/to/another/file"; + private final String path5 = "/home/pcampbell/repos/kemitix/s3thorp"; + private final String path6 = "/kemitix/s3thorp/upload/subdir"; + private final List paths = + Stream.of(path1, path2, path3, path4, path5, path6) + .map(Paths::get) + .collect(Collectors.toList()); + + @Nested + @DisplayName("include") + public class IncludeTests { + @Test + @DisplayName("default filter") + public void defaultFilter() { + //given + List filters = Collections.singletonList( + Filter.Include.all()); + //then + assertThat(paths) + .allMatch(path -> + Filters.isIncluded(path, filters)); + } + @Nested + @DisplayName("directory exact match") + public class DirectoryExactMatchTests { + List filters = Collections.singletonList( + Filter.include("/upload/subdir/")); + @Test + @DisplayName("include matching directory") + public void includeMatchingDirectory() { + //given + Path path = Paths.get("/upload/subdir/leaf-dir"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isTrue(); + } + @Test + @DisplayName("exclude non-matching file") + public void excludeNonMatchingFile() { + //given + Path path = Paths.get("/upload/other-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isFalse(); + } + } + @Nested + @DisplayName("file partial match 'root'") + public class FilePartialMatchRootTests { + List filters = Collections.singletonList( + Filter.include("root")); + @Test + @DisplayName("include matching file") + public void includeMatchingFile() { + //given + Path path = Paths.get("/upload/root-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isTrue(); + } + @Test + @DisplayName("exclude non-matching file (1)") + public void excludeNonMatchingFile1() { + //given + Path path = Paths.get("/test-file-for-hash.txt"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isFalse(); + } + @Test + @DisplayName("exclude non-matching file (2)") + public void excludeNonMatchingFile2() { + //given + Path path = Paths.get("/upload/subdir/lead-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isFalse(); + } + } + } + @Nested + @DisplayName("exclude") + public class ExcludeTests { + @Nested + @DisplayName("directory exact match exclude") + public class DirectoryMatchTests { + List filters = Collections.singletonList( + Filter.exclude("/upload/subdir/")); + @Test + @DisplayName("exclude matching directory") + public void excludeDirectory() { + //given + Path path = Paths.get("/upload/subdir/leaf-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isFalse(); + } + @Test + @DisplayName("include non-matching file") + public void includeFile() { + //given + Path path = Paths.get("/upload/other-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isTrue(); + } + } + @Nested + @DisplayName("file partial match") + public class PartialMatchTests { + List filters = Collections.singletonList( + Filter.exclude("root")); + @Test + @DisplayName("exclude matching file") + public void excludeFile() { + //given + Path path = Paths.get("/upload/root-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isFalse(); + } + @Test + @DisplayName("include non-matching file (1)") + public void includeFile1() { + //given + Path path = Paths.get("/test-file-for-hash.txt"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isTrue(); + } + @Test + @DisplayName("include non-matching file (2)") + public void includeFile2() { + //given + Path path = Paths.get("/upload/subdir/leaf-file"); + //when + boolean included = Filters.isIncluded(path, filters); + //then + assertThat(included).isTrue(); + } + } + } + @Nested + @DisplayName("isIncluded") + public class IsIncludedTests { + List invoke(List filters) { + return paths.stream() + .filter(path -> + Filters.isIncluded(path, filters)) + .collect(Collectors.toList()); + } + + @Test + @DisplayName("when no filters then accepts all paths") + public void whenNoFilters_thenAcceptAll() { + assertThat(invoke(Collections.emptyList())) + .containsExactlyElementsOf(paths); + } + } +} diff --git a/lib/src/test/java/net/kemitix/thorp/lib/LocalFileSystemTest.java b/lib/src/test/java/net/kemitix/thorp/lib/LocalFileSystemTest.java new file mode 100644 index 0000000..8723e6a --- /dev/null +++ b/lib/src/test/java/net/kemitix/thorp/lib/LocalFileSystemTest.java @@ -0,0 +1,426 @@ +package net.kemitix.thorp.lib; + +import net.kemitix.thorp.config.*; +import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Channel; +import net.kemitix.thorp.domain.channel.Listener; +import net.kemitix.thorp.domain.channel.Sink; +import net.kemitix.thorp.filesystem.Resource; +import net.kemitix.thorp.uishell.UIEvent; +import org.assertj.core.api.WithAssertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +public class LocalFileSystemTest + implements WithAssertions { + + private final Resource source = Resource.select(this, "upload"); + private final Path sourcePath = source.toPath(); + private final ConfigOption sourceOption = ConfigOption.source(sourcePath); + private final Bucket bucket = Bucket.named("bucket"); + private final ConfigOption bucketOption = ConfigOption.bucket(bucket.name()); + private final ConfigOptions configOptions = ConfigOptions.create( + Arrays.asList( + sourceOption, + bucketOption, + ConfigOption.ignoreGlobalOptions(), + ConfigOption.ignoreUserOptions() + )); + + private final AtomicReference> uiEvents = new AtomicReference<>(Collections.emptyList()); + private final AtomicReference> actions = new AtomicReference<>(Collections.emptyList()); + + private final Archive archive = + (configuration, uiSink, sequencedAction, totalBytesSoFar) -> { + actions.updateAndGet(l -> { + List list = new ArrayList<>(); + list.add(sequencedAction); + list.addAll(l); + return list; + }); + return StorageEvent.doNothingEvent( + sequencedAction.action().remoteKey); + }; + + @Nested + @DisplayName("scanCopyUpload") + public class ScanCopyUploadTests { + @Nested + @DisplayName("where remote is empty") + public class WhereRemoteEmptyTests { + RemoteObjects remoteObjects = RemoteObjects.empty; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + + public WhereRemoteEmptyTests() throws IOException, ConfigValidationException { + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanCopyUpload( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("update archive with all files") + public void uploadArchive() { + assertThat(storageEvents).hasSize(2); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .allSatisfy(action -> + assertThat(action) + .isInstanceOf(Action.ToUpload.class)); + assertThat(actions.get().stream() + .map(SequencedAction::action) + .map(action -> action.remoteKey)) + .containsExactlyInAnyOrder( + MD5HashData.Root.remoteKey, + MD5HashData.Leaf.remoteKey + ); + } + + @Test + @DisplayName("update ui with all files") + public void updateUI() { + assertThat(uiEventSummary(uiEventList)) + .hasSize(6) + .contains( + "file found : root-file", + "action chosen : root-file : ToUpload", + "action finished : root-file : ToUpload") + .contains( + "file found : subdir/leaf-file", + "action chosen : subdir/leaf-file : ToUpload", + "action finished : subdir/leaf-file : ToUpload"); + } + } + + @Nested + @DisplayName("where remote has all") + public class WhereRemoteHasAllTests { + Map hashToKey = new HashMap<>(); + Map keyToHash = new HashMap<>(); + RemoteObjects remoteObjects; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + + public WhereRemoteHasAllTests() throws IOException, ConfigValidationException { + hashToKey.put(MD5HashData.Root.hash, MD5HashData.Root.remoteKey); + hashToKey.put(MD5HashData.Leaf.hash, MD5HashData.Leaf.remoteKey); + keyToHash.put(MD5HashData.Root.remoteKey, MD5HashData.Root.hash); + keyToHash.put(MD5HashData.Leaf.remoteKey, MD5HashData.Leaf.hash); + remoteObjects = RemoteObjects.create( + MapView.of(hashToKey).asMap(), + MapView.of(keyToHash).asMap()); + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanCopyUpload( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("do nothing for all files") + public void doNothing() { + assertThat(storageEvents).hasSize(2); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .allSatisfy(action -> + assertThat(action) + .isInstanceOf(Action.DoNothing.class)); + } + + @Test + @DisplayName("update ui with do nothing") + public void updateUI() { + assertThat(uiEventSummary(uiEventList)) + .hasSize(6) + .contains( + "file found : root-file", + "action chosen : root-file : DoNothing", + "action finished : root-file : DoNothing") + .contains( + "file found : subdir/leaf-file", + "action chosen : subdir/leaf-file : DoNothing", + "action finished : subdir/leaf-file : DoNothing"); + } + } + + @Nested + @DisplayName("where remote has some") + public class WhereRemoteHasSomeTests { + Map hashToKey = new HashMap<>(); + Map keyToHash = new HashMap<>(); + RemoteObjects remoteObjects; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + + public WhereRemoteHasSomeTests() throws IOException, ConfigValidationException { + hashToKey.put(MD5HashData.Root.hash, MD5HashData.Root.remoteKey); + keyToHash.put(MD5HashData.Root.remoteKey, MD5HashData.Root.hash); + remoteObjects = RemoteObjects.create( + MapView.of(hashToKey).asMap(), + MapView.of(keyToHash).asMap()); + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanCopyUpload( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("do nothing for some, upload for others") + public void doNothingAnUpload() { + assertThat(storageEvents).hasSize(2); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .filteredOn(action -> action instanceof Action.DoNothing) + .hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .filteredOn(action -> action instanceof Action.ToUpload) + .hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action) + .map(action -> action.remoteKey)) + .containsExactlyInAnyOrder( + MD5HashData.Root.remoteKey, + MD5HashData.Leaf.remoteKey + ); + } + + @Test + @DisplayName("update ui with do nothing") + public void updateUI() { + assertThat(uiEventSummary(uiEventList)) + .hasSize(6) + .contains( + "file found : root-file", + "action chosen : root-file : DoNothing", + "action finished : root-file : DoNothing") + .contains( + "file found : subdir/leaf-file", + "action chosen : subdir/leaf-file : ToUpload", + "action finished : subdir/leaf-file : ToUpload"); + } + } + + @Nested + @DisplayName("where file has been renamed") + public class WhereFileRenamedTests { + Map hashToKey = new HashMap<>(); + Map keyToHash = new HashMap<>(); + RemoteObjects remoteObjects; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + + public WhereFileRenamedTests() throws IOException, ConfigValidationException { + RemoteKey otherKey = RemoteKey.create("/old-filename"); + hashToKey.put(MD5HashData.Root.hash, otherKey); + hashToKey.put(MD5HashData.Leaf.hash, MD5HashData.Leaf.remoteKey); + keyToHash.put(otherKey, MD5HashData.Root.hash); + keyToHash.put(MD5HashData.Leaf.remoteKey, MD5HashData.Leaf.hash); + remoteObjects = RemoteObjects.create( + MapView.of(hashToKey).asMap(), + MapView.of(keyToHash).asMap()); + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanCopyUpload( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("copy") + public void copy() { + assertThat(storageEvents).hasSize(2); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .filteredOn(action -> action instanceof Action.ToCopy) + .hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .filteredOn(action -> action instanceof Action.DoNothing) + .hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action) + .map(action -> action.remoteKey)) + .containsExactlyInAnyOrder( + MD5HashData.Root.remoteKey, + MD5HashData.Leaf.remoteKey + ); + } + + @Test + @DisplayName("update ui") + public void updateUI() { + assertThat(uiEventSummary(uiEventList)) + .hasSize(6) + .contains( + "file found : root-file", + "action chosen : root-file : ToCopy", + "action finished : root-file : ToCopy") + .contains( + "file found : subdir/leaf-file", + "action chosen : subdir/leaf-file : DoNothing", + "action finished : subdir/leaf-file : DoNothing"); + } + } + } + + @Nested + @DisplayName("scanDelete") + public class ScanDeleteTests { + @Nested + @DisplayName("where remote has no extra objects") + public class RemoteHasNoExtrasTests { + RemoteObjects remoteObjects = RemoteObjects.empty; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + + public RemoteHasNoExtrasTests() throws IOException, ConfigValidationException { + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanDelete( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("no archive actions") + public void noArchiveUpdates() { + assertThat(storageEvents).isEmpty(); + } + + @Test + @DisplayName("update ui") + public void updateUI() { + assertThat(uiEventList).isEmpty(); + } + } + @Nested + @DisplayName("where remote has extra objects") + public class RemoteHasExtrasTests { + Map hashToKey = new HashMap<>(); + Map keyToHash = new HashMap<>(); + RemoteObjects remoteObjects; + Configuration configuration = ConfigurationBuilder.buildConfig(configOptions); + List uiEventList = new ArrayList<>(); + Channel uiSink = Channel.create("ui-test") + .addListener(uiEventList::add) + .start(); + List storageEvents; + RemoteKey extraKey = RemoteKey.create("/extra"); + MD5Hash extraHash = MD5Hash.create("extra-hash"); + + public RemoteHasExtrasTests() throws IOException, ConfigValidationException { + hashToKey.put(extraHash, extraKey); + keyToHash.put(extraKey, extraHash); + remoteObjects = RemoteObjects.create( + MapView.of(hashToKey).asMap(), + MapView.of(keyToHash).asMap()); + } + + @BeforeEach + public void setUp() throws InterruptedException { + storageEvents = LocalFileSystem.scanDelete( + configuration, uiSink, remoteObjects, archive); + uiSink.shutdownNow(); + } + + @Test + @DisplayName("archive delete action") + public void archiveDeleteUpdates() { + assertThat(storageEvents).hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action)) + .filteredOn(action -> action instanceof Action.ToDelete) + .hasSize(1); + assertThat(actions.get().stream() + .map(SequencedAction::action) + .map(action -> action.remoteKey)) + .containsExactly(extraKey); + } + + @Test + @DisplayName("update ui") + public void updateUI() { + assertThat(uiEventSummary(uiEventList)) + .hasSize(3) + .contains( + "key found: /extra", + "action chosen : /extra : ToDelete", + "action finished : /extra : ToDelete"); + } + } + } + + private List uiEventSummary(List uiEvents) { + Deque summary = new ArrayDeque<>(); + uiEvents.stream() + .map(uiEvent -> { + if (uiEvent instanceof UIEvent.FileFound) { + return String.format("file found : %s", + ((UIEvent.FileFound) uiEvent).localFile + .remoteKey.key()); + } else if (uiEvent instanceof UIEvent.ActionChosen) { + Action action = ((UIEvent.ActionChosen) uiEvent).action; + return String.format( + "action chosen : %s : %s", + action.remoteKey.key(), + action.getClass().getSimpleName()); + } else if (uiEvent instanceof UIEvent.ActionFinished) { + Action action = ((UIEvent.ActionFinished) uiEvent).action; + return String.format( + "action finished : %s : %s", + action.remoteKey.key(), + action.getClass().getSimpleName()); + } else if (uiEvent instanceof UIEvent.KeyFound) { + return String.format("key found: %s", + ((UIEvent.KeyFound) uiEvent).remoteKey + .key()); + } + return String.format("unknown : %s", + uiEvent.getClass().getSimpleName()); + }) + .forEach(summary::addLast); + return new ArrayList<>(summary); + } +} diff --git a/lib/src/test/resources/META-INF/services/net.kemitix.thorp.domain.HashGenerator b/lib/src/test/resources/META-INF/services/net.kemitix.thorp.domain.HashGenerator new file mode 100644 index 0000000..91c71ca --- /dev/null +++ b/lib/src/test/resources/META-INF/services/net.kemitix.thorp.domain.HashGenerator @@ -0,0 +1 @@ +net.kemitix.thorp.filesystem.MD5HashGenerator diff --git a/lib/src/test/scala/net/kemitix/thorp/lib/FileScannerTest.scala b/lib/src/test/scala/net/kemitix/thorp/lib/FileScannerTest.scala deleted file mode 100644 index 563c599..0000000 --- a/lib/src/test/scala/net/kemitix/thorp/lib/FileScannerTest.scala +++ /dev/null @@ -1,46 +0,0 @@ -package net.kemitix.thorp.lib - -import org.scalatest.FreeSpec - -class FileScannerTest extends FreeSpec { - -// "scanSources" - { -// "creates a FileSender for files in resources" in { -// def receiver(scanned: Ref[List[RemoteKey]]) -// : UIO[MessageChannel.UReceiver[Any, ScannedFile]] = UIO { message => -// for { -// _ <- scanned.update(l => message.body.remoteKey :: l) -// } yield () -// } -// val scannedFiles = -// new AtomicReference[List[RemoteKey]](List.empty) -// val sourcePath = Resource.select(this, "upload").toPath -// val configOptions: List[ConfigOption] = -// List[ConfigOption](ConfigOption.source(sourcePath), -// ConfigOption.bucket("bucket"), -// ConfigOption.ignoreGlobalOptions(), -// ConfigOption.ignoreUserOptions()) -// val program: ZIO[Clock with FileScanner, Throwable, Unit] = { -// val configuration = ConfigurationBuilder.buildConfig( -// ConfigOptions.create(configOptions.asJava)) -// for { -// scanner <- FileScanner.scanSources(configuration) -// scannedRef <- Ref.make[List[RemoteKey]](List.empty) -// receiver <- receiver(scannedRef) -// _ <- MessageChannel.pointToPoint(scanner)(receiver).runDrain -// scanned <- scannedRef.get -// _ <- UIO(scannedFiles.set(scanned)) -// } yield () -// } -// object TestEnv extends FileScanner.Live with Clock.Live -// val completed = -// new DefaultRuntime {}.unsafeRunSync(program.provide(TestEnv)).toEither -// assert(completed.isRight) -// assertResult( -// Set(RemoteKey.create("root-file"), -// RemoteKey.create("subdir/leaf-file")))(scannedFiles.get.toSet) -// } -// -// } - -} diff --git a/lib/src/test/scala/net/kemitix/thorp/lib/FiltersSuite.scala b/lib/src/test/scala/net/kemitix/thorp/lib/FiltersSuite.scala deleted file mode 100644 index 8903b70..0000000 --- a/lib/src/test/scala/net/kemitix/thorp/lib/FiltersSuite.scala +++ /dev/null @@ -1,139 +0,0 @@ -package net.kemitix.thorp.lib - -import java.nio.file.Paths - -import net.kemitix.thorp.domain.Filter -import net.kemitix.thorp.domain.Filter.{Exclude, Include} -import org.scalatest.FunSpec - -class FiltersSuite extends FunSpec { - - private val path1 = "a-file" - private val path2 = "another-file.txt" - private val path3 = "/path/to/a/file.txt" - private val path4 = "/path/to/another/file" - private val path5 = "/home/pcampbell/repos/kemitix/s3thorp" - private val path6 = "/kemitix/s3thorp/upload/subdir" - private val paths = - List(path1, path2, path3, path4, path5, path6).map(Paths.get(_)) - - describe("Include") { - - describe("default filter") { - val include = Include.all - it("should include files") { - paths.foreach(path => - assertResult(true)(Filters.isIncludedByFilter(path)(include))) - } - } - describe("directory exact match include '/upload/subdir/'") { - val include = Include.create("/upload/subdir/") - it("include matching directory") { - val matching = Paths.get("/upload/subdir/leaf-file") - assertResult(true)(Filters.isIncludedByFilter(matching)(include)) - } - it("exclude non-matching files") { - val nonMatching = Paths.get("/upload/other-file") - assertResult(false)(Filters.isIncludedByFilter(nonMatching)(include)) - } - } - describe("file partial match 'root'") { - val include = Include.create("root") - it("include matching file '/upload/root-file") { - val matching = Paths.get("/upload/root-file") - assertResult(true)(Filters.isIncludedByFilter(matching)(include)) - } - it("exclude non-matching files 'test-file-for-hash.txt'") { - val nonMatching1 = Paths.get("/test-file-for-hash.txt") - assertResult(false)(Filters.isIncludedByFilter(nonMatching1)(include)) - } - it("exclude non-matching files '/upload/subdir/leaf-file'") { - val nonMatching2 = Paths.get("/upload/subdir/leaf-file") - assertResult(false)(Filters.isIncludedByFilter(nonMatching2)(include)) - } - } - } - - describe("Exclude") { -// describe("default exclude") { -// val exclude = Exclude() -// it("should exclude all files") { -// paths.foreach(path => { -// assertResult(true)(exclude.isExcluded(path)) -// }) -// } -// } - describe("directory exact match exclude '/upload/subdir/'") { - val exclude = Exclude.create("/upload/subdir/") - it("exclude matching directory") { - val matching = Paths.get("/upload/subdir/leaf-file") - assertResult(true)(Filters.isExcludedByFilter(matching)(exclude)) - } - it("include non-matching files") { - val nonMatching = Paths.get("/upload/other-file") - assertResult(false)(Filters.isExcludedByFilter(nonMatching)(exclude)) - } - } - describe("file partial match 'root'") { - val exclude = Exclude.create("root") - it("exclude matching file '/upload/root-file") { - val matching = Paths.get("/upload/root-file") - assertResult(true)(Filters.isExcludedByFilter(matching)(exclude)) - } - it("include non-matching files 'test-file-for-hash.txt'") { - val nonMatching1 = Paths.get("/test-file-for-hash.txt") - assertResult(false)(Filters.isExcludedByFilter(nonMatching1)(exclude)) - } - it("include non-matching files '/upload/subdir/leaf-file'") { - val nonMatching2 = Paths.get("/upload/subdir/leaf-file") - assertResult(false)(Filters.isExcludedByFilter(nonMatching2)(exclude)) - } - } - } - describe("isIncluded") { - def invoke(filters: List[Filter]) = { - paths.filter(path => Filters.isIncluded(path)(filters)) - } - - describe("when there are no filters") { - val filters = List[Filter]() - it("should accept all files") { - val expected = paths - val result = invoke(filters) - assertResult(expected)(result) - } - } - describe("when a single include") { - val filters = List(Include.create(".txt")) - it("should only include two matching paths") { - val expected = List(path2, path3).map(Paths.get(_)) - val result = invoke(filters) - assertResult(expected)(result) - } - } - describe("when a single exclude") { - val filters = List(Exclude.create("path")) - it("should include only other paths") { - val expected = List(path1, path2, path5, path6).map(Paths.get(_)) - val result = invoke(filters) - assertResult(expected)(result) - } - } - describe("when include .txt files, but then exclude everything trumps all") { - val filters = List[Filter](Include.create(".txt"), Exclude.create(".*")) - it("should include nothing") { - val expected = List() - val result = invoke(filters) - assertResult(expected)(result) - } - } - describe("when exclude everything except .txt files") { - val filters = List[Filter](Exclude.create(".*"), Include.create(".txt")) - it("should include only the .txt files") { - val expected = List(path2, path3).map(Paths.get(_)) - val result = invoke(filters) - assertResult(expected)(result) - } - } - } -} diff --git a/lib/src/test/scala/net/kemitix/thorp/lib/LocalFileSystemTest.scala b/lib/src/test/scala/net/kemitix/thorp/lib/LocalFileSystemTest.scala deleted file mode 100644 index 863f609..0000000 --- a/lib/src/test/scala/net/kemitix/thorp/lib/LocalFileSystemTest.scala +++ /dev/null @@ -1,369 +0,0 @@ -package net.kemitix.thorp.lib - -import java.util.concurrent.atomic.AtomicReference - -import net.kemitix.thorp.config.{ConfigOption, ConfigOptions, Configuration} -import net.kemitix.thorp.domain._ -import net.kemitix.thorp.filesystem.Resource -import net.kemitix.thorp.uishell.UIEvent -import net.kemitix.thorp.uishell.UIEvent.{ - ActionChosen, - ActionFinished, - FileFound, - KeyFound -} -import org.scalatest.FreeSpec - -import scala.jdk.CollectionConverters._ - -class LocalFileSystemTest extends FreeSpec { - - private val source = Resource.select(this, "upload") - private val sourcePath = source.toPath - private val sourceOption = ConfigOption.source(sourcePath) - private val bucket = Bucket.named("bucket") - private val bucketOption = ConfigOption.bucket(bucket.name) - private val configOptions = ConfigOptions.create( - List[ConfigOption]( - sourceOption, - bucketOption, - ConfigOption.ignoreGlobalOptions(), - ConfigOption.ignoreUserOptions() - ).asJava - ) - - private val uiEvents = new AtomicReference[List[UIEvent]](List.empty) - private val actions = new AtomicReference[List[SequencedAction]](List.empty) - - private def archive: ThorpArchive = new ThorpArchive { - override def update(configuration: Configuration, - uiSink: Channel.Sink[UIEvent], - sequencedAction: SequencedAction, - totalBytesSoFar: Long): StorageEvent = { - actions.updateAndGet(l => sequencedAction :: l) - StorageEvent.doNothingEvent(sequencedAction.action.remoteKey) - } - } - -// private object TestEnv extends Clock.Live with FileScanner.Live -// -// "scanCopyUpload" - { -// def sender( -// configuration: Configuration, -// objects: RemoteObjects -// ): UIO[MessageChannel.ESender[Clock with FileScanner, Throwable, UIEvent]] = -// UIO { uiChannel => -// (for { -// _ <- LocalFileSystem.scanCopyUpload( -// configuration, -// uiChannel, -// objects, -// archive -// ) -// } yield ()) <* MessageChannel.endChannel(uiChannel) -// } -// def receiver(): UIO[MessageChannel.UReceiver[Any, UIEvent]] = -// UIO { message => -// val uiEvent = message.body -// uiEvents.updateAndGet(l => uiEvent :: l) -// UIO(()) -// } -// def program(remoteObjects: RemoteObjects) = { -// val configuration = ConfigurationBuilder.buildConfig(configOptions) -// for { -// sender <- sender(configuration, remoteObjects) -// receiver <- receiver() -// _ <- MessageChannel.pointToPoint(sender)(receiver).runDrain -// } yield () -// } -// "where remote has no objects" - { -// val remoteObjects = RemoteObjects.empty -// "upload all files" - { -// "update archive with upload actions" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList.filter(_.isInstanceOf[ToUpload]) should have size 2 -// actionList.map(_.remoteKey) shouldEqual Set( -// MD5HashData.Root.remoteKey, -// MD5HashData.Leaf.remoteKey -// ) -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val summary = uiEventsSummary -// summary should have size 6 -// summary should contain inOrderElementsOf List( -// "file found : root-file", -// "action chosen : root-file : ToUpload", -// "action finished : root-file : ToUpload" -// ) -// summary should contain inOrderElementsOf List( -// "file found : subdir/leaf-file", -// "action chosen : subdir/leaf-file : ToUpload", -// "action finished : subdir/leaf-file : ToUpload" -// ) -// } -// } -// } -// "where remote has all object" - { -// val remoteObjects = -// RemoteObjects.create( -// MapView( -// MD5HashData.Root.hash -> MD5HashData.Root.remoteKey, -// MD5HashData.Leaf.hash -> MD5HashData.Leaf.remoteKey -// ).toMap.asJava, -// MapView( -// MD5HashData.Root.remoteKey -> MD5HashData.Root.hash, -// MD5HashData.Leaf.remoteKey -> MD5HashData.Leaf.hash -// ).toMap.asJava -// ) -// "do nothing for all files" - { -// "all archive actions do nothing" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList should have size 2 -// actionList.filter(_.isInstanceOf[DoNothing]) should have size 2 -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val summary = uiEventsSummary -// summary should have size 6 -// summary should contain inOrderElementsOf List( -// "file found : root-file", -// "action chosen : root-file : DoNothing", -// "action finished : root-file : DoNothing" -// ) -// summary should contain inOrderElementsOf List( -// "file found : subdir/leaf-file", -// "action chosen : subdir/leaf-file : DoNothing", -// "action finished : subdir/leaf-file : DoNothing" -// ) -// } -// } -// } -// "where remote has some objects" - { -// val remoteObjects = -// RemoteObjects.create( -// MapView(MD5HashData.Root.hash -> MD5HashData.Root.remoteKey).toMap.asJava, -// MapView(MD5HashData.Root.remoteKey -> MD5HashData.Root.hash).toMap.asJava -// ) -// "upload leaf, do nothing for root" - { -// "archive actions upload leaf" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList -// .filter(_.isInstanceOf[DoNothing]) -// .map(_.remoteKey) shouldEqual Set(MD5HashData.Root.remoteKey) -// actionList -// .filter(_.isInstanceOf[ToUpload]) -// .map(_.remoteKey) shouldEqual Set(MD5HashData.Leaf.remoteKey) -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val summary = uiEventsSummary -// summary should contain inOrderElementsOf List( -// "file found : root-file", -// "action chosen : root-file : DoNothing", -// "action finished : root-file : DoNothing" -// ) -// summary should contain inOrderElementsOf List( -// "file found : subdir/leaf-file", -// "action chosen : subdir/leaf-file : ToUpload", -// "action finished : subdir/leaf-file : ToUpload" -// ) -// } -// } -// } -// "where remote objects are swapped" ignore { -// val remoteObjects = -// RemoteObjects.create( -// MapView( -// MD5HashData.Root.hash -> MD5HashData.Leaf.remoteKey, -// MD5HashData.Leaf.hash -> MD5HashData.Root.remoteKey -// ).toMap.asJava, -// MapView( -// MD5HashData.Root.remoteKey -> MD5HashData.Leaf.hash, -// MD5HashData.Leaf.remoteKey -> MD5HashData.Root.hash -// ).toMap.asJava -// ) -// "copy files" - { -// "archive swaps objects" ignore { -// // not supported -// } -// } -// } -// "where file has been renamed" - { -// // renamed from "other/root" to "root-file" -// val otherRootKey = RemoteKey.create("other/root") -// val remoteObjects = -// RemoteObjects.create( -// MapView( -// MD5HashData.Root.hash -> otherRootKey, -// MD5HashData.Leaf.hash -> MD5HashData.Leaf.remoteKey -// ).toMap.asJava, -// MapView( -// otherRootKey -> MD5HashData.Root.hash, -// MD5HashData.Leaf.remoteKey -> MD5HashData.Leaf.hash -// ).toMap.asJava -// ) -// "copy object and delete original" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList should have size 2 -// actionList -// .filter(_.isInstanceOf[DoNothing]) -// .map(_.remoteKey) shouldEqual Set(MD5HashData.Leaf.remoteKey) -// actionList -// .filter(_.isInstanceOf[ToCopy]) -// .map(_.remoteKey) shouldEqual Set(MD5HashData.Root.remoteKey) -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val summary = uiEventsSummary -// summary should contain inOrderElementsOf List( -// "file found : root-file", -// "action chosen : root-file : ToCopy", -// "action finished : root-file : ToCopy" -// ) -// summary should contain inOrderElementsOf List( -// "file found : subdir/leaf-file", -// "action chosen : subdir/leaf-file : DoNothing", -// "action finished : subdir/leaf-file : DoNothing" -// ) -// } -// } -// } -// -// "scanDelete" - { -// def sender( -// configuration: Configuration, -// objects: RemoteObjects -// ): UIO[MessageChannel.ESender[Clock, Throwable, UIEvent]] = -// UIO { uiChannel => -// (for { -// _ <- LocalFileSystem.scanDelete( -// configuration, -// uiChannel, -// objects, -// archive -// ) -// } yield ()) <* MessageChannel.endChannel(uiChannel) -// } -// def receiver(): UIO[MessageChannel.UReceiver[Any, UIEvent]] = -// UIO { message => -// val uiEvent = message.body -// uiEvents.updateAndGet(l => uiEvent :: l) -// UIO(()) -// } -// def program(remoteObjects: RemoteObjects) = { -// { -// val configuration = ConfigurationBuilder.buildConfig(configOptions) -// for { -// sender <- sender(configuration, remoteObjects) -// receiver <- receiver() -// _ <- MessageChannel.pointToPoint(sender)(receiver).runDrain -// } yield () -// } -// } -// "where remote has no extra objects" - { -// val remoteObjects = RemoteObjects.create( -// MapView( -// MD5HashData.Root.hash -> MD5HashData.Root.remoteKey, -// MD5HashData.Leaf.hash -> MD5HashData.Leaf.remoteKey -// ).toMap.asJava, -// MapView( -// MD5HashData.Root.remoteKey -> MD5HashData.Root.hash, -// MD5HashData.Leaf.remoteKey -> MD5HashData.Leaf.hash -// ).toMap.asJava -// ) -// "do nothing for all files" - { -// "no archive actions" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList should have size 0 -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// uiEventsSummary shouldEqual List( -// "key found: root-file", -// "key found: subdir/leaf-file" -// ) -// } -// } -// } -// "where remote has extra objects" - { -// val extraHash = MD5Hash.create("extra") -// val extraObject = RemoteKey.create("extra") -// val remoteObjects = RemoteObjects.create( -// MapView( -// MD5HashData.Root.hash -> MD5HashData.Root.remoteKey, -// MD5HashData.Leaf.hash -> MD5HashData.Leaf.remoteKey, -// extraHash -> extraObject -// ).toMap.asJava, -// MapView( -// MD5HashData.Root.remoteKey -> MD5HashData.Root.hash, -// MD5HashData.Leaf.remoteKey -> MD5HashData.Leaf.hash, -// extraObject -> extraHash -// ).toMap.asJava -// ) -// "remove the extra object" - { -// "archive delete action" in { -// actions.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// val actionList: Set[Action] = actions.get.map(_.action).toSet -// actionList should have size 1 -// actionList -// .filter(_.isInstanceOf[ToDelete]) -// .map(_.remoteKey) shouldEqual Set(extraObject) -// } -// "ui is updated" in { -// uiEvents.set(List.empty) -// runtime.unsafeRunSync(program(remoteObjects).provide(TestEnv)) -// uiEventsSummary shouldEqual List( -// "key found: root-file", -// "key found: subdir/leaf-file", -// "key found: extra", -// "action chosen : extra : ToDelete", -// "action finished : extra : ToDelete" -// ) -// } -// } -// } -// } - - private def uiEventsSummary: List[String] = { - uiEvents - .get() - .reverse - .map { - case uie: FileFound => - String.format("file found : %s", uie.localFile.remoteKey.key) - case uie: ActionChosen => - String.format( - "action chosen : %s : %s", - uie.action.remoteKey.key, - uie.action.getClass.getSimpleName - ) - case uie: ActionFinished => - String.format( - "action finished : %s : %s", - uie.action.remoteKey.key, - uie.action.getClass.getSimpleName - ) - case uie: KeyFound => - String.format("key found: %s", uie.remoteKey.key) - case x => String.format("unknown : %s", x.getClass.getSimpleName) - } - } - -} diff --git a/storage-aws/src/main/java/net/kemitix/thorp/storage/aws/S3ETagGenerator.java b/storage-aws/src/main/java/net/kemitix/thorp/storage/aws/S3ETagGenerator.java index 9debcfa..0be3422 100644 --- a/storage-aws/src/main/java/net/kemitix/thorp/storage/aws/S3ETagGenerator.java +++ b/storage-aws/src/main/java/net/kemitix/thorp/storage/aws/S3ETagGenerator.java @@ -1,8 +1,7 @@ package net.kemitix.thorp.storage.aws; -import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.transfer.TransferManagerConfiguration; -import com.amazonaws.services.s3.transfer.internal.TransferManagerUtils; +import lombok.With; import net.kemitix.thorp.domain.HashGenerator; import net.kemitix.thorp.domain.HashType; import net.kemitix.thorp.domain.Hashes; @@ -19,14 +18,27 @@ import java.util.stream.LongStream; import static net.kemitix.thorp.filesystem.MD5HashGenerator.md5FileChunk; +@With public class S3ETagGenerator implements HashGenerator { + + private final long multipartUploadThreshold; + + public S3ETagGenerator() { + multipartUploadThreshold = + new TransferManagerConfiguration().getMultipartUploadThreshold(); + } + + public S3ETagGenerator(long multipartUploadThreshold) { + this.multipartUploadThreshold = multipartUploadThreshold; + } + @Deprecated // Use hashFile public String eTag(Path path) throws IOException, NoSuchAlgorithmException { return hashFile(path); } @Override public String hashFile(Path path) throws IOException, NoSuchAlgorithmException { - long partSize = calculatePartSize(path); + long partSize = calculatePartSize(); long parts = numParts(path.toFile().length(), partSize); String eTagHex = eTagHex(path, partSize, parts); return String.format("%s-%d", eTagHex, parts); @@ -51,10 +63,8 @@ public class S3ETagGenerator implements HashGenerator { .collect(Collectors.toList()); } - private long calculatePartSize(Path path) { - return TransferManagerUtils.calculateOptimalPartSize( - new PutObjectRequest("", "", path.toFile()), - new TransferManagerConfiguration()); + private long calculatePartSize() { + return multipartUploadThreshold; } private long numParts(long length, long partSize) { diff --git a/storage-aws/src/test/java/net/kemitix/thorp/storage/aws/ETagGeneratorTest.java b/storage-aws/src/test/java/net/kemitix/thorp/storage/aws/ETagGeneratorTest.java index eb87722..fafde25 100644 --- a/storage-aws/src/test/java/net/kemitix/thorp/storage/aws/ETagGeneratorTest.java +++ b/storage-aws/src/test/java/net/kemitix/thorp/storage/aws/ETagGeneratorTest.java @@ -48,7 +48,8 @@ public class ETagGeneratorTest @Test @DisplayName("create eTag for whole file") public void createTagForWholeFile() throws IOException, NoSuchAlgorithmException { - String result = generator.hashFile(bigFile.toPath()); + String result = generator.withMultipartUploadThreshold(5 * 1024 * 1024) + .hashFile(bigFile.toPath()); assertThat(result).isEqualTo(BIG_FILE_ETAG); } } diff --git a/uishell/src/main/java/net/kemitix/thorp/uishell/UIShell.java b/uishell/src/main/java/net/kemitix/thorp/uishell/UIShell.java index 54a17d3..3525440 100644 --- a/uishell/src/main/java/net/kemitix/thorp/uishell/UIShell.java +++ b/uishell/src/main/java/net/kemitix/thorp/uishell/UIShell.java @@ -4,13 +4,14 @@ import net.kemitix.thorp.config.Configuration; import net.kemitix.thorp.console.Console; import net.kemitix.thorp.console.ConsoleOut; import net.kemitix.thorp.domain.*; +import net.kemitix.thorp.domain.channel.Listener; import static net.kemitix.thorp.domain.Terminal.eraseLineForward; import static net.kemitix.thorp.domain.Terminal.eraseToEndOfScreen; public interface UIShell { - static Channel.Listener listener(Configuration configuration) { - return new Channel.Listener() { + static Listener listener(Configuration configuration) { + return new Listener() { @Override public void accept(UIEvent uiEvent) { if (uiEvent instanceof UIEvent.RequestCycle) diff --git a/uishell/src/main/java/net/kemitix/thorp/uishell/UploadEventListener.java b/uishell/src/main/java/net/kemitix/thorp/uishell/UploadEventListener.java index 7b135b0..fd3b0f7 100644 --- a/uishell/src/main/java/net/kemitix/thorp/uishell/UploadEventListener.java +++ b/uishell/src/main/java/net/kemitix/thorp/uishell/UploadEventListener.java @@ -2,8 +2,8 @@ package net.kemitix.thorp.uishell; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; -import net.kemitix.thorp.domain.Channel; import net.kemitix.thorp.domain.LocalFile; +import net.kemitix.thorp.domain.channel.Sink; import net.kemitix.thorp.uishell.UploadProgressEvent.RequestEvent; import java.util.concurrent.atomic.AtomicLong; @@ -29,7 +29,7 @@ public class UploadEventListener { } public static Settings settings( - Channel.Sink uiSink, + Sink uiSink, LocalFile localFile, int index, long totalBytesToFar, @@ -39,7 +39,7 @@ public class UploadEventListener { } @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public static class Settings { - public final Channel.Sink uiSink; + public final Sink uiSink; public final LocalFile localFile; public final int index; public final long totalBytesSoFar;