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 bt...@apache.org on 2019/05/30 07:22:16 UTC
[james-project] 05/19: MAILBOX-351 Write a
PreviousFailuresReIndexationTask
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 5f6ab604173538a80b6ce5015a3756d8143383df
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 11:44:56 2019 +0700
MAILBOX-351 Write a PreviousFailuresReIndexationTask
Taking the list of previous indexing failures, this task will attempt to
reIndex all of the aforementioned messages.
---
.../indexer/PreviousFailuresReIndexationTask.java | 76 ++++++++++++++++++++++
.../mailbox/tools/indexer/ReIndexerPerformer.java | 20 ++++++
.../tools/indexer/ReIndexingExecutionFailures.java | 24 +++++--
3 files changed, 116 insertions(+), 4 deletions(-)
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
new file mode 100644
index 0000000..ceed5cd
--- /dev/null
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.mailbox.tools.indexer;
+
+import java.util.Optional;
+
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+
+public class PreviousFailuresReIndexationTask implements Task {
+ public static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
+
+ public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+ private final ReprocessingContext reprocessingContext;
+
+ AdditionalInformation(ReprocessingContext reprocessingContext) {
+ this.reprocessingContext = reprocessingContext;
+ }
+
+ public int getSuccessfullyReprocessMailCount() {
+ return reprocessingContext.successfullyReprocessedMailCount();
+ }
+
+ public int getFailedReprocessedMailCount() {
+ return reprocessingContext.failedReprocessingMailCount();
+ }
+
+ public ReIndexingExecutionFailures failures() {
+ return reprocessingContext.failures();
+ }
+ }
+
+ private final ReIndexerPerformer reIndexerPerformer;
+ private final AdditionalInformation additionalInformation;
+ private final ReprocessingContext reprocessingContext;
+ private final ReIndexingExecutionFailures previousFailures;
+
+ public PreviousFailuresReIndexationTask(ReIndexerPerformer reIndexerPerformer, ReIndexingExecutionFailures previousFailures) {
+ this.reIndexerPerformer = reIndexerPerformer;
+ this.previousFailures = previousFailures;
+ this.reprocessingContext = new ReprocessingContext();
+ this.additionalInformation = new AdditionalInformation(reprocessingContext);
+ }
+
+ @Override
+ public Result run() {
+ return reIndexerPerformer.reIndex(reprocessingContext, previousFailures);
+ }
+
+ @Override
+ public String type() {
+ return PREVIOUS_FAILURES_INDEXING;
+ }
+
+ @Override
+ public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+ return Optional.of(additionalInformation);
+ }
+}
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
index 1411d70..035da20 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
@@ -83,6 +83,26 @@ public class ReIndexerPerformer {
}
}
+ Task.Result reIndex(ReprocessingContext reprocessingContext, ReIndexingExecutionFailures previousReIndexingFailures) {
+ return previousReIndexingFailures.failures()
+ .stream()
+ .map(previousFailure -> reIndex(reprocessingContext, previousFailure))
+ .reduce(Task::combine)
+ .orElse(Task.Result.COMPLETED);
+ }
+
+ private Task.Result reIndex(ReprocessingContext reprocessingContext, ReIndexingExecutionFailures.ReIndexingFailure previousReIndexingFailure) {
+ MailboxId mailboxId = previousReIndexingFailure.getMailboxId();
+ MessageUid uid = previousReIndexingFailure.getUid();
+ try {
+ return handleMessageReIndexing(mailboxId, uid, reprocessingContext);
+ } catch (MailboxException e) {
+ LOGGER.warn("ReIndexing failed for {} {}", mailboxId, uid, e);
+ reprocessingContext.recordFailureDetailsForMessage(mailboxId, uid);
+ return Task.Result.PARTIAL;
+ }
+ }
+
Task.Result reIndex(ReprocessingContext reprocessingContext) throws MailboxException {
MailboxSession mailboxSession = mailboxManager.createSystemSession(RE_INDEXING);
LOGGER.info("Starting a full reindex");
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
index fd56d09..4ed98ec 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
@@ -25,8 +25,10 @@ import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.model.MailboxId;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
public class ReIndexingExecutionFailures {
@@ -40,13 +42,22 @@ public class ReIndexingExecutionFailures {
}
@JsonIgnore
- public String getMailboxId() {
+ public String getSerializedMailboxId() {
return mailboxId.serialize();
}
- public long getUid() {
+ public MailboxId getMailboxId() {
+ return mailboxId;
+ }
+
+ @JsonProperty("uid")
+ public long getSerializedUid() {
return uid.asLong();
}
+
+ public MessageUid getUid() {
+ return uid;
+ }
}
private final List<ReIndexingFailure> failures;
@@ -56,8 +67,13 @@ public class ReIndexingExecutionFailures {
}
@JsonValue
- public Multimap<String, ReIndexingFailure> failures() {
+ public Multimap<String, ReIndexingFailure> serializedFailures() {
return failures.stream()
- .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getMailboxId));
+ .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getSerializedMailboxId));
+ }
+
+ @JsonIgnore
+ public List<ReIndexingFailure> failures() {
+ return ImmutableList.copyOf(failures);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org