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 17:26:29 UTC

svn commit: r1384819 - in /lucene/dev/trunk/solr: ./ contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/

Author: jdyer
Date: Fri Sep 14 15:26:28 2012
New Revision: 1384819

URL: http://svn.apache.org/viewvc?rev=1384819&view=rev
Log:
SOLR-3791: CachedSqlEntityProcessor throws NPE when pk column is Null

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java
    lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1384819&r1=1384818&r2=1384819&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Fri Sep 14 15:26:28 2012
@@ -170,6 +170,9 @@ 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)
 
 Other Changes
 ----------------------

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java?rev=1384819&r1=1384818&r2=1384819&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SortedMapBackedCache.java Fri Sep 14 15:26:28 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>>();
@@ -87,6 +91,9 @@ public class SortedMapBackedCache implem
   public void delete(Object key) {
     checkOpen(true);
     checkReadOnly();
+    if(key==null) {
+      return;
+    }
     theMap.remove(key);
   }
   
@@ -120,6 +127,9 @@ public class SortedMapBackedCache implem
   @Override
   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();

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java?rev=1384819&r1=1384818&r2=1384819&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSortedMapBackedCache.java Fri Sep 14 15:26:28 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() {