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 2012/09/14 18:14:47 UTC

svn commit: r1384834 [3/3] - in /lucene/dev/branches/lucene_solr_3_6/solr: ./ contrib/ contrib/dataimporthandler/ contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/

Modified: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/CHANGES.txt?rev=1384834&r1=1384833&r2=1384834&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/CHANGES.txt Fri Sep 14 16:14:46 2012
@@ -9,7 +9,14 @@ HTTP data sources quick and easy.
 
 ==================  3.6.2  ==================
 
-(No Changes)
+Bug Fixes
+----------------------
+* SOLR-3779: DataImportHandler's LineEntityProcessor when used in conjunction 
+  with FileListEntityProcessor would only process the first file.
+  (Ahmet Arslan via James Dyer)
+  
+* SOLR-3791: CachedSqlEntityProcessor would throw a NullPointerException when 
+  a query returns a row with a NULL key.  (Steffen Moelter via James Dyer)
 
 ==================  3.6.1 ==================
 

Modified: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessor.java?rev=1384834&r1=1384833&r2=1384834&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessor.java (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessor.java Fri Sep 14 16:14:46 2012
@@ -90,8 +90,7 @@ public abstract class EntityProcessor {
   public abstract Map<String, Object> nextModifiedParentRowKey();
 
   /**
-   * Invoked for each parent-row after the last row for this entity is processed. If this is the root-most
-   * entity, it will be called only once in the import, at the very end.
+   * Invoked for each entity at the very end of the import to do any needed cleanup tasks.
    * 
    */
   public abstract void destroy();

Modified: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/LineEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/LineEntityProcessor.java?rev=1384834&r1=1384833&r2=1384834&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/LineEntityProcessor.java (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/LineEntityProcessor.java Fri Sep 14 16:14:46 2012
@@ -116,7 +116,11 @@ public class LineEntityProcessor extends
              "Problem reading from input", exp);
       }
   
-      if (line == null) return null; // end of input       
+      // end of input
+      if (line == null) {
+        closeResources();
+        return null;
+      }
 
       // First scan whole line to see if we want it
       if (acceptLineRegex != null && ! acceptLineRegex.matcher(line).find()) continue;
@@ -127,13 +131,17 @@ public class LineEntityProcessor extends
       return row;
     }
   }
+  
+  public void closeResources() {
+    if (reader != null) {
+      IOUtils.closeQuietly(reader);
+    }
+    reader= null;
+  }
 
     @Override
     public void destroy() {
-      if (reader != null) {
-        IOUtils.closeQuietly(reader);
-      }
-      reader= null;
+      closeResources();
       super.destroy();
     }
 

Modified: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java?rev=1384834&r1=1384833&r2=1384834&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java Fri Sep 14 16:14:46 2012
@@ -54,6 +54,10 @@ public class SortedMapBackedCache implem
       }
       pk = c.iterator().next();
     }
+    //Rows with null keys are not added.
+    if(pk==null) {
+      return;
+    }
     List<Map<String,Object>> thisKeysRecs = theMap.get(pk);
     if (thisKeysRecs == null) {
       thisKeysRecs = new ArrayList<Map<String,Object>>();
@@ -85,6 +89,9 @@ public class SortedMapBackedCache implem
   public void delete(Object key) {
     checkOpen(true);
     checkReadOnly();
+    if(key==null) {
+      return;
+    }
     theMap.remove(key);
   }
   
@@ -114,6 +121,9 @@ public class SortedMapBackedCache implem
   
   public Iterator<Map<String,Object>> iterator(Object key) {
     checkOpen(true);
+    if(key==null) {
+      return null;
+    }
     if(key instanceof Iterable<?>) {
       List<Map<String,Object>> vals = new ArrayList<Map<String,Object>>();
       Iterator<?> iter = ((Iterable<?>) key).iterator();

Copied: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java (from r1384819, lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java?p2=lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java&p1=lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java&r1=1384819&r2=1384834&rev=1384834&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestFileListWithLineEntityProcessor.java Fri Sep 14 16:14:46 2012
@@ -39,7 +39,7 @@ public class TestFileListWithLineEntityP
     
     String config = generateConfig(tmpdir);
     LocalSolrQueryRequest request = lrf.makeRequest(
-        "command", "full-import", "dataConfig", config,
+        "command", "full-import", "dataConfig", config, "debug", "true",
         "clean", "true", "commit", "true", "synchronous", "true", "indent", "true");
     h.query("/dataimport", request);
     

Modified: lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java?rev=1384834&r1=1384833&r2=1384834&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java (original)
+++ lucene/dev/branches/lucene_solr_3_6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java Fri Sep 14 16:14:46 2012
@@ -20,6 +20,7 @@ package org.apache.solr.handler.dataimpo
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -71,6 +72,37 @@ public class TestSortedMapBackedCache ex
 			}
 		}
 	}
+	
+	@Test
+	public void testNullKeys() throws Exception {
+	  //A null key should just be ignored, but not throw an exception
+	  DIHCache cache = null;
+	  try {
+	    cache = new SortedMapBackedCache();
+	    Map<String, String> cacheProps = new HashMap<String, String>();
+      cacheProps.put(DIHCacheSupport.CACHE_PRIMARY_KEY, "a_id");
+      cache.open(getContext(cacheProps));
+      
+      Map<String,Object> data = new HashMap<String,Object>();
+      data.put("a_id", null);
+      data.put("bogus", "data");
+      cache.add(data);
+      
+      Iterator<Map<String, Object>> cacheIter = cache.iterator();
+      while (cacheIter.hasNext()) {
+        Assert.fail("cache should be empty.");
+      }
+      Assert.assertNull(cache.iterator(null));
+      cache.delete(null);      
+	  } catch (Exception e) {
+	    throw e;
+    } finally {
+      try {
+        cache.destroy();
+      } catch (Exception ex) {
+      }
+    }	  
+	}
 
 	@Test
 	public void testCacheReopensWithUpdate() {