You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jd...@apache.org on 2013/03/11 18:37:19 UTC

svn commit: r1455245 - in /lucene/dev/trunk/solr: ./ contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/ contrib/dataimporthandler/src/test/org/apache/solr/handler/d...

Author: jdyer
Date: Mon Mar 11 17:37:17 2013
New Revision: 1455245

URL: http://svn.apache.org/r1455245
Log:
SOLR-4361: DIH to allow handler parameters with dots in the name

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/VariableResolver.java
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/dataimport-solrconfig.xml
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1455245&r1=1455244&r2=1455245&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Mon Mar 11 17:37:17 2013
@@ -70,6 +70,10 @@ Bug Fixes
   
 * SOLR-4555: When forceNew is used with CachingDirectoryFactory#get, the old
   CachValue should have it's path set to null. (Mark Miller)
+  
+* SOLR-4361: DataImportHandler would throw UnsupportedOperationException if
+  handler-level parameters were specified containing periods in the name
+  (James Dyer)
 
 Other Changes
 ----------------------

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=1455245&r1=1455244&r2=1455245&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DocBuilder.java Mon Mar 11 17:37:17 2013
@@ -130,7 +130,7 @@ public class DocBuilder {
         indexerNamespace.put(LAST_INDEX_TIME, EPOCH);
       }
       indexerNamespace.put(INDEX_START_TIME, dataImporter.getIndexStartTime());
-      indexerNamespace.put("request", reqParams.getRawParams());
+      indexerNamespace.put("request", new HashMap<String,Object>(reqParams.getRawParams()));
       for (Entity entity : dataImporter.getConfig().getEntities()) {
         String key = entity.getName() + "." + SolrWriter.LAST_INDEX_KEY;
         Object lastIndex = persistedProperties.get(key);

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/VariableResolver.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/VariableResolver.java?rev=1455245&r1=1455244&r2=1455245&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/VariableResolver.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/VariableResolver.java Mon Mar 11 17:37:17 2013
@@ -91,8 +91,9 @@ public class VariableResolver {
     Object r = null;
     if (name != null) {
       String[] nameParts = DOT_PATTERN.split(name);
-      Map<String,Object> currentLevel = currentLevelMap(nameParts,
+      CurrentLevel cr = currentLevelMap(nameParts,
           rootNamespace, false);
+      Map<String,Object> currentLevel = cr.map;
       r = currentLevel.get(nameParts[nameParts.length - 1]);
       if (r == null && name.startsWith(FUNCTIONS_NAMESPACE)
           && name.length() > FUNCTIONS_NAMESPACE.length()) {
@@ -103,6 +104,16 @@ public class VariableResolver {
         return resolveEvaluator(FUNCTIONS_NAMESPACE_SHORT, name);
       }
       if (r == null) {
+        StringBuilder sb = new StringBuilder();
+        for(int i=cr.level ; i<nameParts.length ; i++) {
+          if(sb.length()>0) {
+            sb.append(".");
+          }
+          sb.append(nameParts[i]);
+        }
+        r = cr.map.get(sb.toString());
+      }      
+      if (r == null) {
         r = System.getProperty(name);
       }
     }
@@ -181,28 +192,41 @@ public class VariableResolver {
       if (name != null) {
         String[] nameParts = DOT_PATTERN.split(name);
         Map<String,Object> nameResolveLevel = currentLevelMap(nameParts,
-            rootNamespace, false);
+            rootNamespace, false).map;
         nameResolveLevel.put(nameParts[nameParts.length - 1], newMap);
       } else {
         for (Map.Entry<String,Object> entry : newMap.entrySet()) {
           String[] keyParts = DOT_PATTERN.split(entry.getKey());
           Map<String,Object> currentLevel = rootNamespace;
-          currentLevel = currentLevelMap(keyParts, currentLevel, false);
+          currentLevel = currentLevelMap(keyParts, currentLevel, false).map;
           currentLevel.put(keyParts[keyParts.length - 1], entry.getValue());
         }
       }
     }
   }
   
-  private Map<String,Object> currentLevelMap(String[] keyParts,
+  class CurrentLevel {
+    final Map<String,Object> map;
+    final int level;
+    CurrentLevel(int level, Map<String,Object> map) {
+      this.level = level;
+      this.map = map;
+    }   
+  }
+  
+  private CurrentLevel currentLevelMap(String[] keyParts,
       Map<String,Object> currentLevel, boolean includeLastLevel) {
     int j = includeLastLevel ? keyParts.length : keyParts.length - 1;
     for (int i = 0; i < j; i++) {
       Object o = currentLevel.get(keyParts[i]);
       if (o == null) {
-        Map<String,Object> nextLevel = new HashMap<String,Object>();
-        currentLevel.put(keyParts[i], nextLevel);
-        currentLevel = nextLevel;
+        if(i == j-1) {
+          Map<String,Object> nextLevel = new HashMap<String,Object>();
+          currentLevel.put(keyParts[i], nextLevel);
+          currentLevel = nextLevel;
+        } else {
+          return new CurrentLevel(i, currentLevel);
+        }
       } else if (o instanceof Map<?,?>) {
         @SuppressWarnings("unchecked")
         Map<String,Object> nextLevel = (Map<String,Object>) o;
@@ -212,7 +236,7 @@ public class VariableResolver {
             "Non-leaf nodes should be of type java.util.Map");
       }
     }
-    return currentLevel;
+    return new CurrentLevel(j-1, currentLevel);
   }
   
   public void removeNamespace(String name) {

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/dataimport-solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/dataimport-solrconfig.xml?rev=1455245&r1=1455244&r2=1455245&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/dataimport-solrconfig.xml (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test-files/dih/solr/collection1/conf/dataimport-solrconfig.xml Mon Mar 11 17:37:17 2013
@@ -239,6 +239,9 @@
   </requestHandler>
   
   <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
+  	<lst name="defaults">
+      <str name="dots.in.hsqldb.driver">org.hsqldb.jdbcDriver</str>
+    </lst>
   </requestHandler>
     
   <!--

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java?rev=1455245&r1=1455244&r2=1455245&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestVariableResolverEndToEnd.java Mon Mar 11 17:37:17 2013
@@ -62,7 +62,7 @@ public class TestVariableResolverEndToEn
     String thirdLocaleParam = random().nextBoolean() ? "" : (", '" + Locale.getDefault() + "'");
     StringBuilder sb = new StringBuilder();
     sb.append("<dataConfig> \n");
-    sb.append("<dataSource name=\"hsqldb\" driver=\"org.hsqldb.jdbcDriver\" url=\"jdbc:hsqldb:mem:.\" /> \n");
+    sb.append("<dataSource name=\"hsqldb\" driver=\"${dataimporter.request.dots.in.hsqldb.driver}\" url=\"jdbc:hsqldb:mem:.\" /> \n");
     sb.append("<document name=\"TestEvaluators\"> \n");
     sb.append("<entity name=\"FIRST\" processor=\"SqlEntityProcessor\" dataSource=\"hsqldb\" ");
     sb.append(" query=\"" +