You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2016/02/05 18:25:59 UTC

[1/2] lucene-solr git commit: MergePolicyFactoryArgs's args field is now NamedList instead of Map (it originally was Map only because solr's NamedList was inaccessible to MergePolicyFactoryArgs when it was in the lucene rather than the solr code). This m

Repository: lucene-solr
Updated Branches:
  refs/heads/master-solr-8621 e0a99af35 -> 0e4f3c23f


MergePolicyFactoryArgs's args field is now NamedList instead of Map (it originally was Map only because solr's NamedList was inaccessible to MergePolicyFactoryArgs when it was in the lucene rather than the solr code). This means that no changes to SolrPluginUtils are actually needed compared to master.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d8fa0387
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d8fa0387
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d8fa0387

Branch: refs/heads/master-solr-8621
Commit: d8fa038728874cf76f07b9d4165240462a2e6544
Parents: e0a99af
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Feb 5 17:21:06 2016 +0000
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Feb 5 17:21:06 2016 +0000

----------------------------------------------------------------------
 .../solr/index/MergePolicyFactoryArgs.java      | 31 +++++++++-----
 .../solr/index/WrapperMergePolicyFactory.java   |  7 +---
 .../org/apache/solr/util/SolrPluginUtils.java   | 43 ++++++++++++--------
 .../index/WrapperMergePolicyFactoryTest.java    | 12 +++---
 4 files changed, 55 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d8fa0387/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
index 2259ece..2aeaa69 100644
--- a/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java
+++ b/solr/core/src/java/org/apache/solr/index/MergePolicyFactoryArgs.java
@@ -17,29 +17,29 @@
 package org.apache.solr.index;
 
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.lucene.index.MergePolicy;
+import org.apache.solr.common.util.NamedList;
 import org.apache.solr.util.SolrPluginUtils;
 
 public class MergePolicyFactoryArgs {
 
-  private final Map<String,Object> args = new HashMap<>();
+  private final NamedList<Object> args;
 
   public MergePolicyFactoryArgs() {
-    this(Collections.<String,Object> emptyMap().entrySet());
+    this(new NamedList<Object>());
   }
 
-  public MergePolicyFactoryArgs(Iterable<Map.Entry<String,Object>> args) {
-    for (final Map.Entry<String,Object> arg : args) {
-      this.args.put(arg.getKey(), arg.getValue());
-    }
+  public MergePolicyFactoryArgs(NamedList<Object> args) {
+    this.args = args;
   }
 
-  public void put(String key, Object val) {
-    args.put(key, val);
+  public void add(String key, Object val) {
+    args.add(key, val);
   }
 
   public Object remove(String key) {
@@ -51,11 +51,20 @@ public class MergePolicyFactoryArgs {
   }
 
   public Set<String> keys() {
-    return args.keySet();
+    final Set<String> keys = new HashSet<>(args.size(), 1.0f);
+    for (Iterator<Map.Entry<String,Object>> iter = args.iterator(); iter.hasNext();) {
+      keys.add(iter.next().getKey());
+    }
+    return Collections.unmodifiableSet(keys);
   }
 
   public void invokeSetters(MergePolicy policy) {
-    SolrPluginUtils.invokeSetters(policy, args.entrySet());
+    SolrPluginUtils.invokeSetters(policy, args);
+  }
+
+  @Override
+  public String toString() {
+    return args.toString();
   }
 
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d8fa0387/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
index 0c9b949..77c5b19 100644
--- a/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java
+++ b/solr/core/src/java/org/apache/solr/index/WrapperMergePolicyFactory.java
@@ -80,12 +80,9 @@ public abstract class WrapperMergePolicyFactory extends MergePolicyFactory {
     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();
+    for (String key : args.keys()) {
       if (key.startsWith(baseArgsPrefix)) {
-        wrappedArgs.put(key.substring(baseArgsPrefixLength), args.get(key));
-        iter.remove();
+        wrappedArgs.add(key.substring(baseArgsPrefixLength), args.remove(key));
       }
     }
     return wrappedArgs;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d8fa0387/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 7bbd2d9..8639dce 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
@@ -25,6 +25,7 @@ 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;
@@ -51,6 +52,7 @@ 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;
@@ -1039,28 +1041,37 @@ public class SolrPluginUtils {
     return list;
   }
 
-  public static void invokeSetters(Object bean, Iterable<Map.Entry<String,Object>> initArgs) {
+
+  public static void invokeSetters(Object bean, NamedList initArgs) {
     if (initArgs == null) return;
-    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);
+    Class clazz = bean.getClass();
+    Method[] methods = clazz.getMethods();
+    Iterator<Map.Entry<String, Object>> iterator = initArgs.iterator();
+    while (iterator.hasNext()) {
+      Map.Entry<String, Object> entry = iterator.next();
+      String key = entry.getKey();
+      String setterName = "set" + String.valueOf(Character.toUpperCase(key.charAt(0))) + key.substring(1);
+      Method method = null;
       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);
+        for (Method m : methods) {
+          if (m.getName().equals(setterName) && m.getParameterTypes().length == 1) {
+            method = m;
+            break;
+          }
+        }
+        if (method == null) {
+          throw new RuntimeException("no setter corrresponding to '" + key + "' in " + clazz.getName());
+        }
+        Class pClazz = method.getParameterTypes()[0];
+        Object val = entry.getValue();
+        method.invoke(bean, val);
+      } catch (InvocationTargetException | IllegalAccessException e1) {
+        throw new RuntimeException("Error invoking setter " + setterName + " on class : " + clazz.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/d8fa0387/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
index 3237204..6436398 100644
--- a/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/index/WrapperMergePolicyFactoryTest.java
@@ -35,7 +35,7 @@ public class WrapperMergePolicyFactoryTest extends SolrTestCaseJ4 {
 
   public void testFailsIfNoClassSpecifiedForWrappedPolicy() {
     final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
-    args.put(WrapperMergePolicyFactory.WRAPPED_PREFIX, "foo");
+    args.add(WrapperMergePolicyFactory.WRAPPED_PREFIX, "foo");
     try {
       new DefaultingWrapperMergePolicyFactory(resourceLoader, args).getMergePolicy();
       fail("Should have failed when no 'class' specified for wrapped merge policy");
@@ -50,10 +50,10 @@ public class WrapperMergePolicyFactoryTest extends SolrTestCaseJ4 {
     final double testMaxMergedSegmentMB = defaultTMP.getMaxMergedSegmentMB() * 10;
 
     final MergePolicyFactoryArgs args = new MergePolicyFactoryArgs();
-    args.put(WrapperMergePolicyFactory.WRAPPED_PREFIX, "test");
-    args.put("test.class", TieredMergePolicyFactory.class.getName());
-    args.put("test.maxMergeAtOnce", testMaxMergeAtOnce);
-    args.put("test.maxMergedSegmentMB", testMaxMergedSegmentMB);
+    args.add(WrapperMergePolicyFactory.WRAPPED_PREFIX, "test");
+    args.add("test.class", TieredMergePolicyFactory.class.getName());
+    args.add("test.maxMergeAtOnce", testMaxMergeAtOnce);
+    args.add("test.maxMergedSegmentMB", testMaxMergedSegmentMB);
     MergePolicyFactory mpf = new DefaultingWrapperMergePolicyFactory(resourceLoader, args) {
       @Override
       protected MergePolicy getDefaultWrappedMergePolicy() {
@@ -72,7 +72,7 @@ public class WrapperMergePolicyFactoryTest extends SolrTestCaseJ4 {
     DefaultingWrapperMergePolicyFactory(SolrResourceLoader resourceLoader, MergePolicyFactoryArgs wrapperArgs) {
       super(resourceLoader, wrapperArgs);
       if (!args.keys().isEmpty()) {
-        throw new IllegalArgumentException("All arguments should have been claimed by the wrapped policy but some ("+args.keys()+") remain.");
+        throw new IllegalArgumentException("All arguments should have been claimed by the wrapped policy but some ("+args+") remain.");
       }
     }
 


[2/2] lucene-solr git commit: SolrIndexConfig.buildMergePolicy now passes cloned mergePolicyFactoryInfo.initArgs to MergePolicyFactoryArgs

Posted by cp...@apache.org.
SolrIndexConfig.buildMergePolicy now passes cloned mergePolicyFactoryInfo.initArgs to MergePolicyFactoryArgs


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/0e4f3c23
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/0e4f3c23
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/0e4f3c23

Branch: refs/heads/master-solr-8621
Commit: 0e4f3c23f55817f6a6d60992ed8109582cff3f6e
Parents: d8fa038
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Feb 5 17:25:11 2016 +0000
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Feb 5 17:25:11 2016 +0000

----------------------------------------------------------------------
 solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0e4f3c23/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 a2477f3..236b8c4 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
@@ -262,7 +262,7 @@ public class SolrIndexConfig implements MapSerializable {
       mpfArgs = new MergePolicyFactoryArgs();
     } else {
       mpfClassName =  mergePolicyFactoryInfo.className;
-      mpfArgs = new MergePolicyFactoryArgs(mergePolicyFactoryInfo.initArgs);
+      mpfArgs = new MergePolicyFactoryArgs(mergePolicyFactoryInfo.initArgs.clone()); // clone so that MergePolicyFactoryArgs may own and modify the args passed to it
     }
 
     final SolrResourceLoader resourceLoader = schema.getResourceLoader();