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=\"" +