Repository: incubator-geode Updated Branches: refs/heads/develop 6ef7d4754 -> 1e97dbb68
GEODE-11: Adding a method to LuceneIndexImpl to dump indexes Adding a method to LuceneIndexImpl to invoke the DumpDirectoryFiles function and dump all of the index files to disk. Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/1e97dbb6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/1e97dbb6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/1e97dbb6 Branch: refs/heads/develop Commit: 1e97dbb6848fa76663a56900ed8a869d749ba9db Parents: 6ef7d47 Author: Dan Smith <[email protected]> Authored: Wed Jun 1 11:12:17 2016 -0700 Committer: Dan Smith <[email protected]> Committed: Wed Jun 1 15:00:09 2016 -0700 ---------------------------------------------------------------------- .../lucene/internal/InternalLuceneIndex.java | 5 ++ .../LuceneIndexForPartitionedRegion.java | 18 ++++++- .../LuceneIndexForReplicatedRegion.java | 49 -------------------- .../internal/directory/DumpDirectoryFiles.java | 5 ++ .../LuceneIndexForPartitionedRegionTest.java | 21 +++++++++ .../DumpDirectoryFilesIntegrationTest.java | 17 ++----- 6 files changed, 50 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java index 951b0f9..27b4820 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java @@ -26,4 +26,9 @@ public interface InternalLuceneIndex extends LuceneIndex { public RepositoryManager getRepositoryManager(); + /** + * Dump the files for this index to the given directory. + */ + public void dumpFiles(String directory); + } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegion.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegion.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegion.java index 3def888..8fe5fac 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegion.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegion.java @@ -29,6 +29,9 @@ import com.gemstone.gemfire.cache.RegionAttributes; import com.gemstone.gemfire.cache.RegionShortcut; import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueue; import com.gemstone.gemfire.cache.asyncqueue.internal.AsyncEventQueueFactoryImpl; +import com.gemstone.gemfire.cache.execute.FunctionService; +import com.gemstone.gemfire.cache.execute.ResultCollector; +import com.gemstone.gemfire.cache.lucene.internal.directory.DumpDirectoryFiles; import com.gemstone.gemfire.cache.lucene.internal.filesystem.ChunkKey; import com.gemstone.gemfire.cache.lucene.internal.filesystem.File; import com.gemstone.gemfire.cache.lucene.internal.filesystem.FileSystemStats; @@ -49,7 +52,7 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl { public void initialize() { if (!hasInitialized) { /* create index region */ - PartitionedRegion dataRegion = (PartitionedRegion) cache.getRegion(regionPath); + PartitionedRegion dataRegion = getDataRegion(); //assert dataRegion != null; RegionAttributes ra = dataRegion.getAttributes(); DataPolicy dp = ra.getDataPolicy(); @@ -99,6 +102,10 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl { } } + private PartitionedRegion getDataRegion() { + return (PartitionedRegion) cache.getRegion(regionPath); + } + private AsyncEventQueueFactoryImpl createAEQFactory(final Region dataRegion) { AsyncEventQueueFactoryImpl factory = (AsyncEventQueueFactoryImpl) cache.createAsyncEventQueueFactory(); factory.setParallel(true); // parallel AEQ for PR @@ -176,5 +183,12 @@ public class LuceneIndexForPartitionedRegion extends LuceneIndexImpl { // TODO Auto-generated method stub } - + + @Override + public void dumpFiles(final String directory) { + ResultCollector results = FunctionService.onRegion(getDataRegion()) + .withArgs(new String[] {directory, indexName}) + .execute(DumpDirectoryFiles.ID); + results.getResult(); + } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java deleted file mode 100644 index c24cb9d..0000000 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForReplicatedRegion.java +++ /dev/null @@ -1,49 +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; - -import java.util.Map; - -import org.apache.lucene.analysis.Analyzer; - -import com.gemstone.gemfire.cache.Cache; - -/* wrapper of IndexWriter */ -public class LuceneIndexForReplicatedRegion extends LuceneIndexImpl { - - public LuceneIndexForReplicatedRegion(String indexName, String regionPath, Cache cache) { - super(indexName, regionPath, cache); - throw new UnsupportedOperationException("Lucene indexes on replicated regions is not yet implemented"); - } - - public void initialize() { - throw new UnsupportedOperationException("Lucene indexes on replicated regions is not yet implemented"); - } - - public void close() { - throw new UnsupportedOperationException("Lucene indexes on replicated regions is not yet implemented"); - } - - @Override - public Map<String, Analyzer> getFieldAnalyzers() { - throw new UnsupportedOperationException("Lucene indexes on replicated regions is not yet implemented"); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFiles.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFiles.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFiles.java index 0d7b859..0d18144 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFiles.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFiles.java @@ -59,6 +59,7 @@ public class DumpDirectoryFiles implements Function, InternalEntity { private static final long serialVersionUID = 1L; private static final Logger logger = LogService.getLogger(); + public static final String ID = DumpDirectoryFiles.class.getSimpleName(); @Override public void execute(FunctionContext context) { @@ -104,6 +105,10 @@ public class DumpDirectoryFiles implements Function, InternalEntity { } } + @Override public String getId() { + return ID; + } + @Override public boolean optimizeForWrite() { return true; http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java index 4ae1efe..394a2bf 100644 --- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java +++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexForPartitionedRegionTest.java @@ -36,6 +36,9 @@ import com.gemstone.gemfire.cache.Region; import com.gemstone.gemfire.cache.RegionAttributes; import com.gemstone.gemfire.cache.RegionShortcut; import com.gemstone.gemfire.cache.asyncqueue.internal.AsyncEventQueueFactoryImpl; +import com.gemstone.gemfire.cache.execute.FunctionService; +import com.gemstone.gemfire.cache.execute.ResultCollector; +import com.gemstone.gemfire.cache.lucene.internal.directory.DumpDirectoryFiles; import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; import com.gemstone.gemfire.internal.cache.PartitionedRegion; import com.gemstone.gemfire.internal.cache.extension.ExtensionPoint; @@ -344,4 +347,22 @@ public class LuceneIndexForPartitionedRegionTest { verify(spy).createFileRegion(eq(RegionShortcut.PARTITION_PERSISTENT), eq(index.createFileRegionName()), any()); } + @Test + public void dumpFilesShouldInvokeDumpFunction() { + boolean withPersistence = false; + String name = "indexName"; + String regionPath = "regionName"; + Cache cache = Fakes.cache(); + initializeScenario(withPersistence, regionPath, cache); + + DumpDirectoryFiles function = new DumpDirectoryFiles(); + FunctionService.registerFunction(function); + LuceneIndexForPartitionedRegion index = new LuceneIndexForPartitionedRegion(name, regionPath, cache); + PartitionedRegion region = (PartitionedRegion) cache.getRegion(regionPath); + ResultCollector collector = mock(ResultCollector.class); + when(region.executeFunction(eq(function), any(), any(), anyBoolean())).thenReturn(collector); + index.dumpFiles("directory"); + verify(region).executeFunction(eq(function), any(), any(), anyBoolean()); + } + } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1e97dbb6/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFilesIntegrationTest.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFilesIntegrationTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFilesIntegrationTest.java index 9f02f2b..5d3105c 100644 --- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFilesIntegrationTest.java +++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/directory/DumpDirectoryFilesIntegrationTest.java @@ -22,18 +22,11 @@ import static com.gemstone.gemfire.cache.lucene.test.LuceneTestUtilities.*; import static org.junit.Assert.*; import java.io.File; -import java.nio.file.Files; -import java.nio.file.Paths; -import com.gemstone.gemfire.cache.PartitionAttributes; -import com.gemstone.gemfire.cache.PartitionAttributesFactory; import com.gemstone.gemfire.cache.Region; import com.gemstone.gemfire.cache.RegionShortcut; -import com.gemstone.gemfire.cache.execute.FunctionService; -import com.gemstone.gemfire.cache.execute.ResultCollector; -import com.gemstone.gemfire.cache.lucene.LuceneIndex; import com.gemstone.gemfire.cache.lucene.LuceneIntegrationTest; -import com.gemstone.gemfire.cache.lucene.LuceneQuery; +import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneIndex; import com.gemstone.gemfire.cache.lucene.test.TestObject; import com.gemstone.gemfire.test.junit.categories.IntegrationTest; import com.gemstone.gemfire.test.junit.rules.DiskDirRule; @@ -63,15 +56,11 @@ public class DumpDirectoryFilesIntegrationTest extends LuceneIntegrationTest { region.put(2 * 113, new TestObject("title 3", "hello world")); region.put(3 * 113, new TestObject("hello world", "hello world")); - LuceneIndex index = luceneService.getIndex(INDEX_NAME, REGION_NAME); + InternalLuceneIndex index = (InternalLuceneIndex) luceneService.getIndex(INDEX_NAME, REGION_NAME); index.waitUntilFlushed(60000); - ResultCollector resultCollector= FunctionService - .onRegion(region) - .withArgs(new String[] {diskDirRule.get().getAbsolutePath(), INDEX_NAME}) - .execute(new DumpDirectoryFiles().getId()); - resultCollector.getResult(); + index.dumpFiles(diskDirRule.get().getAbsolutePath()); //Find the directory for the first bucket File bucket0 = diskDirRule.get().listFiles(file -> file.getName().endsWith("_0"))[0];
