You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2016/02/02 18:43:06 UTC
lucene-solr git commit: Some refactoring to MergePolicyFactory
Repository: lucene-solr
Updated Branches:
refs/heads/master-solr-8621 43671b3e0 -> 2367d8457
Some refactoring to MergePolicyFactory
(*) Remove MergePolicyFactoryHelper. MergePolicyFactory now takes a
SolrResourceLoader for creating MergePolicy and MergePolicyFactory
instances.
(*) Adds support for "wrapped.prefix" key for a
WrapperMergePolicyFactory. This is used to configure the wrapped
MergePolicyFactory.
(*) WrapperMergePolicyFactory defines an abstract
getDefaultMergePolicy() so implementations can return the default MP
in case none is configured.
(*) WrapperMergePolicyFactory only implements getting the wrapped
MergePolicy instance, while implementations return the actual final
MergePolicy.
(*) SimpleMergePolicyFactory requires implementations to return the MP
instance, while it then configures it with the set properties.
(*) Changed SolrIndexConfig to not fail (for now) if solrconfig.xml
contains <mergePolicy> but not the <mPFactory>, so that in this commit
we can focus on getting the actual classes in place. In a follow-on
commit we should remove support for <mergePolicy> in trunk and
deprecate in 5x.
(*) Added RandomMergePolicyFactory for tests.
(*) Removed all the added tests since the factory and associated
classes were moved to solr/ code.
(*) Added WrapperMergePolicyFactoryTest.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2367d845
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2367d845
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2367d845
Branch: refs/heads/master-solr-8621
Commit: 2367d845743874ea9ef2434d1a17247699ca5b5a
Parents: 43671b3
Author: Shai Erera <sh...@apache.org>
Authored: Tue Feb 2 13:34:44 2016 +0200
Committer: Shai Erera <sh...@apache.org>
Committed: Tue Feb 2 19:41:25 2016 +0200
----------------------------------------------------------------------
.../index/LogByteSizeMergePolicyFactory.java | 31 -------
.../lucene/index/LogDocMergePolicyFactory.java | 31 -------
.../apache/lucene/index/MergePolicyFactory.java | 38 --------
.../lucene/index/MergePolicyFactoryArgs.java | 64 -------------
.../lucene/index/MergePolicyFactoryHelper.java | 26 ------
.../lucene/index/SimpleMergePolicyFactory.java | 45 ---------
.../lucene/index/TieredMergePolicyFactory.java | 31 -------
.../index/UpgradeIndexMergePolicyFactory.java | 31 -------
.../lucene/index/WrapperMergePolicyFactory.java | 81 ----------------
.../apache/lucene/util/LucenePluginUtils.java | 56 -----------
.../apache/lucene/index/TestLogMergePolicy.java | 18 ----
.../apache/lucene/index/TestNoMergePolicy.java | 15 ---
.../lucene/index/TestTieredMergePolicy.java | 18 ----
.../index/TestUpgradeIndexMergePolicy.java | 12 ---
.../lucene/index/TestSortingMergePolicy.java | 17 ----
.../lucene/index/BaseMergePolicyTestCase.java | 97 --------------------
.../index/LogByteSizeMergePolicyFactory.java | 37 ++++++++
.../solr/index/LogDocMergePolicyFactory.java | 37 ++++++++
.../apache/solr/index/MergePolicyFactory.java | 37 ++++++++
.../solr/index/MergePolicyFactoryArgs.java | 61 ++++++++++++
.../solr/index/SimpleMergePolicyFactory.java | 41 +++++++++
.../solr/index/TieredMergePolicyFactory.java | 37 ++++++++
.../index/UpgradeIndexMergePolicyFactory.java | 46 ++++++++++
.../solr/index/WrapperMergePolicyFactory.java | 91 ++++++++++++++++++
.../org/apache/solr/update/SolrIndexConfig.java | 35 ++++---
.../org/apache/solr/util/SolrPluginUtils.java | 27 ++++--
.../solrconfig-tieredmergepolicyfactory.xml | 1 -
.../solrconfig.snippet.randomindexconfig.xml | 2 +-
.../index/WrapperMergePolicyFactoryTest.java | 86 +++++++++++++++++
.../apache/solr/update/SolrIndexConfigTest.java | 5 +-
.../solr/util/RandomMergePolicyFactory.java | 35 +++++++
31 files changed, 545 insertions(+), 644 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/LogByteSizeMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/LogByteSizeMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/LogByteSizeMergePolicyFactory.java
deleted file mode 100644
index 82ee6a8..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/LogByteSizeMergePolicyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for {@link LogByteSizeMergePolicy} objects.
- *
- * @lucene.experimental
- */
-public class LogByteSizeMergePolicyFactory extends SimpleMergePolicyFactory {
-
- public LogByteSizeMergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args) {
- super(helper, args, LogByteSizeMergePolicy.class.getName());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/LogDocMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/LogDocMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/LogDocMergePolicyFactory.java
deleted file mode 100644
index 1327ff7..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/LogDocMergePolicyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for {@link LogDocMergePolicy} objects.
- *
- * @lucene.experimental
- */
-public class LogDocMergePolicyFactory extends SimpleMergePolicyFactory {
-
- public LogDocMergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args) {
- super(helper, args, LogDocMergePolicy.class.getName());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactory.java
deleted file mode 100644
index f8d50d9..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.apache.lucene.index;
-
-
-/*
- * 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.
- */
-
-/**
- * A factory for {@link MergePolicy} objects.
- *
- * @lucene.experimental
- */
-public abstract class MergePolicyFactory {
-
- protected final MergePolicyFactoryHelper helper;
- protected final MergePolicyFactoryArgs args;
-
- protected MergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args) {
- this.helper = helper;
- this.args = args;
- }
-
- public abstract MergePolicy getMergePolicy();
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryArgs.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryArgs.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryArgs.java
deleted file mode 100644
index e8730e5..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryArgs.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.apache.lucene.index;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.lucene.util.LucenePluginUtils;
-
-/*
- * 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.
- */
-
-public class MergePolicyFactoryArgs {
-
- private final Map<String, Object> args = new HashMap<>();
-
- public MergePolicyFactoryArgs() {
- }
-
- public MergePolicyFactoryArgs(Iterator<Map.Entry<String, Object>> iterator) {
- while (iterator.hasNext()) {
- final Map.Entry<String, Object> entry = iterator.next();
- args.put(entry.getKey(), entry.getValue());
- }
- }
-
- public void put(String key, Object val) {
- args.put(key, val);
- }
-
- public Object remove(String key) {
- return args.remove(key);
- }
-
- public Object get(String key) {
- return args.get(key);
- }
-
- public Set<String> keySet() {
- return args.keySet();
- }
-
- public void invokeSetters(MergePolicy policy) {
- for (String key : args.keySet()) {
- final Object val = args.get(key);
- LucenePluginUtils.invokeSetter(policy, key, val);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryHelper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryHelper.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryHelper.java
deleted file mode 100644
index 6fdeb79..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/MergePolicyFactoryHelper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-public abstract class MergePolicyFactoryHelper {
-
- public static final Class[] NO_CLASSES = new Class[0];
- public static final Object[] NO_OBJECTS = new Object[0];
-
- public abstract <T> T newInstance(String cName, Class<T> expectedType, Class[] params, Object[] args);
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/SimpleMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/SimpleMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/SimpleMergePolicyFactory.java
deleted file mode 100644
index ab99955..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/SimpleMergePolicyFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for simple {@link MergePolicy} objects.
- *
- * @lucene.experimental
- */
-public abstract class SimpleMergePolicyFactory extends MergePolicyFactory {
-
- private final String mergePolicyClassName;
-
- protected SimpleMergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args, String mergePolicyClassName) {
- super(helper, args);
- this.mergePolicyClassName = mergePolicyClassName;
- }
-
- @Override
- public MergePolicy getMergePolicy() {
- final MergePolicy mp = helper.newInstance(
- mergePolicyClassName,
- MergePolicy.class,
- MergePolicyFactoryHelper.NO_CLASSES,
- MergePolicyFactoryHelper.NO_OBJECTS);
- args.invokeSetters(mp);
- return mp;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicyFactory.java
deleted file mode 100644
index fb8e8dd..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/TieredMergePolicyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for {@link TieredMergePolicy} objects.
- *
- * @lucene.experimental
- */
-public class TieredMergePolicyFactory extends SimpleMergePolicyFactory {
-
- public TieredMergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args) {
- super(helper, args, TieredMergePolicy.class.getName());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicyFactory.java
deleted file mode 100644
index 11cb182..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for {@link UpgradeIndexMergePolicy} objects.
- *
- * @lucene.experimental
- */
-public class UpgradeIndexMergePolicyFactory extends WrapperMergePolicyFactory {
-
- public UpgradeIndexMergePolicyFactory(MergePolicyFactoryHelper helper, MergePolicyFactoryArgs args) {
- super(helper, args, UpgradeIndexMergePolicy.class.getName(), "base");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/index/WrapperMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/WrapperMergePolicyFactory.java b/lucene/core/src/java/org/apache/lucene/index/WrapperMergePolicyFactory.java
deleted file mode 100644
index 3d750ca..0000000
--- a/lucene/core/src/java/org/apache/lucene/index/WrapperMergePolicyFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.lucene.index;
-
-/*
- * 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.
- */
-
-/**
- * A {@link MergePolicyFactory} for wrapping {@link MergePolicy} objects.
- *
- * @lucene.experimental
- */
-public abstract class WrapperMergePolicyFactory extends MergePolicyFactory {
-
- private class WrappedMergePolicyFactoryArgs extends MergePolicyFactoryArgs {
-
- final String mergePolicyFactoryClassName;
-
- WrappedMergePolicyFactoryArgs(MergePolicyFactoryArgs wrapperArgs, String baseArgName) {
- super();
- String wrappedMergePolicyFactoryClassName = null;
- final String baseArgsPrefix = baseArgName+'.';
- for (String key : wrapperArgs.keySet()) {
- final Object val = wrapperArgs.get(key);
- if (baseArgName.equals(key)) {
- wrappedMergePolicyFactoryClassName = (String)val;
- wrapperArgs.remove(key);
- } if (key.startsWith(baseArgsPrefix)) {
- this.put(key.substring(baseArgsPrefix.length()), val);
- wrapperArgs.remove(key);
- }
- }
- mergePolicyFactoryClassName = wrappedMergePolicyFactoryClassName;
- }
- }
-
- private final String wrapperMergePolicyClassName;
- private final WrappedMergePolicyFactoryArgs wrappedMergePolicyArgs;
-
- protected WrapperMergePolicyFactory(MergePolicyFactoryHelper helper,
- MergePolicyFactoryArgs wrapperArgs, String wrapperMergePolicyClassName,
- String baseArgName) {
- super(helper, wrapperArgs);
- this.wrapperMergePolicyClassName = wrapperMergePolicyClassName;
- wrappedMergePolicyArgs = new WrappedMergePolicyFactoryArgs(this.args, baseArgName);
- }
-
- @Override
- public MergePolicy getMergePolicy() {
- final MergePolicy wrappedMP = getWrappedMergePolicy();
- final MergePolicy wrapperMP = (helper == null ? null : helper.newInstance(
- wrapperMergePolicyClassName,
- MergePolicy.class,
- new Class[] { MergePolicy.class },
- new Object[] { wrappedMP }));
- args.invokeSetters(wrapperMP);
- return wrapperMP;
- }
-
- protected MergePolicy getWrappedMergePolicy() {
- final MergePolicyFactory mpf = helper.newInstance(
- wrappedMergePolicyArgs.mergePolicyFactoryClassName,
- MergePolicyFactory.class,
- new Class[] { MergePolicyFactoryArgs.class },
- new Object[] { wrappedMergePolicyArgs });
- return mpf.getMergePolicy();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/java/org/apache/lucene/util/LucenePluginUtils.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/util/LucenePluginUtils.java b/lucene/core/src/java/org/apache/lucene/util/LucenePluginUtils.java
deleted file mode 100644
index 606d0ae..0000000
--- a/lucene/core/src/java/org/apache/lucene/util/LucenePluginUtils.java
+++ /dev/null
@@ -1,56 +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 org.apache.lucene.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-import java.util.Map;
-
-public class LucenePluginUtils {
-
- public static void invokeSetters(Object bean, Iterator<Map.Entry<String, Object>> iterator) {
- while (iterator.hasNext()) {
- Map.Entry<String, Object> entry = iterator.next();
- String key = entry.getKey();
- Object val = entry.getValue();
- invokeSetter(bean, key, val);
- }
- }
-
- public static void invokeSetter(Object bean, String key, Object val) {
- String setterName = "set" + String.valueOf(Character.toUpperCase(key.charAt(0))) + key.substring(1);
- Method method = null;
- try {
- for (Method m : bean.getClass().getMethods()) {
- if (m.getName().equals(setterName) && m.getParameterTypes().length == 1) {
- method = m;
- break;
- }
- }
- if (method == null) {
- throw new RuntimeException("no setter corrresponding to '" + key + "' in " + bean.getClass().getName());
- }
- Class<?> pClazz = method.getParameterTypes()[0];
- method.invoke(bean, val);
- } catch (InvocationTargetException | IllegalAccessException e1) {
- throw new RuntimeException("Error invoking setter " + setterName + " on class : " + bean.getClass().getName(), e1);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
index 104836e..8dffdf8 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestLogMergePolicy.java
@@ -23,24 +23,6 @@ public class TestLogMergePolicy extends BaseMergePolicyTestCase {
return newLogMergePolicy(random());
}
- final private boolean changeMergeFactor = random().nextBoolean();
- final private boolean changeNoCFSRatio = random().nextBoolean();
-
- @Override
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
- if (changeMergeFactor) args.put("mergeFactor", new Integer(42));
- if (changeNoCFSRatio) args.put("noCFSRatio", new Double(0.42d));
- return args;
- }
-
- protected void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy) {
- assertTrue(mergePolicy instanceof LogMergePolicy);
- final LogMergePolicy mp = (LogMergePolicy)mergePolicy;
- if (changeMergeFactor) assertEquals(42, mp.getMergeFactor());
- if (changeNoCFSRatio) assertEquals(0.42d, mp.getNoCFSRatio(), 0.0);
- }
-
public void testDefaultForcedMergeMB() {
LogByteSizeMergePolicy mp = new LogByteSizeMergePolicy();
assertTrue(mp.getMaxMergeMBForForcedMerge() > 0.0);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/test/org/apache/lucene/index/TestNoMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestNoMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestNoMergePolicy.java
index 418516f..bdd83c6 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestNoMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestNoMergePolicy.java
@@ -31,21 +31,6 @@ public class TestNoMergePolicy extends BaseMergePolicyTestCase {
return NoMergePolicy.INSTANCE;
}
- final private boolean changeNoCFSRatio = random().nextBoolean();
-
- @Override
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
- if (changeNoCFSRatio) args.put("noCFSRatio", new Double(0.42d));
- return args;
- }
-
- protected void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy) {
- assertTrue(mergePolicy instanceof NoMergePolicy);
- final NoMergePolicy mp = (NoMergePolicy)mergePolicy;
- if (changeNoCFSRatio) assertEquals(0.42d, mp.getNoCFSRatio(), 0.0);
- }
-
@Test
public void testNoMergePolicy() throws Exception {
MergePolicy mp = mergePolicy();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
index 7e8aa07..945cf10 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestTieredMergePolicy.java
@@ -29,24 +29,6 @@ public class TestTieredMergePolicy extends BaseMergePolicyTestCase {
return newTieredMergePolicy();
}
- final private boolean changeMaxMergeAtOnce = random().nextBoolean();
- final private boolean changeReclaimDeletesWeight = random().nextBoolean();
-
- @Override
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
- if (changeMaxMergeAtOnce) args.put("maxMergeAtOnce", new Integer(42));
- if (changeReclaimDeletesWeight) args.put("reclaimDeletesWeight", new Double(4.2d));
- return args;
- }
-
- protected void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy) {
- assertTrue(mergePolicy instanceof TieredMergePolicy);
- final TieredMergePolicy mp = (TieredMergePolicy)mergePolicy;
- if (changeMaxMergeAtOnce) assertEquals(42, mp.getMaxMergeAtOnce());
- if (changeReclaimDeletesWeight) assertEquals(4.2d, mp.getReclaimDeletesWeight(), 0.0);
- }
-
public void testForceMergeDeletes() throws Exception {
Directory dir = newDirectory();
IndexWriterConfig conf = newIndexWriterConfig(new MockAnalyzer(random()));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/core/src/test/org/apache/lucene/index/TestUpgradeIndexMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestUpgradeIndexMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestUpgradeIndexMergePolicy.java
index a154ba7..857bcca 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestUpgradeIndexMergePolicy.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestUpgradeIndexMergePolicy.java
@@ -23,16 +23,4 @@ public class TestUpgradeIndexMergePolicy extends BaseMergePolicyTestCase {
return new UpgradeIndexMergePolicy(newMergePolicy(random()));
}
- @Override
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
- // TODO
- return args;
- }
-
- protected void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy) {
- assertTrue(mergePolicy instanceof UpgradeIndexMergePolicy);
- // TODO
- }
-
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java b/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
index 786e291..d9baf55 100644
--- a/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
+++ b/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
@@ -82,23 +82,6 @@ public class TestSortingMergePolicy extends BaseMergePolicyTestCase {
return newSortingMergePolicy(sort);
}
- @Override
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
- // SOLR-5730 will add stuff here.
- return args;
- }
-
- @Override
- public void testMergePolicyFactory() throws IOException {
- // This is a no-op until SOLR-5730 is in place.
- }
-
- protected void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy) {
- assertTrue(mergePolicy instanceof SortingMergePolicy);
- // SOLR-5730 will add stuff here.
- }
-
public static SortingMergePolicy newSortingMergePolicy(Sort sort) {
// usually create a MP with a low merge factor so that many merges happen
MergePolicy mp;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
index ab4c8c7..d94c1c3 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/index/BaseMergePolicyTestCase.java
@@ -24,9 +24,6 @@ import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.TestUtil;
import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Modifier;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -69,98 +66,4 @@ public abstract class BaseMergePolicyTestCase extends LuceneTestCase {
dir.close();
}
- Class<?>[] mergePolicyFactoryConstructorParameterTypes() {
- return new Class[] {
- MergePolicyFactoryHelper.class,
- MergePolicyFactoryArgs.class
- };
- }
-
- Object[] mergePolicyFactoryConstructorParameters() {
- return new Object[] {
- mergePolicyFactoryHelper(),
- mergePolicyFactoryArgs()
- };
- }
-
- protected abstract void checkFactoryCreatedMergePolicy(MergePolicy mergePolicy);
-
- MergePolicyFactoryHelper mergePolicyFactoryHelper() {
- return new MergePolicyFactoryHelper() {
- public <T> T newInstance(String cName, Class<T> expectedType, Class[] params, Object[] args) {
- Class<? extends T> clazz;
- try {
- clazz = Class.forName(cName).asSubclass(expectedType);
- } catch (ClassNotFoundException e) {
- return null;
- }
- Constructor<? extends T> constructor = null;
- try {
- constructor = clazz.getConstructor(params);
- } catch (NoSuchMethodException|SecurityException e) {
- return null;
- }
- T obj = null;
- try {
- obj = constructor.newInstance(args);
- } catch (IllegalAccessException|IllegalArgumentException|InstantiationException|InvocationTargetException e) {
- return null;
- }
- return obj;
- }
- };
- }
-
- MergePolicyFactoryArgs mergePolicyFactoryArgs() {
- return new MergePolicyFactoryArgs();
- }
-
- public void testMergePolicyFactory() throws IOException {
- final MergePolicy mp = mergePolicy();
- Class<?> mpClass = mp.getClass();
- do {
- implTestMergePolicyFactory(mpClass);
- mpClass = mpClass.getSuperclass();
- } while (MergePolicy.class.isAssignableFrom(mpClass));
- implTestMergePolicyFactory(MergePolicy.class);
- }
-
- private void implTestMergePolicyFactory(Class<?> mpClass) throws IOException {
- if (Modifier.isAbstract(mpClass.getModifiers())) return;
- final String mpClassName = mpClass.getName();
- final String mpfClassName = mpClassName+"Factory";
- // find factory class
- Class<?> mpfClass = null;
- try {
- mpfClass = Class.forName(mpfClassName);
- } catch (ClassNotFoundException e) {
- fail(mpfClassName+" factory for "+mpClassName+" not found: "+mpClass);
- }
- final int mpfClassModifiers = mpfClass.getModifiers();
- assertTrue(mpfClassName+" factory for "+mpClassName+" is not public: "+mpfClass,
- Modifier.isPublic(mpfClassModifiers));
- // find factory class's constructor
- Constructor<?> constructor = null;
- final Class<?>[] mpfConstructorParameterTypes = mergePolicyFactoryConstructorParameterTypes();
- try {
- constructor = mpfClass.getConstructor(mpfConstructorParameterTypes);
- } catch (NoSuchMethodException|SecurityException e) {
- fail(mpfClassName+" constructor("+mpfConstructorParameterTypes+") not found - "+e);
- }
- // construct a factory instance
- MergePolicyFactory mpf = null;
- final Object[] mpfConstructorParameters = mergePolicyFactoryConstructorParameters();
- try {
- final Object obj = constructor.newInstance(mpfConstructorParameters);
- assertTrue(obj+" is not a MergePolicyFactory", obj instanceof MergePolicyFactory);
- mpf = (MergePolicyFactory)obj;
- } catch (IllegalAccessException|IllegalArgumentException|InstantiationException|InvocationTargetException e) {
- fail(mpfClassName+" constructor.newInstance("+mpfConstructorParameterTypes+") failed - "+e);
- }
- // create a merge policy using the factory instance
- final MergePolicy mp = mpf.getMergePolicy();
- assertTrue(mp+" cannot be assigned to "+mpClass, mpClass.isAssignableFrom(mp.getClass()));
- checkFactoryCreatedMergePolicy(mp);
- }
-
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/LogByteSizeMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/LogByteSizeMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/LogByteSizeMergePolicyFactory.java
new file mode 100644
index 0000000..4b9e970
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/LogByteSizeMergePolicyFactory.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.LogByteSizeMergePolicy;
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for {@link LogByteSizeMergePolicy} objects.
+ */
+public class LogByteSizeMergePolicyFactory extends SimpleMergePolicyFactory {
+
+ public LogByteSizeMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ }
+
+ @Override
+ protected MergePolicy getMergePolicyInstance() {
+ return new LogByteSizeMergePolicy();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/LogDocMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/LogDocMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/LogDocMergePolicyFactory.java
new file mode 100644
index 0000000..d7bfbfe
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/LogDocMergePolicyFactory.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.LogDocMergePolicy;
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for {@link LogDocMergePolicy} objects.
+ */
+public class LogDocMergePolicyFactory extends SimpleMergePolicyFactory {
+
+ public LogDocMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ }
+
+ @Override
+ protected MergePolicy getMergePolicyInstance() {
+ return new LogDocMergePolicy();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/MergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/MergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/MergePolicyFactory.java
new file mode 100644
index 0000000..5dfba20
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/MergePolicyFactory.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A factory for creating a {@link MergePolicy}.
+ */
+public abstract class MergePolicyFactory {
+
+ protected final MergePolicyFactoryArgs args;
+ protected final SolrResourceLoader resourceLoader;
+
+ protected MergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ this.resourceLoader = resourceLoader;
+ this.args = args;
+ }
+
+ public abstract MergePolicy getMergePolicy();
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java b/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java
new file mode 100644
index 0000000..2259ece
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java
@@ -0,0 +1,61 @@
+/*
+ * 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 org.apache.solr.index;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.util.SolrPluginUtils;
+
+public class MergePolicyFactoryArgs {
+
+ private final Map<String,Object> args = new HashMap<>();
+
+ public MergePolicyFactoryArgs() {
+ this(Collections.<String,Object> emptyMap().entrySet());
+ }
+
+ public MergePolicyFactoryArgs(Iterable<Map.Entry<String,Object>> args) {
+ for (final Map.Entry<String,Object> arg : args) {
+ this.args.put(arg.getKey(), arg.getValue());
+ }
+ }
+
+ public void put(String key, Object val) {
+ args.put(key, val);
+ }
+
+ public Object remove(String key) {
+ return args.remove(key);
+ }
+
+ public Object get(String key) {
+ return args.get(key);
+ }
+
+ public Set<String> keys() {
+ return args.keySet();
+ }
+
+ public void invokeSetters(MergePolicy policy) {
+ SolrPluginUtils.invokeSetters(policy, args.entrySet());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/SimpleMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/SimpleMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/SimpleMergePolicyFactory.java
new file mode 100644
index 0000000..6e975bc
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/SimpleMergePolicyFactory.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 org.apache.solr.index;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for simple {@link MergePolicy} objects. Implementations need only create the policy
+ * {@link #getMergePolicyInstance() instance} and this class will then configure it with all set properties.
+ */
+public abstract class SimpleMergePolicyFactory extends MergePolicyFactory {
+
+ protected SimpleMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ }
+
+ protected abstract MergePolicy getMergePolicyInstance();
+
+ @Override
+ public final MergePolicy getMergePolicy() {
+ final MergePolicy mp = getMergePolicyInstance();
+ args.invokeSetters(mp);
+ return mp;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/TieredMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/TieredMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/TieredMergePolicyFactory.java
new file mode 100644
index 0000000..e97089a
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/TieredMergePolicyFactory.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.lucene.index.TieredMergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for {@link TieredMergePolicy} objects.
+ */
+public class TieredMergePolicyFactory extends SimpleMergePolicyFactory {
+
+ public TieredMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ }
+
+ @Override
+ protected MergePolicy getMergePolicyInstance() {
+ return new TieredMergePolicy();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/UpgradeIndexMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/UpgradeIndexMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/UpgradeIndexMergePolicyFactory.java
new file mode 100644
index 0000000..d864919
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/UpgradeIndexMergePolicyFactory.java
@@ -0,0 +1,46 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.lucene.index.TieredMergePolicy;
+import org.apache.lucene.index.UpgradeIndexMergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for {@link UpgradeIndexMergePolicy} objects.
+ */
+public class UpgradeIndexMergePolicyFactory extends WrapperMergePolicyFactory {
+
+ public UpgradeIndexMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ }
+
+ @Override
+ protected MergePolicy getDefaultWrappedMergePolicy() {
+ return new TieredMergePolicy();
+ }
+
+ @Override
+ public MergePolicy getMergePolicy() {
+ final MergePolicy wrappedMP = getWrappedMergePolicy();
+ final MergePolicy mp = new UpgradeIndexMergePolicy(wrappedMP);
+ args.invokeSetters(mp);
+ return mp;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java b/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java
new file mode 100644
index 0000000..8dbac4e
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java
@@ -0,0 +1,91 @@
+/*
+ * 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 org.apache.solr.index;
+
+import java.util.Iterator;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.core.SolrResourceLoader;
+
+/**
+ * A {@link MergePolicyFactory} for wrapping additional {@link MergePolicyFactory factories}.
+ */
+public abstract class WrapperMergePolicyFactory extends MergePolicyFactory {
+
+ private static final String[] NO_SUB_PACKAGES = new String[0];
+
+ static final String WRAPPED_PREFIX = "wrapped.prefix";
+ static final String CLASS = "class";
+
+ private final MergePolicyFactoryArgs wrappedMergePolicyArgs;
+
+ protected WrapperMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs args) {
+ super(resourceLoader, args);
+ wrappedMergePolicyArgs = filterWrappedMergePolicyFactoryArgs();
+ }
+
+ /**
+ * Returns the default wrapped {@link MergePolicy}. This is called if the factory settings do not explicitly specify
+ * the wrapped policy.
+ */
+ protected abstract MergePolicy getDefaultWrappedMergePolicy();
+
+ /** Returns an instance of the wrapped {@link MergePolicy} after it has been configured with all set parameters. */
+ protected final MergePolicy getWrappedMergePolicy() {
+ if (wrappedMergePolicyArgs == null) {
+ return getDefaultWrappedMergePolicy();
+ }
+
+ final String className = (String) wrappedMergePolicyArgs.remove(CLASS);
+ if (className == null) {
+ throw new IllegalArgumentException("Class name not defined for wrapped MergePolicyFactory!");
+ }
+
+ final MergePolicyFactory mpf = resourceLoader.newInstance(
+ className,
+ MergePolicyFactory.class,
+ NO_SUB_PACKAGES,
+ new Class[] {SolrResourceLoader.class, MergePolicyFactoryArgs.class},
+ new Object[] {resourceLoader, wrappedMergePolicyArgs});
+ return mpf.getMergePolicy();
+ }
+
+ /**
+ * Returns a {@link MergePolicyFactoryArgs} for the wrapped {@link MergePolicyFactory}. This method also removes all
+ * args from this instance's args.
+ */
+ private MergePolicyFactoryArgs filterWrappedMergePolicyFactoryArgs() {
+ final String wrappedPolicyPrefix = (String) args.get(WRAPPED_PREFIX);
+ if (wrappedPolicyPrefix == null) {
+ return null;
+ }
+
+ final String baseArgsPrefix = wrappedPolicyPrefix + '.';
+ final int baseArgsPrefixLength = baseArgsPrefix.length();
+ final MergePolicyFactoryArgs wrappedArgs = new MergePolicyFactoryArgs();
+ // Must use an iterator since we remove items from the map during iteration.
+ for (Iterator<String> iter = args.keys().iterator(); iter.hasNext();) {
+ String key = iter.next();
+ if (key.startsWith(baseArgsPrefix)) {
+ wrappedArgs.put(key.substring(baseArgsPrefixLength), args.get(key));
+ iter.remove();
+ }
+ }
+ return wrappedArgs;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
index 68bc357..9349a72 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
@@ -35,6 +35,10 @@ import org.apache.solr.core.MapSerializable;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.index.MergePolicyFactory;
+import org.apache.solr.index.MergePolicyFactoryArgs;
+import org.apache.solr.index.TieredMergePolicyFactory;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.util.SolrPluginUtils;
import org.slf4j.Logger;
@@ -75,7 +79,6 @@ public class SolrIndexConfig implements MapSerializable {
/**
* Internal constructor for setting defaults based on Lucene Version
*/
- @SuppressWarnings("deprecation")
private SolrIndexConfig(SolrConfig solrConfig) {
luceneVersion = solrConfig.luceneMatchVersion;
effectiveUseCompoundFileSetting = false;
@@ -99,7 +102,6 @@ public class SolrIndexConfig implements MapSerializable {
* @param prefix the XPath prefix for which section to parse (mandatory)
* @param def a SolrIndexConfig instance to pick default values from (optional)
*/
- @SuppressWarnings("deprecation")
public SolrIndexConfig(SolrConfig solrConfig, String prefix, SolrIndexConfig def) {
if (prefix == null) {
prefix = "indexConfig";
@@ -147,11 +149,11 @@ public class SolrIndexConfig implements MapSerializable {
}
assertWarnOrFail("Beginning with Solr 5.5, <mergePolicy> is deprecated, use <mergePolicyFactory> instead.",
- (mergePolicyInfo != null), true);
- assertWarnOrFail("<maxMergeDocs> ignored when using <mergePolicyFactory>, use ??? instead.",
- (mergePolicyFactoryInfo != null && maxMergeDocs != def.maxMergeDocs), true);
- assertWarnOrFail("<mergeFactor> ignored when using <mergePolicyFactory>, use ??? instead.",
- (mergePolicyFactoryInfo != null && mergeFactor != def.mergeFactor), true);
+ (mergePolicyInfo == null), false);
+ assertWarnOrFail("Beginning with Solr 5.5, <maxMergeDocs> is deprecated, configure it on the relevant <mergePolicyFactory> instead.",
+ (mergePolicyFactoryInfo != null && maxMergeDocs == def.maxMergeDocs), false);
+ assertWarnOrFail("Beginning with Solr 5.5, <mergeFactor> is deprecated, configure it on the relevant <mergePolicyFactory> instead.",
+ (mergePolicyFactoryInfo != null && mergeFactor == def.mergeFactor), false);
String val = solrConfig.get(prefix + "/termIndexInterval", null);
if (val != null) {
@@ -246,6 +248,7 @@ public class SolrIndexConfig implements MapSerializable {
* Builds a MergePolicy using the configured MergePolicyFactory
* or if no factory is configured uses the configured mergePolicy PluginInfo.
*/
+ @SuppressWarnings("unchecked")
private MergePolicy buildMergePolicy(final IndexSchema schema) {
if (mergePolicyInfo != null) {
return buildMergePolicyFromInfo(schema);
@@ -259,22 +262,16 @@ public class SolrIndexConfig implements MapSerializable {
mpfArgs = new MergePolicyFactoryArgs();
} else {
mpfClassName = mergePolicyFactoryInfo.className;
- mpfArgs = new MergePolicyFactoryArgs(mergePolicyFactoryInfo.initArgs.iterator());
+ mpfArgs = new MergePolicyFactoryArgs(mergePolicyFactoryInfo.initArgs);
}
- final MergePolicyFactoryHelper mpfHelper = new MergePolicyFactoryHelper() {
- @Override
- public <T> T newInstance(String cName, Class<T> expectedType, Class[] params, Object[] args) {
- return schema.getResourceLoader().newInstance(
- cName, expectedType, NO_SUB_PACKAGES, params, args);
- }
- };
-
- final MergePolicyFactory mpf = mpfHelper.newInstance(
+ final SolrResourceLoader resourceLoader = schema.getResourceLoader();
+ final MergePolicyFactory mpf = resourceLoader.newInstance(
mpfClassName,
MergePolicyFactory.class,
- new Class[] { MergePolicyFactoryHelper.class, MergePolicyFactoryArgs.class },
- new Object[] { mpfHelper, mpfArgs });
+ NO_SUB_PACKAGES,
+ new Class[] { SolrResourceLoader.class, MergePolicyFactoryArgs.class },
+ new Object[] { resourceLoader, mpfArgs });
return mpf.getMergePolicy();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
index 270f91f..7bbd2d9 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
@@ -25,7 +25,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -42,7 +41,6 @@ import org.apache.lucene.search.DisjunctionMaxQuery;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
-import org.apache.lucene.util.LucenePluginUtils;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
@@ -53,7 +51,6 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.RequestParams;
-import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.component.HighlightComponent;
import org.apache.solr.handler.component.ResponseBuilder;
import org.apache.solr.handler.component.ShardDoc;
@@ -1042,14 +1039,28 @@ public class SolrPluginUtils {
return list;
}
-
- public static void invokeSetters(Object bean, NamedList initArgs) {
+ public static void invokeSetters(Object bean, Iterable<Map.Entry<String,Object>> initArgs) {
if (initArgs == null) return;
- Iterator<Map.Entry<String, Object>> iterator = initArgs.iterator();
- LucenePluginUtils.invokeSetters(bean, iterator);
+ for (Map.Entry<String,Object> entry : initArgs) {
+ final String key = entry.getKey();
+ final String setterName = "set" + String.valueOf(Character.toUpperCase(key.charAt(0))) + key.substring(1);
+ try {
+ final Method method = findMethod(bean, setterName, key);
+ method.invoke(bean, entry.getValue());
+ } catch (final InvocationTargetException | IllegalAccessException e1) {
+ throw new RuntimeException("Error invoking setter " + setterName + " on class : " + bean.getClass().getName(), e1);
+ }
+ }
}
-
+ private static Method findMethod(Object bean, String setterName, String key) {
+ for (Method m : bean.getClass().getMethods()) {
+ if (m.getName().equals(setterName) && m.getParameterTypes().length == 1) {
+ return m;
+ }
+ }
+ throw new RuntimeException("No setter corrresponding to '" + key + "' in " + bean.getClass().getName());
+ }
/**
* Given the integer purpose of a request generates a readable value corresponding
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicyfactory.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicyfactory.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicyfactory.xml
index 1b118ae..e790ccf 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicyfactory.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicyfactory.xml
@@ -23,7 +23,6 @@
<schemaFactory class="ClassicIndexSchemaFactory"/>
<indexConfig>
- <mergeFactor>7</mergeFactor>
<mergePolicyFactory class="org.apache.lucene.index.TieredMergePolicyFactory">
<int name="maxMergeAtOnceExplicit">19</int>
<int name="segmentsPerTier">9</int>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
index 069ccb8..a23bf0a 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
@@ -26,7 +26,7 @@ A solrconfig.xml snippet containing indexConfig settings for randomized testing.
the RandomMergePolicy in all tests - but some tests expect very specific
Merge behavior, so those tests can set it as needed.
-->
- <mergePolicy class="${solr.tests.mergePolicy:org.apache.solr.util.RandomMergePolicy}" />
+ <mergePolicyFactory class="org.apache.solr.util.RandomMergePolicyFactory" />
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java b/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java
new file mode 100644
index 0000000..69aa499
--- /dev/null
+++ b/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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 org.apache.solr.index;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.lucene.index.NoMergePolicy;
+import org.apache.lucene.index.TieredMergePolicy;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.core.SolrResourceLoader;
+
+/** Unit tests for {@link WrapperMergePolicyFactory}. */
+public class WrapperMergePolicyFactoryTest extends SolrTestCaseJ4 {
+
+ private final SolrResourceLoader resourceLoader = new SolrResourceLoader();
+
+ public void testReturnsDefaultMergePolicyIfNoneSpecified() {
+ final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
+ MergePolicyFactory mpf = new DefaultingWrapperMergePolicyFactory(resourceLoader, args);
+ assertSame(mpf.getMergePolicy(), NoMergePolicy.INSTANCE);
+ }
+
+ public void testFailsIfNoClassSpecifiedForWrappedPolicy() {
+ final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
+ args.put(WrapperMergePolicyFactory.WRAPPED_PREFIX, "foo");
+ try {
+ new DefaultingWrapperMergePolicyFactory(resourceLoader, args).getMergePolicy();
+ fail("Should have failed when no 'class' specified for wrapped merge policy");
+ } catch (final IllegalArgumentException e) {
+ // Good!
+ }
+ }
+
+ public void testProperlyInitializesWrappedMergePolicy() {
+ final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
+ args.put(WrapperMergePolicyFactory.WRAPPED_PREFIX, "test");
+ args.put("test.class", TieredMergePolicyFactory.class.getName());
+ args.put("test.maxMergeAtOnce", 2);
+ args.put("test.maxMergedSegmentMB", 1.0);
+ MergePolicyFactory mpf = new WrapperMergePolicyFactory(resourceLoader, args) {
+ @Override
+ protected MergePolicy getDefaultWrappedMergePolicy() {
+ throw new IllegalStateException("Should not have reached here!");
+ }
+
+ @Override
+ public MergePolicy getMergePolicy() {
+ return getWrappedMergePolicy();
+ }
+ };
+ final MergePolicy mp = mpf.getMergePolicy();
+ assertSame(mp.getClass(), TieredMergePolicy.class);
+ }
+
+ private static class DefaultingWrapperMergePolicyFactory extends WrapperMergePolicyFactory {
+
+ DefaultingWrapperMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs wrapperArgs) {
+ super(resourceLoader, wrapperArgs);
+ }
+
+ @Override
+ protected MergePolicy getDefaultWrappedMergePolicy() {
+ return NoMergePolicy.INSTANCE;
+ }
+
+ @Override
+ public MergePolicy getMergePolicy() {
+ return getWrappedMergePolicy();
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
index 576c590..cd4b5e4 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
@@ -44,7 +44,6 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
private static final String solrConfigFileNameWarmer = "solrconfig-warmer.xml";
private static final String solrConfigFileNameTieredMergePolicy = "solrconfig-tieredmergepolicy.xml";
private static final String solrConfigFileNameTieredMergePolicyFactory = "solrconfig-tieredmergepolicyfactory.xml";
-
private static final String schemaFileName = "schema.xml";
@BeforeClass
@@ -72,9 +71,7 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
public void testTieredMPSolrIndexConfigCreation() throws Exception {
String solrConfigFileName = random().nextBoolean() ? solrConfigFileNameTieredMergePolicy : solrConfigFileNameTieredMergePolicyFactory;
SolrConfig solrConfig = new SolrConfig(instanceDir, solrConfigFileName, null);
- SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null,
- null);
- assertNotNull(solrIndexConfig);
+ SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
h.getCore().setLatestSchema(indexSchema);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2367d845/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicyFactory.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicyFactory.java b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicyFactory.java
new file mode 100644
index 0000000..0888d58
--- /dev/null
+++ b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicyFactory.java
@@ -0,0 +1,35 @@
+/*
+ * 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 org.apache.solr.util;
+
+import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.index.MergePolicyFactory;
+import org.apache.solr.index.MergePolicyFactoryArgs;
+
+/** A {@link MergePolicyFactory} for {@link RandomMergePolicy}. */
+public final class RandomMergePolicyFactory extends MergePolicyFactory {
+
+ public RandomMergePolicyFactory() {
+ super(null, new MergePolicyFactoryArgs());
+ }
+
+ @Override
+ public MergePolicy getMergePolicy() {
+ return new RandomMergePolicy();
+ }
+
+}