You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by zh...@apache.org on 2017/09/28 00:32:18 UTC

[geode] branch feature/GEODE-3273 created (now 20bc22b)

This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a change to branch feature/GEODE-3273
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at 20bc22b  GEODE-3273: add junit tests for IndexRepositoryImpl.update()

This branch includes the following new commits:

     new 20bc22b  GEODE-3273: add junit tests for IndexRepositoryImpl.update()

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].

[geode] 01/01: GEODE-3273: add junit tests for IndexRepositoryImpl.update()

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhouxj pushed a commit to branch feature/GEODE-3273
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 20bc22b92576ec4ea7e955a045fc48738898f1c1
Author: zhouxh <gz...@pivotal.io>
AuthorDate: Wed Sep 27 17:29:43 2017 -0700

    GEODE-3273: add junit tests for IndexRepositoryImpl.update()
---
 .../internal/repository/IndexRepositoryImpl.java   | 14 +++++--
 .../repository/IndexRepositoryImplJUnitTest.java   | 44 ++++++++++++++++++++++
 2 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImpl.java
index 0032fe9..06bf653 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImpl.java
@@ -66,7 +66,7 @@ public class IndexRepositoryImpl implements IndexRepository {
     this.region = region;
     this.userRegion = userRegion;
     this.writer = writer;
-    searcherManager = new SearcherManager(writer, APPLY_ALL_DELETES, true, null);
+    searcherManager = createSearchManager();
     this.serializer = serializer;
     this.stats = stats;
     documentCountSupplier = new DocumentCountSupplier();
@@ -76,18 +76,24 @@ public class IndexRepositoryImpl implements IndexRepository {
     this.index = index;
   }
 
+  protected SearcherManager createSearchManager() throws IOException {
+    return new SearcherManager(writer, APPLY_ALL_DELETES, true, null);
+  }
+
   @Override
   public void create(Object key, Object value) throws IOException {
     long start = stats.startUpdate();
     Collection<Document> docs = Collections.emptyList();
+    boolean exceptionHappened = false;
     try {
       try {
         docs = serializer.toDocuments(index, value);
       } catch (Exception e) {
+        exceptionHappened = true;
         stats.incFailedEntries();
         logger.info("Failed to add index for " + value + " due to " + e.getMessage());
       }
-      if (!docs.isEmpty()) {
+      if (!exceptionHappened) {
         docs.forEach(doc -> SerializerUtil.addKey(key, doc));
         writer.addDocuments(docs);
       }
@@ -100,14 +106,16 @@ public class IndexRepositoryImpl implements IndexRepository {
   public void update(Object key, Object value) throws IOException {
     long start = stats.startUpdate();
     Collection<Document> docs = Collections.emptyList();
+    boolean exceptionHappened = false;
     try {
       try {
         docs = serializer.toDocuments(index, value);
       } catch (Exception e) {
+        exceptionHappened = true;
         stats.incFailedEntries();
         logger.info("Failed to update index for " + value + " due to " + e.getMessage());
       }
-      if (!docs.isEmpty()) {
+      if (!exceptionHappened) {
         docs.forEach(doc -> SerializerUtil.addKey(key, doc));
         Term keyTerm = SerializerUtil.toKeyTerm(key);
         writer.updateDocuments(keyTerm, docs);
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
index bac4c12..c564ff3 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.*;
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Random;
 import java.util.Set;
@@ -35,6 +36,7 @@ import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.queryparser.classic.ParseException;
 import org.apache.lucene.queryparser.classic.QueryParser;
+import org.apache.lucene.search.SearcherManager;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -43,7 +45,11 @@ import org.mockito.Mockito;
 
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.lucene.LuceneIndex;
+import org.apache.geode.cache.lucene.LuceneSerializer;
+import org.apache.geode.cache.lucene.LuceneService;
+import org.apache.geode.cache.lucene.internal.LuceneIndexFactoryImpl;
 import org.apache.geode.cache.lucene.internal.LuceneIndexStats;
+import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.directory.RegionDirectory;
 import org.apache.geode.cache.lucene.internal.filesystem.FileSystemStats;
 import org.apache.geode.cache.lucene.internal.repository.serializer.HeterogeneousLuceneSerializer;
@@ -141,6 +147,32 @@ public class IndexRepositoryImplJUnitTest {
   }
 
   @Test
+  public void updateShouldHandleException() throws IOException {
+    LuceneIndex index = Mockito.mock(LuceneIndex.class);
+    LuceneSerializer serializer = Mockito.mock(LuceneSerializer.class);
+    IndexWriter writerSpy = spy(writer);
+    repo = new DummyIndexRepositoryImpl(region, writerSpy, serializer, stats, userRegion,
+        mock(DistributedLockService.class), "lockName", index);
+    Mockito.when(serializer.toDocuments(any(), any()))
+        .thenThrow(new RuntimeException("SerializerException"));
+    repo.update("key1", new Type2("bacon maple bar", 1, 2L, 3.0, 4.0f, "Grape Ape doughnut"));
+    verify(writerSpy, never()).updateDocuments(any(), any());
+  }
+
+  @Test
+  public void emptyDocsShouldUpdateDocuments() throws IOException {
+    LuceneIndex index = Mockito.mock(LuceneIndex.class);
+    LuceneSerializer serializer = Mockito.mock(LuceneSerializer.class);
+    IndexWriter writerSpy = spy(writer);
+    repo = new DummyIndexRepositoryImpl(region, writerSpy, serializer, stats, userRegion,
+        mock(DistributedLockService.class), "lockName", index);
+    Mockito.when(serializer.toDocuments(any(), any())).thenReturn(Collections.emptyList());
+    Mockito.doReturn(0L).when(writerSpy).updateDocuments(any(), any());
+    repo.update("key1", new Type2("bacon maple bar", 1, 2L, 3.0, 4.0f, "Grape Ape doughnut"));
+    verify(writerSpy).updateDocuments(any(), any());
+  }
+
+  @Test
   public void deleteShouldUpdateStats() throws IOException {
     repo.delete("key1");
     verify(stats, times(1)).startUpdate();
@@ -284,4 +316,16 @@ public class IndexRepositoryImplJUnitTest {
     }
   }
 
+  private class DummyIndexRepositoryImpl extends IndexRepositoryImpl {
+    public DummyIndexRepositoryImpl(Region<?, ?> region, IndexWriter writer,
+        LuceneSerializer serializer, LuceneIndexStats stats, Region<?, ?> userRegion,
+        DistributedLockService lockService, String lockName, LuceneIndex index) throws IOException {
+      super(region, writer, serializer, stats, userRegion, lockService, lockName, index);
+    }
+
+    protected SearcherManager createSearchManager() throws IOException {
+      return new SearcherManager(writer, true, true, null);
+    }
+  }
+
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.