You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2017/07/13 09:21:25 UTC

james-project git commit: JAMES-2083 Don't create migration threads when migration not expected

Repository: james-project
Updated Branches:
  refs/heads/master a5f3aa719 -> 33419f67a


JAMES-2083 Don't create migration threads when migration not expected


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/33419f67
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/33419f67
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/33419f67

Branch: refs/heads/master
Commit: 33419f67a9ca96637c7ae94906981a8c38815665
Parents: a5f3aa7
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Jul 12 11:00:56 2017 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Jul 13 09:42:36 2017 +0200

----------------------------------------------------------------------
 .../cassandra/mail/migration/V1ToV2Migration.java  | 16 +++++++++++-----
 .../mail/migration/V1ToV2MigrationThread.java      | 17 +----------------
 2 files changed, 12 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/33419f67/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
index 7522b03..e794a8e 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2Migration.java
@@ -39,11 +39,11 @@ import org.apache.james.mailbox.cassandra.mail.MessageAttachmentRepresentation;
 import org.apache.james.mailbox.cassandra.mail.MessageWithoutAttachment;
 import org.apache.james.mailbox.cassandra.mail.utils.Limit;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class V1ToV2Migration {
 
@@ -64,9 +64,15 @@ public class V1ToV2Migration {
         this.migrationExecutor = Executors.newFixedThreadPool(cassandraConfiguration.getV1ToV2ThreadCount());
         boolean ensureFifoOrder = false;
         this.messagesToBeMigrated = new ArrayBlockingQueue<>(cassandraConfiguration.getV1ToV2QueueLength(), ensureFifoOrder);
-        IntStream.range(0, cassandraConfiguration.getV1ToV2ThreadCount())
-            .mapToObj(i -> new V1ToV2MigrationThread(messagesToBeMigrated, messageDAOV1, messageDAOV2, attachmentLoader))
-            .forEach(migrationExecutor::execute);
+        executeMigrationThread(messageDAOV1, messageDAOV2, cassandraConfiguration);
+    }
+
+    private void executeMigrationThread(CassandraMessageDAO messageDAOV1, CassandraMessageDAOV2 messageDAOV2, CassandraConfiguration cassandraConfiguration) {
+        if (cassandraConfiguration.isOnTheFlyV1ToV2Migration()) {
+            IntStream.range(0, cassandraConfiguration.getV1ToV2ThreadCount())
+                .mapToObj(i -> new V1ToV2MigrationThread(messagesToBeMigrated, messageDAOV1, messageDAOV2, attachmentLoader))
+                .forEach(migrationExecutor::execute);
+        }
     }
 
     @PreDestroy

http://git-wip-us.apache.org/repos/asf/james-project/blob/33419f67/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
index 26c96d6..1b96179 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/V1ToV2MigrationThread.java
@@ -58,7 +58,7 @@ public class V1ToV2MigrationThread implements Runnable {
     public void run() {
         while (true) {
             try {
-                Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> message = dequeue();
+                Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> message = messagesToBeMigrated.take();
                 performV1ToV2Migration(message).join();
             } catch (Exception e) {
                 LOGGER.error("Error occured in migration thread", e);
@@ -66,21 +66,6 @@ public class V1ToV2MigrationThread implements Runnable {
         }
     }
 
-    private Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> dequeue() {
-        while (true) {
-            Optional<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>> poll = poll();
-            if (poll.isPresent()) {
-                return poll.get();
-            }
-        }
-    }
-
-    private Optional<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>> poll() {
-        synchronized (messagesToBeMigrated) {
-            return Optional.ofNullable(messagesToBeMigrated.poll());
-        }
-    }
-
     private CompletableFuture<Void> performV1ToV2Migration(Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>> messageV1) {
         return attachmentLoader.addAttachmentToMessages(Stream.of(messageV1), MessageMapper.FetchType.Full)
             .thenApply(stream -> stream.findAny().get())


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org