Repository: geode
Updated Branches:
  refs/heads/release/1.2.0 c5dbfd295 -> 5853cc2fb


GEODE-3025: Lucene queries are not allowed withing a transaction.

        This closes #562


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/5853cc2f
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/5853cc2f
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/5853cc2f

Branch: refs/heads/release/1.2.0
Commit: 5853cc2fb816dda7874277101abda22c79caeb9a
Parents: c5dbfd2
Author: nabarun <n...@pivotal.io>
Authored: Thu Jun 8 10:33:04 2017 -0700
Committer: nabarun <n...@pivotal.io>
Committed: Fri Jun 9 14:21:05 2017 -0700

----------------------------------------------------------------------
 .../cache/lucene/internal/LuceneQueryImpl.java  |  3 ++
 .../distributed/LuceneQueryFunction.java        |  1 -
 .../LuceneIndexMaintenanceIntegrationTest.java  | 26 --------------
 .../lucene/LuceneQueriesClientDUnitTest.java    | 38 --------------------
 .../internal/LuceneQueryImplJUnitTest.java      | 12 ++++++-
 5 files changed, 14 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/5853cc2f/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneQueryImpl.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneQueryImpl.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneQueryImpl.java
index 328eb3f..e84b27e 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneQueryImpl.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneQueryImpl.java
@@ -108,6 +108,9 @@ public class LuceneQueryImpl<K, V> implements 
LuceneQuery<K, V> {
     TopEntriesCollectorManager manager = new TopEntriesCollectorManager(null, 
limit);
     LuceneFunctionContext<TopEntriesCollector> context =
         new LuceneFunctionContext<>(query, indexName, manager, limit);
+    if (region.getCache().getCacheTransactionManager().exists()) {
+      throw new 
LuceneQueryException(LUCENE_QUERY_CANNOT_BE_EXECUTED_WITHIN_A_TRANSACTION);
+    }
 
     // TODO provide a timeout to the user?
     TopEntries<K> entries = null;

http://git-wip-us.apache.org/repos/asf/geode/blob/5853cc2f/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
index b60652f..c40b3a4 100644
--- 
a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
+++ 
b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunction.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.execute.Function;
-import org.apache.geode.cache.lucene.LuceneIndexDestroyedException;
 import org.apache.geode.cache.lucene.LuceneIndexNotFoundException;
 import org.apache.geode.cache.lucene.internal.LuceneIndexImpl;
 import org.apache.geode.cache.lucene.internal.LuceneIndexStats;

http://git-wip-us.apache.org/repos/asf/geode/blob/5853cc2f/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
index f9273c1..2f39d78 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneIndexMaintenanceIntegrationTest.java
@@ -46,32 +46,6 @@ public class LuceneIndexMaintenanceIntegrationTest extends 
LuceneIntegrationTest
 
   private static int WAIT_FOR_FLUSH_TIME = 10000;
 
-  @Test
-  public void indexIsNotUpdatedIfTransactionHasNotCommittedYet() throws 
Exception {
-    luceneService.createIndexFactory().setFields("title", 
"description").create(INDEX_NAME,
-        REGION_NAME);
-
-    Region region = createRegion(REGION_NAME, RegionShortcut.PARTITION);
-    region.put("object-1", new TestObject("title 1", "hello world"));
-    region.put("object-2", new TestObject("title 2", "this will not match"));
-    region.put("object-3", new TestObject("title 3", "hello world"));
-    region.put("object-4", new TestObject("hello world", "hello world"));
-
-    LuceneIndex index = luceneService.getIndex(INDEX_NAME, REGION_NAME);
-    luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, 
WAIT_FOR_FLUSH_TIME,
-        TimeUnit.MILLISECONDS);
-    LuceneQuery query = 
luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME,
-        "description:\"hello world\"", DEFAULT_FIELD);
-    PageableLuceneQueryResults<Integer, TestObject> results = 
query.findPages();
-    assertEquals(3, results.size());
-
-    // begin transaction
-    cache.getCacheTransactionManager().begin();
-    region.put("object-1", new TestObject("title 1", "updated"));
-    luceneService.waitUntilFlushed(INDEX_NAME, REGION_NAME, 
WAIT_FOR_FLUSH_TIME,
-        TimeUnit.MILLISECONDS);
-    assertEquals(3, query.findPages().size());
-  }
 
   @Test
   public void indexIsUpdatedAfterTransactionHasCommitted() throws Exception {

http://git-wip-us.apache.org/repos/asf/geode/blob/5853cc2f/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneQueriesClientDUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneQueriesClientDUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneQueriesClientDUnitTest.java
index e200a19..f893134 100755
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneQueriesClientDUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/LuceneQueriesClientDUnitTest.java
@@ -14,12 +14,8 @@
  */
 package org.apache.geode.cache.lucene;
 
-import static 
org.apache.geode.cache.lucene.test.LuceneTestUtilities.DEFAULT_FIELD;
-import static 
org.apache.geode.cache.lucene.test.LuceneTestUtilities.INDEX_NAME;
 import static 
org.apache.geode.cache.lucene.test.LuceneTestUtilities.REGION_NAME;
-import static org.junit.Assert.assertTrue;
 
-import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.Cache;
@@ -33,7 +29,6 @@ import org.apache.geode.test.junit.categories.DistributedTest;
 import org.junit.runner.RunWith;
 
 import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
 
 @Category(DistributedTest.class)
 @RunWith(JUnitParamsRunner.class)
@@ -68,39 +63,6 @@ public class LuceneQueriesClientDUnitTest extends 
LuceneQueriesDUnitTest {
     return new RegionTestableType[] {RegionTestableType.PARTITION_WITH_CLIENT};
   }
 
-  // Due to singlehop transactions differences, the exception actually isn't 
thrown
-  // So the parent test behaves differently if singlehop is enabled or not for 
a client
-  @Test
-  @Parameters(method = "getListOfRegionTestTypes")
-  public void 
transactionWithLuceneQueriesShouldThrowException(RegionTestableType 
regionTestType) {
-    SerializableRunnableIF createIndex = () -> {
-      LuceneService luceneService = LuceneServiceProvider.get(getCache());
-      luceneService.createIndexFactory().addField("text").create(INDEX_NAME, 
REGION_NAME);
-    };
-    dataStore1.invoke(() -> initDataStore(createIndex, regionTestType));
-    dataStore2.invoke(() -> initDataStore(createIndex, regionTestType));
-    accessor.invoke(() -> initAccessor(createIndex, regionTestType));
-
-    putDataInRegion(accessor);
-    assertTrue(waitForFlushBeforeExecuteTextSearch(accessor, 60000));
-    assertTrue(waitForFlushBeforeExecuteTextSearch(dataStore1, 60000));
-
-    accessor.invoke(() -> {
-      Cache cache = getCache();
-      try {
-        LuceneService service = LuceneServiceProvider.get(cache);
-        LuceneQuery<Integer, TestObject> query;
-        query = service.createLuceneQueryFactory().create(INDEX_NAME, 
REGION_NAME, "text:world",
-            DEFAULT_FIELD);
-        cache.getCacheTransactionManager().begin();
-        PageableLuceneQueryResults<Integer, TestObject> results = 
query.findPages();
-      } finally {
-        cache.getCacheTransactionManager().rollback();
-      }
-    });
-
-  }
-
 
 
 }

http://git-wip-us.apache.org/repos/asf/geode/blob/5853cc2f/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneQueryImplJUnitTest.java
----------------------------------------------------------------------
diff --git 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneQueryImplJUnitTest.java
 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneQueryImplJUnitTest.java
index 03db6c9..58c0feb 100644
--- 
a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneQueryImplJUnitTest.java
+++ 
b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/LuceneQueryImplJUnitTest.java
@@ -23,6 +23,8 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.CacheTransactionManager;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.cache.execute.Execution;
@@ -58,6 +60,10 @@ public class LuceneQueryImplJUnitTest {
   private ResultCollector<TopEntriesCollector, TopEntries> collector;
   private Region region;
   private PageableLuceneQueryResults<Object, Object> results;
+  private Cache cache;
+  private CacheTransactionManager cacheTransactionManager;
+
+
 
   @Before
   public void createMocks() {
@@ -65,7 +71,11 @@ public class LuceneQueryImplJUnitTest {
     execution = mock(Execution.class);
     collector = mock(ResultCollector.class);
     provider = mock(LuceneQueryProvider.class);
-
+    cache = mock(Cache.class);
+    cacheTransactionManager = mock(CacheTransactionManager.class);
+    when(region.getCache()).thenReturn(cache);
+    
when(region.getCache().getCacheTransactionManager()).thenReturn(cacheTransactionManager);
+    
when(region.getCache().getCacheTransactionManager().exists()).thenReturn(false);
     when(execution.setArguments(any())).thenReturn(execution);
     when(execution.withCollector(any())).thenReturn(execution);
     when(execution.execute(anyString())).thenReturn((ResultCollector) 
collector);

Reply via email to