You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/05/04 02:03:08 UTC

[1/5] incubator-geode git commit: GEODE-1329 auto-reconnect attempts cease if kicked out during boot-up of the cache

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-1255 3cd475d11 -> 9aba6bf74


GEODE-1329 auto-reconnect attempts cease if kicked out during boot-up of the cache

This is a follow-up to the fix for GEODE-1329 that removes the old
reconnectCancelledLock variable and makes reconnectCancelled volatile.


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

Branch: refs/heads/feature/GEODE-1255
Commit: 4a6c779d386f818306062bc1a84276858592384c
Parents: b8fc3c7
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Tue May 3 13:57:47 2016 -0700
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Tue May 3 14:00:24 2016 -0700

----------------------------------------------------------------------
 .../internal/InternalDistributedSystem.java     | 21 ++++++--------------
 1 file changed, 6 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/4a6c779d/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
index df85417..91fa558 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java
@@ -1445,9 +1445,7 @@ public class InternalDistributedSystem
    * the attempt has been cancelled.
    */
   public boolean isReconnectCancelled() {
-    synchronized(reconnectCancelledLock) {
-      return reconnectCancelled;
-    }
+    return reconnectCancelled;
   }
 
   /**
@@ -2476,17 +2474,14 @@ public class InternalDistributedSystem
   /**
    * If true then this DS will never reconnect.
    */
-  private boolean reconnectCancelled = false;
-  private Object reconnectCancelledLock = new Object();
+  private volatile boolean reconnectCancelled = false;
 
   /** Make sure this instance of DS never does a reconnect.
    * Also if reconnect is in progress cancel it.
    */
   public void cancelReconnect() {
 //    (new ManagerLogWriter(LogWriterImpl.FINE_LEVEL, System.out)).fine("cancelReconnect invoked", new Exception("stack trace"));
-    synchronized(this.reconnectCancelledLock) {
-      this.reconnectCancelled = true;
-    }
+    this.reconnectCancelled = true;
     if (isReconnecting()) {
       synchronized (this.reconnectLock) { // should the synchronized be first on this and
     	  // then on this.reconnectLock.
@@ -3024,10 +3019,8 @@ public class InternalDistributedSystem
       InternalDistributedSystem recon = this.reconnectDS;
 
       while (isReconnecting()) {
-        synchronized(this.reconnectCancelledLock) {
-          if (this.reconnectCancelled) {
-            break;
-          }
+        if (this.reconnectCancelled) {
+          break;
         }
         if (time != 0) {
           this.reconnectLock.wait(sleepTime);
@@ -3050,9 +3043,7 @@ public class InternalDistributedSystem
   @Override
   public void stopReconnecting() {
 //    (new ManagerLogWriter(LogWriterImpl.FINE_LEVEL, System.out)).fine("stopReconnecting invoked", new Exception("stack trace"));
-    synchronized(this.reconnectCancelledLock) {
-      this.reconnectCancelled = true;
-    }
+    this.reconnectCancelled = true;
     synchronized(this.reconnectLock) {
       this.reconnectLock.notify();
     }


[2/5] incubator-geode git commit: GEODE-11: Refactoring the LuceneFunctionReadPathDUnitTest

Posted by kl...@apache.org.
GEODE-11: Refactoring the LuceneFunctionReadPathDUnitTest

Refactoring this test into a framework for adding more tests with a
bunch of subclasses.


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

Branch: refs/heads/feature/GEODE-1255
Commit: 0481732f0223a38adf4084bc2afb977e20db364f
Parents: 4a6c779
Author: Dan Smith <up...@apache.org>
Authored: Mon May 2 13:56:10 2016 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Tue May 3 16:41:29 2016 -0700

----------------------------------------------------------------------
 .../gemfire/cache/lucene/LuceneQueriesBase.java | 148 ++++++++++++
 .../cache/lucene/LuceneQueriesPRBase.java       |  75 ++++++
 .../lucene/LuceneQueriesPeerPRDUnitTest.java    |  36 +++
 .../LuceneQueriesPeerPROverflowDUnitTest.java   |  41 ++++
 .../LuceneFunctionReadPathDUnitTest.java        | 237 -------------------
 5 files changed, 300 insertions(+), 237 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0481732f/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesBase.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesBase.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesBase.java
new file mode 100644
index 0000000..c467a18
--- /dev/null
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesBase.java
@@ -0,0 +1,148 @@
+/*
+ * 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 com.gemstone.gemfire.cache.lucene;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.dunit.SerializableRunnableIF;
+import com.gemstone.gemfire.test.dunit.VM;
+import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
+
+import org.junit.Test;
+
+/**
+  * This test class is intended to contain basic integration tests
+  * of the lucene query class that should be executed against a number
+  * of different regions types and topologies.
+  *
+  */
+public abstract class LuceneQueriesBase extends JUnit4CacheTestCase {
+
+  protected static final String INDEX_NAME = "index";
+  protected static final String REGION_NAME = "index";
+  private static final long serialVersionUID = 1L;
+  protected VM dataStore1;
+  protected VM dataStore2;
+  protected VM accessor;
+
+  @Override
+  public final void postSetUp() throws Exception {
+    Host host = Host.getHost(0);
+    dataStore1 = host.getVM(0);
+    dataStore2 = host.getVM(1);
+    accessor = host.getVM(3);
+  }
+
+  protected abstract void initDataStore(SerializableRunnableIF createIndex) throws Exception;
+
+  protected abstract void initAccessor(SerializableRunnableIF createIndex) throws Exception;
+
+  @Test
+  public void returnCorrectResultsFromStringQueryWithDefaultAnalyzer() {
+    SerializableRunnableIF createIndex = () -> {
+      LuceneService luceneService = LuceneServiceProvider.get(getCache());
+      luceneService.createIndex(INDEX_NAME, REGION_NAME, "text");
+    };
+    dataStore1.invoke(() -> initDataStore(createIndex));
+    dataStore2.invoke(() -> initDataStore(createIndex));
+    accessor.invoke(() -> initAccessor(createIndex));
+
+    putDataInRegion(accessor);
+    executeTextSearch(accessor);
+  }
+
+  protected void executeTextSearch(VM vm) {
+    vm.invoke(() -> {
+      Cache cache = getCache();
+      Region<Object, Object> region = cache.getRegion(REGION_NAME);
+
+      LuceneService service = LuceneServiceProvider.get(cache);
+      LuceneQuery<Integer, TestObject> query;
+      query = service.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME, "text:world");
+      LuceneQueryResults<Integer, TestObject> results = query.search();
+      assertEquals(3, results.size());
+      List<LuceneResultStruct<Integer, TestObject>> page = results.getNextPage();
+
+      Map<Integer, TestObject> data = new HashMap<Integer, TestObject>();
+      for (LuceneResultStruct<Integer, TestObject> row : page) {
+        data.put(row.getKey(), row.getValue());
+      }
+
+      assertEquals(new HashMap(region),data);
+      return null;
+    });
+  }
+
+  protected void putDataInRegion(VM vm) {
+    vm.invoke(() -> {
+      final Cache cache = getCache();
+      Region<Object, Object> region = cache.getRegion(REGION_NAME);
+      region.put(1, new TestObject("hello world"));
+      region.put(113, new TestObject("hi world"));
+      region.put(2, new TestObject("goodbye world"));
+    });
+  }
+
+  private static class TestObject implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String text;
+
+    public TestObject(String text) {
+      this.text = text;
+    }
+
+    @Override
+    public int hashCode() {
+      final int prime = 31;
+      int result = 1;
+      result = prime * result + ((text == null) ? 0 : text.hashCode());
+      return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (this == obj)
+        return true;
+      if (obj == null)
+        return false;
+      if (getClass() != obj.getClass())
+        return false;
+      TestObject other = (TestObject) obj;
+      if (text == null) {
+        if (other.text != null)
+          return false;
+      } else if (!text.equals(other.text))
+        return false;
+      return true;
+    }
+
+    @Override
+    public String toString() {
+      return "TestObject[" + text + "]";
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0481732f/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPRBase.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPRBase.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPRBase.java
new file mode 100644
index 0000000..fbd101e
--- /dev/null
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPRBase.java
@@ -0,0 +1,75 @@
+/*
+ * 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 com.gemstone.gemfire.cache.lucene;
+
+import static org.junit.Assert.*;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.control.RebalanceOperation;
+import com.gemstone.gemfire.cache.control.RebalanceResults;
+import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.dunit.SerializableRunnableIF;
+import com.gemstone.gemfire.test.dunit.VM;
+import com.gemstone.gemfire.test.dunit.cache.internal.JUnit4CacheTestCase;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+/**
+ * This test class adds more basic tests of lucene functionality
+ * for partitioned regions. These tests should work across all types
+ * of PRs and topologies.
+ *
+ */
+public abstract class LuceneQueriesPRBase extends LuceneQueriesBase {
+
+  @Test
+  public void returnCorrectResultsAfterRebalance() {
+    SerializableRunnableIF createIndex = () -> {
+      LuceneService luceneService = LuceneServiceProvider.get(getCache());
+      luceneService.createIndex(INDEX_NAME, REGION_NAME, "text");
+    };
+    dataStore1.invoke(() -> initDataStore(createIndex));
+    accessor.invoke(() -> initAccessor(createIndex));
+    putDataInRegion(accessor);
+    dataStore2.invoke(() -> initDataStore(createIndex));
+
+    rebalanceRegion(dataStore1);
+    executeTextSearch(accessor);
+  }
+
+  private void rebalanceRegion(VM vm) {
+    // Do a rebalance
+    vm.invoke(() -> {
+        RebalanceOperation op = getCache().getResourceManager().createRebalanceFactory().start();
+        RebalanceResults results = op.getResults();
+        assertTrue("Transferred " + results.getTotalBucketTransfersCompleted(), 1 < results.getTotalBucketTransfersCompleted());
+    });
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0481732f/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPRDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPRDUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPRDUnitTest.java
new file mode 100644
index 0000000..51d0a33
--- /dev/null
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPRDUnitTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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 com.gemstone.gemfire.cache.lucene;
+
+import com.gemstone.gemfire.cache.RegionShortcut;
+import com.gemstone.gemfire.test.dunit.SerializableRunnableIF;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+import org.junit.experimental.categories.Category;
+
+@Category(DistributedTest.class)
+public class LuceneQueriesPeerPRDUnitTest extends LuceneQueriesPRBase {
+
+  @Override protected void initDataStore(final SerializableRunnableIF createIndex) throws Exception {
+    createIndex.run();
+    getCache().createRegionFactory(RegionShortcut.PARTITION).create(REGION_NAME);
+  }
+
+  @Override protected void initAccessor(final SerializableRunnableIF createIndex) throws Exception {
+    initDataStore(createIndex);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0481732f/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPROverflowDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPROverflowDUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPROverflowDUnitTest.java
new file mode 100644
index 0000000..cf2bac7
--- /dev/null
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesPeerPROverflowDUnitTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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 com.gemstone.gemfire.cache.lucene;
+
+import com.gemstone.gemfire.cache.EvictionAction;
+import com.gemstone.gemfire.cache.EvictionAttributes;
+import com.gemstone.gemfire.cache.RegionShortcut;
+import com.gemstone.gemfire.test.dunit.SerializableRunnableIF;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+import org.junit.experimental.categories.Category;
+
+@Category(DistributedTest.class)
+public class LuceneQueriesPeerPROverflowDUnitTest extends LuceneQueriesPRBase {
+
+  @Override protected void initDataStore(final SerializableRunnableIF createIndex) throws Exception {
+    createIndex.run();
+    EvictionAttributes evicAttr = EvictionAttributes.createLRUEntryAttributes(1, EvictionAction.OVERFLOW_TO_DISK);
+    getCache().createRegionFactory(RegionShortcut.PARTITION_OVERFLOW)
+      .setEvictionAttributes(evicAttr)
+      .create(REGION_NAME);
+  }
+
+  @Override protected void initAccessor(final SerializableRunnableIF createIndex) throws Exception {
+    initDataStore(createIndex);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0481732f/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
deleted file mode 100644
index bc62578..0000000
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.cache.lucene.internal.distributed;
-
-import com.gemstone.gemfire.cache.Cache;
-import com.gemstone.gemfire.cache.EvictionAction;
-import com.gemstone.gemfire.cache.EvictionAlgorithm;
-import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.RegionFactory;
-import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.control.RebalanceOperation;
-import com.gemstone.gemfire.cache.control.RebalanceResults;
-import com.gemstone.gemfire.cache.lucene.LuceneQuery;
-import com.gemstone.gemfire.cache.lucene.LuceneQueryResults;
-import com.gemstone.gemfire.cache.lucene.LuceneResultStruct;
-import com.gemstone.gemfire.cache.lucene.LuceneService;
-import com.gemstone.gemfire.cache.lucene.LuceneServiceProvider;
-import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
-import com.gemstone.gemfire.cache30.CacheTestCase;
-import com.gemstone.gemfire.internal.cache.EvictionAttributesImpl;
-import com.gemstone.gemfire.internal.cache.PartitionedRegion;
-import com.gemstone.gemfire.test.dunit.Host;
-import com.gemstone.gemfire.test.dunit.SerializableCallable;
-import com.gemstone.gemfire.test.dunit.VM;
-import com.gemstone.gemfire.test.junit.categories.DistributedTest;
-import org.junit.Assert;
-import org.junit.experimental.categories.Category;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CancellationException;
-
-@Category(DistributedTest.class)
-public class LuceneFunctionReadPathDUnitTest extends CacheTestCase {
-  private static final String INDEX_NAME = "index";
-
-  private static final long serialVersionUID = 1L;
-
-  private VM server1;
-  private VM server2;
-
-  public LuceneFunctionReadPathDUnitTest(String name) {
-    super(name);
-  }
-
-  @Override
-  public final void postSetUp() throws Exception {
-    Host host = Host.getHost(0);
-    server1 = host.getVM(0);
-    server2 = host.getVM(1);
-  }
-
-  public void testEnd2EndFunctionExecution() {
-    e2eTextSearchForRegionType(RegionShortcut.PARTITION);
-    e2eTextSearchForRegionType(RegionShortcut.PARTITION_PERSISTENT);
-    e2eTextSearchForRegionType(RegionShortcut.PARTITION_OVERFLOW);
-    e2eTextSearchForRegionType(RegionShortcut.PARTITION_PERSISTENT_OVERFLOW);
-  }
-
-  private void e2eTextSearchForRegionType(RegionShortcut type) {
-    final String regionName = type.toString();
-    createRegionAndIndex(server1, regionName, type);
-    putDataInRegion(server1, regionName);
-    createRegionAndIndex(server2, regionName, type);
-    // Make sure we can search from both members
-    executeTextSearch(server1, regionName);
-    executeTextSearch(server2, regionName);
-
-    rebalanceRegion(server1);
-    // Make sure the search still works
-    executeTextSearch(server1, regionName);
-    executeTextSearch(server2, regionName);
-    destroyPartitionRegion(server2, regionName);
-  }
-
-  private void rebalanceRegion(VM vm) {
-    // Do a rebalance
-    vm.invoke(new SerializableCallable<Object>() {
-      private static final long serialVersionUID = 1L;
-
-      @Override
-      public Object call() throws CancellationException, InterruptedException {
-        RebalanceOperation op = getCache().getResourceManager().createRebalanceFactory().start();
-        RebalanceResults results = op.getResults();
-        assertTrue(1 < results.getTotalBucketTransfersCompleted());
-        return null;
-      }
-    });
-  }
-
-  private void executeTextSearch(VM vm, final String regionName) {
-    SerializableCallable<Object> executeSearch = new SerializableCallable<Object>("executeSearch") {
-      private static final long serialVersionUID = 1L;
-
-      public Object call() throws Exception {
-        Cache cache = getCache();
-        assertNotNull(cache);
-        Region<Object, Object> region = cache.getRegion(regionName);
-        Assert.assertNotNull(region);
-
-        LuceneService service = LuceneServiceProvider.get(cache);
-        LuceneQuery<Integer, TestObject> query;
-        query = service.createLuceneQueryFactory().create(INDEX_NAME, regionName, "text:world");
-        LuceneQueryResults<Integer, TestObject> results = query.search();
-        assertEquals(3, results.size());
-        List<LuceneResultStruct<Integer, TestObject>> page = results.getNextPage();
-
-        Map<Integer, TestObject> data = new HashMap<Integer, TestObject>();
-        for (LuceneResultStruct<Integer, TestObject> row : page) {
-          data.put(row.getKey(), row.getValue());
-        }
-
-        assertEquals(data, region);
-        return null;
-      }
-    };
-
-    vm.invoke(executeSearch);
-  }
-
-  private void putDataInRegion(VM vm, final String regionName) {
-    SerializableCallable<Object> createSomeData = new SerializableCallable<Object>("putDataInRegion") {
-      private static final long serialVersionUID = 1L;
-
-      public Object call() throws Exception {
-        final Cache cache = getCache();
-        Region<Object, Object> region = cache.getRegion(regionName);
-        assertNotNull(region);
-        region.put(1, new TestObject("hello world"));
-        region.put(113, new TestObject("hi world"));
-        region.put(2, new TestObject("goodbye world"));
-
-        return null;
-      }
-    };
-
-    vm.invoke(createSomeData);
-  }
-
-  private void createRegionAndIndex(VM vm, final String regionName, final RegionShortcut type) {
-    SerializableCallable<Object> createRegion = new SerializableCallable<Object>("createRegionAndIndex") {
-      private static final long serialVersionUID = 1L;
-
-      public Object call() throws Exception {
-        final Cache cache = getCache();
-        assertNotNull(cache);
-        LuceneService service = LuceneServiceProvider.get(cache);
-        service.createIndex(INDEX_NAME, regionName, "text");
-        RegionFactory<Object, Object> regionFactory = cache.createRegionFactory(type);
-        if (regionName.contains("OVERFLOW")) {
-          EvictionAttributesImpl evicAttr = new EvictionAttributesImpl().setAction(EvictionAction.OVERFLOW_TO_DISK);
-          evicAttr.setAlgorithm(EvictionAlgorithm.LRU_ENTRY).setMaximum(1);
-          regionFactory.setEvictionAttributes(evicAttr);
-        }
-        regionFactory.create(regionName);
-        return null;
-      }
-    };
-    vm.invoke(createRegion);
-  }
-
-  private void destroyPartitionRegion(VM vm, final String regionName) {
-    SerializableCallable<Object> createPartitionRegion = new SerializableCallable<Object>("destroyPartitionRegion") {
-      private static final long serialVersionUID = 1L;
-
-      public Object call() throws Exception {
-        final Cache cache = getCache();
-        assertNotNull(cache);
-        String aeqId = LuceneServiceImpl.getUniqueIndexName(INDEX_NAME, regionName);
-        PartitionedRegion chunkRegion = (PartitionedRegion) cache.getRegion(aeqId + ".chunks");
-        assertNotNull(chunkRegion);
-        chunkRegion.destroyRegion();
-        PartitionedRegion fileRegion = (PartitionedRegion) cache.getRegion(aeqId + ".files");
-        assertNotNull(fileRegion);
-        fileRegion.destroyRegion();
-        Region<Object, Object> region = cache.getRegion(regionName);
-        assertNotNull(region);
-        region.destroyRegion();
-        return null;
-      }
-    };
-    vm.invoke(createPartitionRegion);
-  }
-
-  private static class TestObject implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private String text;
-
-    public TestObject(String text) {
-      this.text = text;
-    }
-
-    @Override
-    public int hashCode() {
-      final int prime = 31;
-      int result = 1;
-      result = prime * result + ((text == null) ? 0 : text.hashCode());
-      return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      if (this == obj)
-        return true;
-      if (obj == null)
-        return false;
-      if (getClass() != obj.getClass())
-        return false;
-      TestObject other = (TestObject) obj;
-      if (text == null) {
-        if (other.text != null)
-          return false;
-      } else if (!text.equals(other.text))
-        return false;
-      return true;
-    }
-  }
-}


[4/5] incubator-geode git commit: GEODE-11: Closing cache in @After of LuceneIndexXmlGenerator...Test

Posted by kl...@apache.org.
GEODE-11: Closing cache in @After of LuceneIndexXmlGenerator...Test

This test case was not cleaning up the cache after the tear down,
resulting in potential problems for later tests.


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

Branch: refs/heads/feature/GEODE-1255
Commit: 8dc2d30317d6592af95ba62b95eba784a68a626f
Parents: b3ef791
Author: Dan Smith <up...@apache.org>
Authored: Tue May 3 15:54:35 2016 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Tue May 3 16:48:42 2016 -0700

----------------------------------------------------------------------
 .../xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java  | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8dc2d303/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java
index 8272522..0c9d500 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/xml/LuceneIndexXmlGeneratorIntegrationJUnitTest.java
@@ -26,6 +26,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.PrintWriter;
 import java.nio.charset.Charset;
 
+import org.junit.After;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -40,13 +41,20 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
 
 @Category(IntegrationTest.class)
 public class LuceneIndexXmlGeneratorIntegrationJUnitTest {
+
+  private Cache cache;
+
+  @After
+  public void closeCache() {
+    cache.close();
+  }
   
   /**
    * Test of generating and reading cache configuration back in.
    */
   @Test
   public void generateWithFields() {
-    Cache cache = new CacheFactory().set("mcast-port", "0").create();
+    cache = new CacheFactory().set("mcast-port", "0").create();
     LuceneService service = LuceneServiceProvider.get(cache);
     service.createIndex("index", "region", "a", "b", "c");
     cache.createRegionFactory(RegionShortcut.PARTITION).create("region");


[3/5] incubator-geode git commit: GEODE-11: Fixing a class cast exception when LuceneFunction has an error

Posted by kl...@apache.org.
GEODE-11: Fixing a class cast exception when LuceneFunction has an error

LuceneFunction was using sendException to return exceptions to caller.
But the behavior of sendException is actually to pass the exception to
the addResult method, which is not what we want in this case.

Adding an integration test of the same. Changing LuceneFunctionJUnitTest
to use mockito and changing the expectations of what LuceneFunction
will do after an exception.


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

Branch: refs/heads/feature/GEODE-1255
Commit: b3ef791346b248ea81b4da989ba7759c75c7d92d
Parents: 0481732
Author: Dan Smith <up...@apache.org>
Authored: Mon May 2 14:54:07 2016 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Tue May 3 16:41:37 2016 -0700

----------------------------------------------------------------------
 .../internal/distributed/CollectorManager.java  |   3 +-
 .../internal/distributed/LuceneFunction.java    |  31 +-
 .../distributed/TopEntriesCollectorManager.java |   2 +-
 .../TopEntriesFunctionCollector.java            |   9 +-
 .../lucene/LuceneQueriesIntegrationTest.java    |  88 ++++
 .../distributed/LuceneFunctionJUnitTest.java    | 406 ++++++-------------
 .../TopEntriesFunctionCollectorJUnitTest.java   |   4 +-
 7 files changed, 236 insertions(+), 307 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/CollectorManager.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/CollectorManager.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/CollectorManager.java
index 45750d1..4d1d1c2 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/CollectorManager.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/CollectorManager.java
@@ -49,7 +49,6 @@ public interface CollectorManager<C extends IndexResultCollector> {
    * Reduce the results of individual collectors into a meaningful result. This method must be called after collection
    * is finished on all provided collectors.
    * 
-   * @throws IOException
    */
-  C reduce(Collection<C> results) throws IOException;
+  C reduce(Collection<C> results);
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
index 199b698..9567305 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
@@ -29,6 +29,7 @@ import org.apache.lucene.search.Query;
 import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.execute.FunctionAdapter;
 import com.gemstone.gemfire.cache.execute.FunctionContext;
+import com.gemstone.gemfire.cache.execute.FunctionException;
 import com.gemstone.gemfire.cache.execute.RegionFunctionContext;
 import com.gemstone.gemfire.cache.execute.ResultSender;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
@@ -41,6 +42,7 @@ import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
 import com.gemstone.gemfire.cache.query.QueryException;
 import com.gemstone.gemfire.internal.InternalEntity;
 import com.gemstone.gemfire.internal.cache.BucketNotFoundException;
+import com.gemstone.gemfire.internal.cache.execute.BucketMovedException;
 import com.gemstone.gemfire.internal.logging.LogService;
 
 /**
@@ -63,14 +65,12 @@ public class LuceneFunction extends FunctionAdapter implements InternalEntity {
 
     LuceneFunctionContext<IndexResultCollector> searchContext = (LuceneFunctionContext) ctx.getArguments();
     if (searchContext == null) {
-      resultSender.sendException(new IllegalArgumentException("Missing search context"));
-      return;
+      throw new IllegalArgumentException("Missing search context");
     }
 
     LuceneQueryProvider queryProvider = searchContext.getQueryProvider();
     if (queryProvider == null) {
-      resultSender.sendException(new IllegalArgumentException("Missing query provider"));
-      return;
+      throw new IllegalArgumentException("Missing query provider");
     }
     
     LuceneService service = LuceneServiceProvider.get(region.getCache());
@@ -81,8 +81,8 @@ public class LuceneFunction extends FunctionAdapter implements InternalEntity {
     try {
       query = queryProvider.getQuery(index);
     } catch (QueryException e) {
-      resultSender.sendException(e);
-      return;
+      logger.warn("", e);
+      throw new FunctionException(e);
     }
 
     if (logger.isDebugEnabled()) {
@@ -104,24 +104,11 @@ public class LuceneFunction extends FunctionAdapter implements InternalEntity {
         repo.query(query, resultLimit, collector);
         results.add(collector);
       }
-    } catch (IOException e) {
-      logger.warn("", e);
-      resultSender.sendException(e);
-      return;
-    } catch (BucketNotFoundException e) {
-      logger.warn("", e);
-      resultSender.sendException(e);
-      return;
-    }
-
-    TopEntriesCollector mergedResult;
-    try {
-      mergedResult = (TopEntriesCollector) manager.reduce(results);
+      TopEntriesCollector mergedResult = (TopEntriesCollector) manager.reduce(results);
       resultSender.lastResult(mergedResult);
-    } catch (IOException e) {
+    } catch (IOException|BucketNotFoundException e) {
       logger.warn("", e);
-      resultSender.sendException(e);
-      return;
+      throw new FunctionException(e);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
index b19e104..cf6e420 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
@@ -68,7 +68,7 @@ public class TopEntriesCollectorManager implements CollectorManager<TopEntriesCo
   }
 
   @Override
-  public TopEntriesCollector reduce(Collection<TopEntriesCollector> collectors) throws IOException {
+  public TopEntriesCollector reduce(Collection<TopEntriesCollector> collectors) {
     TopEntriesCollector mergedResult = new TopEntriesCollector(id, limit);
     if (collectors.isEmpty()) {
       return mergedResult;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollector.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollector.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollector.java
index 2e8f2dc..4a99bf8 100644
--- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollector.java
+++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollector.java
@@ -123,13 +123,8 @@ public class TopEntriesFunctionCollector implements ResultCollector<TopEntriesCo
         return mergedResults.getEntries();
       }
       
-      try {
-        mergedResults = manager.reduce(subResults);
-        return mergedResults.getEntries();
-      } catch (IOException e) {
-        logger.debug("Error while merging function execution results", e);
-        throw new FunctionException(e);
-      }
+      mergedResults = manager.reduce(subResults);
+      return mergedResults.getEntries();
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesIntegrationTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesIntegrationTest.java
new file mode 100644
index 0000000..9009e3d
--- /dev/null
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneQueriesIntegrationTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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 com.gemstone.gemfire.cache.lucene;
+
+import static org.hamcrest.Matchers.isA;
+import static org.junit.Assert.*;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.CacheFactory;
+import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.RegionShortcut;
+import com.gemstone.gemfire.cache.execute.Function;
+import com.gemstone.gemfire.cache.execute.FunctionException;
+import com.gemstone.gemfire.cache.query.QueryException;
+import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.ExpectedException;
+
+/**
+ * This class contains tests of lucene queries that can fit
+ */
+@Category(IntegrationTest.class)
+public class LuceneQueriesIntegrationTest {
+  @Rule
+  public ExpectedException thrown = ExpectedException.none();
+  private static final String INDEX_NAME = "index";
+  protected static final String REGION_NAME = "index";
+  Cache cache;
+
+  @Before
+  public void createCache() {
+    cache = new CacheFactory()
+      .set("mcast-port", "0")
+      .set("locators", "")
+      .set("log-level", "warning").create();
+  }
+
+  @After
+  public void closeCache() {
+    cache.close();
+  }
+
+  @Test()
+  public void throwFunctionExceptionWhenGivenBadQuery() {
+    LuceneService luceneService = LuceneServiceProvider.get(cache);
+    luceneService.createIndex(INDEX_NAME, REGION_NAME, "text");
+    Region region = cache.createRegionFactory(RegionShortcut.PARTITION)
+      .create(REGION_NAME);
+
+    //Create a query that throws an exception
+    final LuceneQuery<Object, Object> query = luceneService.createLuceneQueryFactory().create(INDEX_NAME, REGION_NAME,
+      index -> {
+        throw new QueryException("Bad query");
+      });
+
+
+    thrown.expect(FunctionException.class);
+    thrown.expectCause(isA(QueryException.class));
+    try {
+      query.search();
+    } catch(FunctionException e) {
+      assertEquals(QueryException.class, e.getCause().getClass());
+      throw e;
+    }
+
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
index 750ec0f..70ec434 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
@@ -19,27 +19,16 @@
 
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.lucene.search.Query;
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.api.Invocation;
-import org.jmock.lib.action.CustomAction;
-import org.jmock.lib.concurrent.Synchroniser;
-import org.jmock.lib.legacy.ClassImposteriser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
 
 import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.execute.FunctionException;
 import com.gemstone.gemfire.cache.execute.ResultSender;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
@@ -55,9 +44,14 @@ import com.gemstone.gemfire.internal.cache.InternalCache;
 import com.gemstone.gemfire.internal.cache.execute.InternalRegionFunctionContext;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
+import org.apache.lucene.search.Query;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.mockito.ArgumentCaptor;
+
 @Category(UnitTest.class)
 public class LuceneFunctionJUnitTest {
-  Mockery mocker;
 
   String regionPath = "/region";
   String indexName = "index";
@@ -87,275 +81,162 @@ public class LuceneFunctionJUnitTest {
 
   @Test
   public void testRepoQueryAndMerge() throws Exception {
-    final AtomicReference<TopEntriesCollector> result = new AtomicReference<>();
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        will(returnValue(repos));
-
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-
-        oneOf(mockRepository1).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
-        will(new CustomAction("streamSearchResults") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r1_1.getKey(), r1_1.getScore());
-            collector.collect(r1_2.getKey(), r1_2.getScore());
-            collector.collect(r1_3.getKey(), r1_3.getScore());
-            return null;
-          }
-        });
-
-        oneOf(mockRepository2).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
-        will(new CustomAction("streamSearchResults") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.getKey(), r2_1.getScore());
-            collector.collect(r2_2.getKey(), r2_2.getScore());
-            return null;
-          }
-        });
-
-        oneOf(mockResultSender).lastResult(with(any(TopEntriesCollector.class)));
-        will(new CustomAction("collectResult") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            result.set((TopEntriesCollector) invocation.getParameter(0));
-            return null;
-          }
-        });
-      }
-    });
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos);
+    doAnswer(invocation -> {
+      IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class);
+      collector.collect(r1_1.getKey(), r1_1.getScore());
+      collector.collect(r1_2.getKey(), r1_2.getScore());
+      collector.collect(r1_3.getKey(), r1_3.getScore());
+      return null;
+    }).when(mockRepository1).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class));
+
+    doAnswer(invocation -> {
+      IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class);
+      collector.collect(r2_1.getKey(), r2_1.getScore());
+      collector.collect(r2_2.getKey(), r2_2.getScore());
+      return null;
+    }).when(mockRepository2).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class));
 
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
-    List<EntryScore> hits = result.get().getEntries().getHits();
+
+    ArgumentCaptor<TopEntriesCollector> resultCaptor  = ArgumentCaptor.forClass(TopEntriesCollector.class);
+    verify(mockResultSender).lastResult(resultCaptor.capture());
+    TopEntriesCollector result = resultCaptor.getValue();
+
+
+    List<EntryScore> hits = result.getEntries().getHits();
     assertEquals(5, hits.size());
-    TopEntriesJUnitTest.verifyResultOrder(result.get().getEntries().getHits(), r1_1, r2_1, r1_2, r2_2, r1_3);
+    TopEntriesJUnitTest.verifyResultOrder(result.getEntries().getHits(), r1_1, r2_1, r1_2, r2_2, r1_3);
   }
 
   @Test
   public void testResultLimitClause() throws Exception {
-    final AtomicReference<TopEntriesCollector> result = new AtomicReference<>();
 
     searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", null, 3);
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos);
+
+    doAnswer(invocation -> {
+      IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class);
+      collector.collect(r1_1.getKey(), r1_1.getScore());
+      collector.collect(r1_2.getKey(), r1_2.getScore());
+      collector.collect(r1_3.getKey(), r1_3.getScore());
+      return null;
+    }).when(mockRepository1).query(eq(query), eq(3), any(IndexResultCollector.class));
+
+    doAnswer(invocation -> {
+      IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class);
+      collector.collect(r2_1.getKey(), r2_1.getScore());
+      collector.collect(r2_2.getKey(), r2_2.getScore());
+      return null;
+    }).when(mockRepository2).query(eq(query), eq(3), any(IndexResultCollector.class));
 
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        will(returnValue(repos));
-
-        oneOf(mockRepository1).query(with(query), with(equal(3)), with(any(IndexResultCollector.class)));
-        will(new CustomAction("streamSearchResults") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r1_1.getKey(), r1_1.getScore());
-            collector.collect(r1_2.getKey(), r1_2.getScore());
-            collector.collect(r1_3.getKey(), r1_3.getScore());
-            return null;
-          }
-        });
-
-        oneOf(mockRepository2).query(with(query), with(equal(3)), with(any(IndexResultCollector.class)));
-        will(new CustomAction("streamSearchResults") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.getKey(), r2_1.getScore());
-            collector.collect(r2_2.getKey(), r2_2.getScore());
-            return null;
-          }
-        });
-
-        oneOf(mockResultSender).lastResult(with(any(TopEntriesCollector.class)));
-        will(new CustomAction("collectResult") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            result.set((TopEntriesCollector) invocation.getParameter(0));
-            return null;
-          }
-        });
-      }
-    });
 
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
-    List<EntryScore> hits = result.get().getEntries().getHits();
+
+    ArgumentCaptor<TopEntriesCollector> resultCaptor  = ArgumentCaptor.forClass(TopEntriesCollector.class);
+    verify(mockResultSender).lastResult(resultCaptor.capture());
+    TopEntriesCollector result = resultCaptor.getValue();
+
+    List<EntryScore> hits = result.getEntries().getHits();
     assertEquals(3, hits.size());
-    TopEntriesJUnitTest.verifyResultOrder(result.get().getEntries().getHits(), r1_1, r2_1, r1_2);
+    TopEntriesJUnitTest.verifyResultOrder(result.getEntries().getHits(), r1_1, r2_1, r1_2);
   }
 
   @Test
   public void injectCustomCollectorManager() throws Exception {
-    final CollectorManager mockManager = mocker.mock(CollectorManager.class);
+    final CollectorManager mockManager = mock(CollectorManager.class);
     searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager);
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        repos.remove(0);
-        will(returnValue(repos));
-
-        oneOf(mockManager).newCollector("repo2");
-        will(returnValue(mockCollector));
-        oneOf(mockManager).reduce(with(any(Collection.class)));
-        will(new CustomAction("reduce") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            Collection<IndexResultCollector> collectors = (Collection<IndexResultCollector>) invocation.getParameter(0);
-            assertEquals(1, collectors.size());
-            assertEquals(mockCollector, collectors.iterator().next());
-            return new TopEntriesCollector(null);
-          }
-        });
-
-        oneOf(mockCollector).collect("key-2-1", .45f);
-
-        oneOf(mockRepository2).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
-        will(new CustomAction("streamSearchResults") {
-          @Override
-          public Object invoke(Invocation invocation) throws Throwable {
-            IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.getKey(), r2_1.getScore());
-            return null;
-          }
-        });
-
-        oneOf(mockResultSender).lastResult(with(any(TopEntriesCollector.class)));
-      }
-    });
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    repos.remove(0);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos);
+    when(mockManager.newCollector(eq("repo2"))).thenReturn(mockCollector);
+    when(mockManager.reduce(any(Collection.class))).thenAnswer(invocation -> {
+      Collection<IndexResultCollector> collectors = invocation.getArgumentAt(0, Collection.class);
+      assertEquals(1, collectors.size());
+      assertEquals(mockCollector, collectors.iterator().next());
+      return new TopEntriesCollector(null);
+
+    } );
+
+    doAnswer(invocation -> {
+      IndexResultCollector collector = invocation.getArgumentAt(2, IndexResultCollector.class);
+      collector.collect(r2_1.getKey(), r2_1.getScore());
+      return null;
+    }).when(mockRepository2).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class));
+
 
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
+
+    verify(mockCollector).collect(eq("key-2-1"), eq(.45f));
+    verify(mockResultSender).lastResult(any(TopEntriesCollector.class));
   }
 
-  @Test
+  @Test(expected = FunctionException.class)
   public void testIndexRepoQueryFails() throws Exception {
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        will(returnValue(repos));
-
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-        oneOf(mockResultSender).sendException(with(any(IOException.class)));
-
-        oneOf(mockRepository1).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
-        will(throwException(new IOException()));
-      }
-    });
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos);
+    doThrow(IOException.class).when(mockRepository1).query(eq(query), eq(LuceneQueryFactory.DEFAULT_LIMIT), any(IndexResultCollector.class));
 
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
   }
 
-  @Test
+  @Test(expected = FunctionException.class)
   public void testBucketNotFound() throws Exception {
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        will(throwException(new BucketNotFoundException("")));
-
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-        oneOf(mockResultSender).sendException(with(any(BucketNotFoundException.class)));
-      }
-    });
-
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenThrow(new BucketNotFoundException(""));
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
+
+    verify(mockResultSender).sendException(any(BucketNotFoundException.class));
   }
 
-  @Test
+  @Test(expected = FunctionException.class)
   public void testReduceError() throws Exception {
-    final CollectorManager mockManager = mocker.mock(CollectorManager.class);
+    final CollectorManager mockManager = mock(CollectorManager.class);
     searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager);
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(mockManager).newCollector("repo1");
-        will(returnValue(mockCollector));
-        oneOf(mockManager).reduce(with(any(Collection.class)));
-        will(throwException(new IOException()));
-
-        oneOf(mockRepoManager).getRepositories(mockContext);
-        repos.remove(1);
-        will(returnValue(repos));
-
-        oneOf(mockRepository1).query(query, LuceneQueryFactory.DEFAULT_LIMIT, mockCollector);
-        oneOf(mockResultSender).sendException(with(any(IOException.class)));
-      }
-    });
+
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    repos.remove(1);
+    when(mockRepoManager.getRepositories(eq(mockContext))).thenReturn(repos);
+    when(mockManager.newCollector(eq("repo1"))).thenReturn(mockCollector);
+    when(mockManager.reduce(any(Collection.class))).thenThrow(IOException.class);
 
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
   }
 
-  @Test
+  @Test(expected = FunctionException.class)
   public void queryProviderErrorIsHandled() throws Exception {
-    queryProvider = mocker.mock(LuceneQueryProvider.class);
+    queryProvider = mock(LuceneQueryProvider.class);
     searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName");
-    mocker.checking(new Expectations() {
-      {
-        oneOf(mockContext).getDataSet();
-        will(returnValue(mockRegion));
-        oneOf(mockContext).getResultSender();
-        will(returnValue(mockResultSender));
-        oneOf(mockContext).getArguments();
-        will(returnValue(searchArgs));
-
-        oneOf(queryProvider).getQuery(mockIndex);
-        will(throwException(new QueryException()));
-
-        oneOf(mockResultSender).sendException(with(any(QueryException.class)));
-      }
-    });
-
+    when(mockContext.getDataSet()).thenReturn(mockRegion);
+    when(mockContext.getArguments()).thenReturn(searchArgs);
+    when(mockContext.<TopEntriesCollector>getResultSender()).thenReturn(mockResultSender);
+    when(queryProvider.getQuery(eq(mockIndex))).thenThrow(QueryException.class);
     LuceneFunction function = new LuceneFunction();
 
     function.execute(mockContext);
@@ -369,55 +250,34 @@ public class LuceneFunctionJUnitTest {
 
   @Before
   public void createMocksAndCommonObjects() throws Exception {
-    mocker = new Mockery() {
-      {
-        setImposteriser(ClassImposteriser.INSTANCE);
-        setThreadingPolicy(new Synchroniser());
-      }
-    };
-
-    mockContext = mocker.mock(InternalRegionFunctionContext.class);
-    mockResultSender = mocker.mock(ResultSender.class);
-    mockRegion = mocker.mock(Region.class);
-
-    mockRepoManager = mocker.mock(RepositoryManager.class);
-    mockRepository1 = mocker.mock(IndexRepository.class, "repo1");
-    mockRepository2 = mocker.mock(IndexRepository.class, "repo2");
-    mockCollector = mocker.mock(IndexResultCollector.class);
+    mockContext = mock(InternalRegionFunctionContext.class);
+    mockResultSender = mock(ResultSender.class);
+    mockRegion = mock(Region.class);
+
+    mockRepoManager = mock(RepositoryManager.class);
+    mockRepository1 = mock(IndexRepository.class, "repo1");
+    mockRepository2 = mock(IndexRepository.class, "repo2");
+    mockCollector = mock(IndexResultCollector.class);
 
     repos = new ArrayList<IndexRepository>();
     repos.add(mockRepository1);
     repos.add(mockRepository2);
     
-    mockIndex = mocker.mock(InternalLuceneIndex.class);
-    mockService = mocker.mock(InternalLuceneService.class);
-    mockCache = mocker.mock(InternalCache.class);
+    mockIndex = mock(InternalLuceneIndex.class);
+    mockService = mock(InternalLuceneService.class);
+    mockCache = mock(InternalCache.class);
 
     queryProvider = new StringQueryProvider("gemfire:lucene");
     
     searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName");
-    
-    mocker.checking(new Expectations() {{
-      allowing(mockRegion).getCache();
-      will(returnValue(mockCache));
-      allowing(mockRegion).getFullPath();
-      will(returnValue(regionPath));
-      allowing(mockCache).getService(InternalLuceneService.class);
-      will(returnValue(mockService));
-      allowing(mockService).getIndex(with("indexName"), with(regionPath));
-      will(returnValue(mockIndex));
-      allowing(mockIndex).getRepositoryManager();
-      will(returnValue(mockRepoManager));
-      allowing(mockIndex).getFieldNames();
-      will(returnValue(new String[] {"gemfire"}));
-    }});
-    
-    query = queryProvider.getQuery(mockIndex);
-  }
 
-  @After
-  public void validateMock() {
-    mocker.assertIsSatisfied();
-    mocker = null;
+    when(mockRegion.getCache()).thenReturn(mockCache);
+    when(mockRegion.getFullPath()).thenReturn(regionPath);
+    when(mockCache.getService(any())).thenReturn(mockService);
+    when(mockService.getIndex(eq("indexName"), eq(regionPath))).thenReturn(mockIndex);
+    when(mockIndex.getRepositoryManager()).thenReturn(mockRepoManager);
+    when(mockIndex.getFieldNames()).thenReturn(new String[] {"gemfire"});
+
+    query = queryProvider.getQuery(mockIndex);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/b3ef7913/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
index 4f93587..b7709bc 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
@@ -287,10 +287,10 @@ public class TopEntriesFunctionCollectorJUnitTest {
     TopEntriesJUnitTest.verifyResultOrder(merged.getHits(), r2_1, r2_2);
   }
 
-  @Test(expected = FunctionException.class)
+  @Test(expected = RuntimeException.class)
   public void testExceptionDuringMerge() throws Exception {
     TopEntriesCollectorManager mockManager = mock(TopEntriesCollectorManager.class);
-    Mockito.doThrow(new IOException()).when(mockManager).reduce(any(Collection.class));
+    Mockito.doThrow(new RuntimeException()).when(mockManager).reduce(any(Collection.class));
 
     LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, null, mockManager);
     TopEntriesFunctionCollector collector = new TopEntriesFunctionCollector(context);


[5/5] incubator-geode git commit: Merge remote-tracking branch 'origin/develop' into feature/GEODE-1255

Posted by kl...@apache.org.
Merge remote-tracking branch 'origin/develop' into feature/GEODE-1255


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

Branch: refs/heads/feature/GEODE-1255
Commit: 9aba6bf74e812b01bb2d1d28d91ea644da4ada8d
Parents: 3cd475d 8dc2d30
Author: Kirk Lund <kl...@apache.org>
Authored: Tue May 3 17:02:31 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Tue May 3 17:02:31 2016 -0700

----------------------------------------------------------------------
 .../internal/InternalDistributedSystem.java     |  21 +-
 .../internal/distributed/CollectorManager.java  |   3 +-
 .../internal/distributed/LuceneFunction.java    |  31 +-
 .../distributed/TopEntriesCollectorManager.java |   2 +-
 .../TopEntriesFunctionCollector.java            |   9 +-
 .../gemfire/cache/lucene/LuceneQueriesBase.java | 148 +++++++
 .../lucene/LuceneQueriesIntegrationTest.java    |  88 ++++
 .../cache/lucene/LuceneQueriesPRBase.java       |  75 ++++
 .../lucene/LuceneQueriesPeerPRDUnitTest.java    |  36 ++
 .../LuceneQueriesPeerPROverflowDUnitTest.java   |  41 ++
 .../distributed/LuceneFunctionJUnitTest.java    | 406 ++++++-------------
 .../LuceneFunctionReadPathDUnitTest.java        | 237 -----------
 .../TopEntriesFunctionCollectorJUnitTest.java   |   4 +-
 ...neIndexXmlGeneratorIntegrationJUnitTest.java |  10 +-
 14 files changed, 551 insertions(+), 560 deletions(-)
----------------------------------------------------------------------