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 2016/04/06 11:22:00 UTC

[16/18] james-project git commit: MAILBOX-266 Deletes should be bulked

MAILBOX-266 Deletes should be bulked


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

Branch: refs/heads/master
Commit: aea76c8d32c167590912c4d8b5e93c499467aa7d
Parents: 1bfa390
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Mar 25 14:27:03 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Apr 6 16:18:45 2016 +0700

----------------------------------------------------------------------
 .../elasticsearch/ElasticSearchIndexer.java     | 12 +--
 ...lasticSearchListeningMessageSearchIndex.java | 32 ++++---
 .../elasticsearch/ElasticSearchIndexerTest.java | 32 ++++++-
 ...hListeningMailboxMessageSearchIndexTest.java | 99 +++++++++++++-------
 .../lucene/search/LuceneMessageSearchIndex.java | 19 +++-
 .../store/search/LazyMessageSearchIndex.java    |  9 +-
 .../search/ListeningMessageSearchIndex.java     | 36 +++----
 .../james/mailbox/indexer/ReIndexerImpl.java    |  2 +-
 .../mailbox/indexer/ReIndexerImplTest.java      |  2 +-
 9 files changed, 164 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexer.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexer.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexer.java
index f4bbec4..1292b28 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexer.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexer.java
@@ -24,7 +24,6 @@ import javax.inject.Inject;
 
 import org.elasticsearch.action.bulk.BulkRequestBuilder;
 import org.elasticsearch.action.bulk.BulkResponse;
-import org.elasticsearch.action.delete.DeleteResponse;
 import org.elasticsearch.action.index.IndexResponse;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.common.Strings;
@@ -85,15 +84,16 @@ public class ElasticSearchIndexer {
         }
     }
     
-    public DeleteResponse deleteMessage(String id) {
+    public BulkResponse deleteMessages(List<String> ids) {
         try (Client client = clientProvider.get()) {
-            return client.prepareDelete(MAILBOX_INDEX, MESSAGE_TYPE, id)
-                .get();
+            BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
+            ids.forEach(id -> bulkRequestBuilder.add(client.prepareDelete(MAILBOX_INDEX, MESSAGE_TYPE, id)));
+            return bulkRequestBuilder.get();
         }
     }
     
-    public void deleteAllMatchingQuery(QueryBuilder queryBuilder) {
-        deleteByQueryPerformer.perform(queryBuilder);
+    public Void deleteAllMatchingQuery(QueryBuilder queryBuilder) {
+        return deleteByQueryPerformer.perform(queryBuilder);
     }
 
     private void checkArgument(String content) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index 68d9fd6..4e1ddec 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -32,8 +32,6 @@ import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MessageRange;
-import org.apache.james.mailbox.model.MessageRange.Type;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -84,17 +82,25 @@ public class ElasticSearchListeningMessageSearchIndex<Id extends MailboxId> exte
     }
 
     @Override
-    public void delete(MailboxSession session, Mailbox<Id> mailbox, MessageRange range) throws MailboxException {
-        if (range.getType() == Type.ALL) {
-            indexer.deleteAllMatchingQuery(termQuery(JsonMessageConstants.MAILBOX_ID, mailbox.getMailboxId().serialize()));
-        } else {
-            range.forEach(messageId -> {
-                try {
-                    indexer.deleteMessage(indexIdFor(mailbox, messageId));
-                } catch (Exception e) {
-                    LOGGER.error("Error when deleting index for message " + messageId, e);
-                }
-            });
+    public void delete(MailboxSession session, Mailbox<Id> mailbox, List<Long> expungedUids) throws MailboxException {
+        try {
+            indexer.deleteMessages(expungedUids.stream()
+                .map(uid ->  indexIdFor(mailbox, uid))
+                .collect(Collectors.toList()));
+        } catch (Exception e) {
+            LOGGER.error("Error when deleting messages {} in mailbox {} from index", mailbox.getMailboxId().serialize(), expungedUids, e);
+        }
+    }
+
+    @Override
+    public void deleteAll(MailboxSession session, Mailbox<Id> mailbox) throws MailboxException {
+        try {
+            indexer.deleteAllMatchingQuery(
+                termQuery(
+                    JsonMessageConstants.MAILBOX_ID,
+                    mailbox.getMailboxId().serialize()));
+        } catch (Exception e) {
+            LOGGER.error("Error when deleting all messages in mailbox {}", mailbox.getMailboxId().serialize(), e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
index 43fc26b..f5e30c8 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIndexerTest.java
@@ -194,7 +194,7 @@ public class ElasticSearchIndexerTest {
         testee.indexMessage(messageId, content);
         embeddedElasticSearch.awaitForElasticSearch();
 
-        testee.deleteMessage(messageId);
+        testee.deleteMessages(Lists.newArrayList(messageId));
         embeddedElasticSearch.awaitForElasticSearch();
         
         try (Client client = node.client()) {
@@ -206,4 +206,34 @@ public class ElasticSearchIndexerTest {
         }
     }
 
+    @Test
+    public void deleteShouldWorkWhenMultipleMessages() throws Exception {
+        String messageId = "1:1";
+        String content = "{\"message\": \"trying out Elasticsearch\", \"mailboxId\":\"1\"}";
+
+        testee.indexMessage(messageId, content);
+
+        String messageId2 = "1:2";
+        String content2 = "{\"message\": \"trying out Elasticsearch 2\", \"mailboxId\":\"1\"}";
+
+        testee.indexMessage(messageId2, content2);
+
+        String messageId3 = "2:3";
+        String content3 = "{\"message\": \"trying out Elasticsearch 3\", \"mailboxId\":\"2\"}";
+
+        testee.indexMessage(messageId3, content3);
+        embeddedElasticSearch.awaitForElasticSearch();
+
+        testee.deleteMessages(Lists.newArrayList(messageId, messageId3));
+        embeddedElasticSearch.awaitForElasticSearch();
+
+        try (Client client = node.client()) {
+            SearchResponse searchResponse = client.prepareSearch(ElasticSearchIndexer.MAILBOX_INDEX)
+                .setTypes(ElasticSearchIndexer.MESSAGE_TYPE)
+                .setQuery(QueryBuilders.matchAllQuery())
+                .get();
+            assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(1);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
index f15b1ad..79691d1 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMailboxMessageSearchIndexTest.java
@@ -27,7 +27,6 @@ import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
 
 import java.io.IOException;
-import java.util.stream.LongStream;
 import java.util.List;
 
 import javax.mail.Flags;
@@ -36,7 +35,6 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.elasticsearch.ElasticSearchIndexer;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
-import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.TestId;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -45,8 +43,8 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.easymock.IMocksControl;
 import org.elasticsearch.ElasticsearchException;
 import org.elasticsearch.action.bulk.BulkResponse;
-import org.elasticsearch.action.delete.DeleteResponse;
 import org.elasticsearch.action.index.IndexResponse;
+import org.elasticsearch.index.query.QueryBuilder;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -57,26 +55,23 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
 
     public static final long MODSEQ = 18L;
     private IMocksControl control;
-    
-    private MessageMapperFactory<TestId> mapperFactory;
+
     private ElasticSearchIndexer indexer;
-    private MessageToElasticSearchJson messageToElasticSearchJson;
-    private ElasticSearchSearcher<TestId> elasticSearchSearcher;
-    
     private ElasticSearchListeningMessageSearchIndex<TestId> testee;
     
     @Before
     @SuppressWarnings("unchecked")
     public void setup() throws JsonProcessingException {
         control = createControl();
-        
-        mapperFactory = control.createMock(MessageMapperFactory.class);
+
+        MessageMapperFactory<TestId> mapperFactory = control.createMock(MessageMapperFactory.class);
+        MessageToElasticSearchJson messageToElasticSearchJson = control.createMock(MessageToElasticSearchJson.class);
+        ElasticSearchSearcher<TestId> elasticSearchSearcher = control.createMock(ElasticSearchSearcher.class);
+
         indexer = control.createMock(ElasticSearchIndexer.class);
-        messageToElasticSearchJson = control.createMock(MessageToElasticSearchJson.class);
+
         expect(messageToElasticSearchJson.convertToJson(anyObject(MailboxMessage.class))).andReturn("json content").anyTimes();
         expect(messageToElasticSearchJson.getUpdatedJsonMessagePart(anyObject(Flags.class), anyLong())).andReturn("json updated content").anyTimes();
-        
-        elasticSearchSearcher = control.createMock(ElasticSearchSearcher.class);
 
         testee = new ElasticSearchListeningMessageSearchIndex<>(mapperFactory, indexer, elasticSearchSearcher, messageToElasticSearchJson);
     }
@@ -133,16 +128,15 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
         MailboxSession session = control.createMock(MailboxSession.class);
         Mailbox<TestId> mailbox = control.createMock(Mailbox.class);
         long messageId = 1;
-        MessageRange messageRange = MessageRange.one(messageId);
         TestId mailboxId = TestId.of(12);
         expect(mailbox.getMailboxId()).andReturn(mailboxId);
         
-        DeleteResponse expectedDeleteResponse = control.createMock(DeleteResponse.class);
-        expect(indexer.deleteMessage(mailboxId.serialize() + ":" + messageId))
-            .andReturn(expectedDeleteResponse);
+        BulkResponse expectedBulkResponse = control.createMock(BulkResponse.class);
+        expect(indexer.deleteMessages(anyObject(List.class)))
+            .andReturn(expectedBulkResponse);
         
         control.replay();
-        testee.delete(session, mailbox, messageRange);
+        testee.delete(session, mailbox, Lists.newArrayList(messageId));
         control.verify();
     }
     
@@ -151,21 +145,20 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
     public void deleteShouldWorkWhenMultipleMessageIds() throws Exception {
         MailboxSession session = control.createMock(MailboxSession.class);
         Mailbox<TestId> mailbox = control.createMock(Mailbox.class);
-        long firstMessageId = 1;
-        long lastMessageId = 10;
-        MessageRange messageRange = MessageRange.range(firstMessageId, lastMessageId);
+        long messageId1 = 1;
+        long messageId2 = 2;
+        long messageId3 = 3;
+        long messageId4 = 4;
+        long messageId5 = 5;
         TestId mailboxId = TestId.of(12);
-        expect(mailbox.getMailboxId()).andReturn(mailboxId).times(10);
-        
-        LongStream.rangeClosed(firstMessageId, lastMessageId)
-            .forEach(messageId -> {
-                DeleteResponse expectedDeleteResponse = control.createMock(DeleteResponse.class);
-                expect(indexer.deleteMessage(mailboxId.serialize() + ":" + messageId))
-                    .andReturn(expectedDeleteResponse);
-            });
+        expect(mailbox.getMailboxId()).andReturn(mailboxId).times(5);
+
+        BulkResponse expectedBulkResponse = control.createMock(BulkResponse.class);
+        expect(indexer.deleteMessages(anyObject(List.class)))
+            .andReturn(expectedBulkResponse);
         
         control.replay();
-        testee.delete(session, mailbox, messageRange);
+        testee.delete(session, mailbox, Lists.newArrayList(messageId1, messageId2, messageId3, messageId4, messageId5));
         control.verify();
     }
     
@@ -175,15 +168,14 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
         MailboxSession session = control.createMock(MailboxSession.class);
         Mailbox<TestId> mailbox = control.createMock(Mailbox.class);
         long messageId = 1;
-        MessageRange messageRange = MessageRange.one(messageId);
         TestId mailboxId = TestId.of(12);
-        expect(mailbox.getMailboxId()).andReturn(mailboxId);
+        expect(mailbox.getMailboxId()).andReturn(mailboxId).times(2);
         
-        expect(indexer.deleteMessage(mailboxId.serialize() + ":" + messageId))
+        expect(indexer.deleteMessages(anyObject(List.class)))
             .andThrow(new ElasticsearchException(""));
         
         control.replay();
-        testee.delete(session, mailbox, messageRange);
+        testee.delete(session, mailbox, Lists.newArrayList(messageId));
         control.verify();
     }
 
@@ -232,4 +224,43 @@ public class ElasticSearchListeningMailboxMessageSearchIndexTest {
         testee.update(session, mailbox, Lists.newArrayList(updatedFlags));
         control.verify();
     }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void deleteAllShouldWork() throws Exception {
+        MailboxSession session = control.createMock(MailboxSession.class);
+
+        Mailbox<TestId> mailbox = control.createMock(Mailbox.class);
+
+        TestId mailboxId = TestId.of(12);
+
+        expectLastCall();
+        expect(mailbox.getMailboxId()).andReturn(mailboxId);
+
+        expect(indexer.deleteAllMatchingQuery(anyObject(QueryBuilder.class)))
+            .andReturn(null);
+
+        control.replay();
+        testee.deleteAll(session, mailbox);
+        control.verify();
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void deleteAllShouldNotPropagateExceptionWhenExceptionOccurs() throws Exception {
+        MailboxSession session = control.createMock(MailboxSession.class);
+
+        Mailbox<TestId> mailbox = control.createMock(Mailbox.class);
+        TestId mailboxId = TestId.of(12);
+
+        expectLastCall();
+        expect(mailbox.getMailboxId()).andReturn(mailboxId).times(2);
+
+        expect(indexer.deleteAllMatchingQuery(anyObject(QueryBuilder.class)))
+            .andThrow(new ElasticsearchException(""));
+
+        control.replay();
+        testee.deleteAll(session, mailbox);
+        control.verify();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 2382399..05c7f6b 100644
--- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -1301,10 +1301,21 @@ public class LuceneMessageSearchIndex<Id extends MailboxId> extends ListeningMes
             return NumericRangeQuery.newLongRange(UID_FIELD, 0L, Long.MAX_VALUE, true, true);
         }
     }
-    /**
-     * @see org.apache.james.mailbox.store.search.ListeningMessageSearchIndex#delete(org.apache.james.mailbox.MailboxSession, org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.model.MessageRange)
-     */
-    public void delete(MailboxSession session, Mailbox<Id> mailbox, MessageRange range) throws MailboxException {
+
+    @Override
+    public void delete(MailboxSession session, Mailbox<Id> mailbox, List<Long> expungedUids) throws MailboxException {
+        Collection<MessageRange> messageRanges = MessageRange.toRanges(expungedUids);
+        for (MessageRange messageRange : messageRanges) {
+            delete(mailbox, messageRange);
+        }
+    }
+
+    @Override
+    public void deleteAll(MailboxSession session, Mailbox<Id> mailbox) throws MailboxException {
+        delete(mailbox, MessageRange.all());
+    }
+
+    public void delete(Mailbox<Id> mailbox, MessageRange range) throws MailboxException {
         BooleanQuery query = new BooleanQuery();
         query.add(new TermQuery(new Term(MAILBOX_ID_FIELD, mailbox.getMailboxId().serialize())), BooleanClause.Occur.MUST);
         query.add(createQuery(range), BooleanClause.Occur.MUST);

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
index 3f80259..f9e1bd8 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
@@ -64,8 +64,13 @@ public class LazyMessageSearchIndex<Id extends MailboxId> extends ListeningMessa
     }
 
     @Override
-    public void delete(MailboxSession session, Mailbox<Id> mailbox, MessageRange range) throws MailboxException {
-        index.delete(session, mailbox, range);
+    public void delete(MailboxSession session, Mailbox<Id> mailbox, List<Long> expungedUids) throws MailboxException {
+        index.delete(session, mailbox, expungedUids);
+    }
+
+    @Override
+    public void deleteAll(MailboxSession session, Mailbox<Id> mailbox) throws MailboxException {
+        index.deleteAll(session, mailbox);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index b894319..52541bf 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -92,15 +92,10 @@ public abstract class ListeningMessageSearchIndex<Id extends MailboxId> implemen
                     }
                 } else if (event instanceof EventFactory.ExpungedImpl) {
                     EventFactory.ExpungedImpl expunged = (EventFactory.ExpungedImpl) event;
-                    final Mailbox<Id> mailbox = expunged.getMailbox();
-                    List<Long> uids = expunged.getUids();
-                    List<MessageRange> ranges = MessageRange.toRanges(uids);
-                    for (MessageRange range : ranges) {
-                        try {
-                            delete(session, mailbox, range);
-                        } catch (MailboxException e) {
-                            session.getLog().debug("Unable to deleted range " + range.toString() + " from index for mailbox " + mailbox, e);
-                        }
+                    try {
+                        delete(session, expunged.getMailbox(), expunged.getUids());
+                    } catch (MailboxException e) {
+                        session.getLog().debug("Unable to deleted messages " + expunged.getUids() + " from index for mailbox " + expunged.getMailbox(), e);
                     }
                 } else if (event instanceof EventFactory.FlagsUpdatedImpl) {
                     EventFactory.FlagsUpdatedImpl flagsUpdated = (EventFactory.FlagsUpdatedImpl) event;
@@ -113,8 +108,7 @@ public abstract class ListeningMessageSearchIndex<Id extends MailboxId> implemen
                     }
                 }
             } else if (event instanceof EventFactory.MailboxDeletionImpl) {
-                // delete all indexed messages for the mailbox
-                delete(session, ((EventFactory.MailboxDeletionImpl) event).getMailbox(), MessageRange.all());
+                deleteAll(session, ((EventFactory.MailboxDeletionImpl) event).getMailbox());
             }
         } catch (MailboxException e) {
             session.getLog().debug("Unable to update index", e);
@@ -133,15 +127,23 @@ public abstract class ListeningMessageSearchIndex<Id extends MailboxId> implemen
     public abstract void add(MailboxSession session, Mailbox<Id> mailbox, MailboxMessage<Id> message) throws MailboxException;
 
     /**
-     * Delete the {@link MessageRange} for the given {@link Mailbox} from the index
+     * Delete the concerned UIDs for the given {@link Mailbox} from the index
      *
-     * @param session
-     * @param mailbox
-     * @param range
+     * @param session The mailbox session performing the expunge
+     * @param mailbox mailbox on which the expunge was performed
+     * @param expungedUids UIDS to be deleted
      * @throws MailboxException
      */
-    public abstract void delete(MailboxSession session, Mailbox<Id> mailbox, MessageRange range) throws MailboxException;
-    
+    public abstract void delete(MailboxSession session, Mailbox<Id> mailbox, List<Long> expungedUids) throws MailboxException;
+
+    /**
+     * Delete the messages contained in the given {@link Mailbox} from the index
+     *
+     * @param session The mailbox session performing the expunge
+     * @param mailbox mailbox on which the expunge was performed
+     * @throws MailboxException
+     */
+    public abstract void deleteAll(MailboxSession session, Mailbox<Id> mailbox) throws MailboxException;
     
     /**
      * Update the messages concerned by the updated flags list for the given {@link Mailbox}

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/ReIndexerImpl.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/ReIndexerImpl.java b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/ReIndexerImpl.java
index 3fddf76..7efd7d5 100644
--- a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/ReIndexerImpl.java
+++ b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/ReIndexerImpl.java
@@ -97,7 +97,7 @@ public class ReIndexerImpl<Id extends MailboxId> implements ReIndexer {
         MailboxRegistration mailboxRegistration = new MailboxRegistration(path);
         LOGGER.info("Intend to reindex {}",path);
         Mailbox<Id> mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(path);
-        messageSearchIndex.delete(mailboxSession, mailbox, MessageRange.all());
+        messageSearchIndex.deleteAll(mailboxSession, mailbox);
         mailboxManager.addListener(path, mailboxRegistration, mailboxSession);
         try {
             handleMailboxIndexingIterations(mailboxSession,

http://git-wip-us.apache.org/repos/asf/james-project/blob/aea76c8d/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/ReIndexerImplTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/ReIndexerImplTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/ReIndexerImplTest.java
index 70cb3f5..6e09361 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/ReIndexerImplTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/indexer/ReIndexerImplTest.java
@@ -117,7 +117,7 @@ public class ReIndexerImplTest {
         verify(mailboxManager).addListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class));
         verify(mailboxManager).removeListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class));
         verify(messageSearchIndex).add(any(MailboxSession.class), eq(mailbox), eq(message));
-        verify(messageSearchIndex).delete(any(MailboxSession.class), eq(mailbox), eq(MessageRange.all()));
+        verify(messageSearchIndex).deleteAll(any(MailboxSession.class), eq(mailbox));
         verifyNoMoreInteractions(mailboxMapper, mailboxSessionMapperFactory, messageSearchIndex, messageMapper, mailboxMapper);
     }
 }


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