You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2017/07/26 16:21:44 UTC

[1/3] lucene-solr:master: SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_7_0 0fc791af3 -> 117f60fb6
  refs/heads/branch_7x 5d0e58fd7 -> 85258370c
  refs/heads/master e95b48e12 -> 615cc38b1


SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null


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

Branch: refs/heads/master
Commit: 615cc38b18105951e0c12ec8a9851c0baee13d19
Parents: e95b48e
Author: Steve Rowe <sa...@apache.org>
Authored: Wed Jul 26 12:21:02 2017 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Jul 26 12:21:02 2017 -0400

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 ++
 .../handler/admin/SolrInfoMBeanHandler.java     | 14 ++++----
 .../solr/handler/admin/MBeansHandlerTest.java   | 34 ++++++++++++++++++++
 3 files changed, 45 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/615cc38b/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3d6c5a1..821f9fa 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -391,6 +391,9 @@ Bug Fixes
 
 * SOLR-11130: V2Request in SolrJ should return the correct collection name so that the request is forwarded to the
   correct node (noble)
+  
+* SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null.
+  (Steve Rowe)
 
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/615cc38b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
index 4faa466..f9a3c05 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
@@ -209,14 +209,16 @@ public class SolrInfoMBeanHandler extends RequestHandlerBase {
     for(int i=0; i<ref.size(); i++) {
       String name = ref.getName(i);
       Object r = ref.getVal(i);
-      Object n = now.remove(name);
-      if(n == null) {
-        if(r!=null) {
-          out.add("REMOVE "+name, r);
+      Object n = now.get(name);
+      if (n == null) {
+        if (r != null) {
+          out.add("REMOVE " + name, r);
+          now.remove(name);
         }
       }
-      else {
-        out.add(name, diffObject(r,n));
+      else if (r != null) {
+        out.add(name, diffObject(r, n));
+        now.remove(name);
       }
     }
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/615cc38b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
index 40d7821..e47dae5 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
@@ -16,8 +16,13 @@
  */
 package org.apache.solr.handler.admin;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -26,6 +31,12 @@ import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.metrics.SolrCoreMetricManager;
+import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.metrics.reporters.JmxObjectNameFactory;
+import org.apache.solr.metrics.reporters.SolrJmxReporter;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -83,6 +94,29 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
   }
 
   @Test
+  public void testAddedMBeanDiff() throws Exception {
+    String xml = h.query(req(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml"
+    ));
+
+    // Artificially convert a long value to a null, to trigger the ADD case in SolrInfoMBeanHandler.diffObject()
+    xml = xml.replaceFirst("<long\\s+(name\\s*=\\s*\"ADMIN./admin/mbeans.totalTime\"\\s*)>[^<]*</long>", "<null $1/>");
+
+    LocalSolrQueryRequest req = lrf.makeRequest(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml",
+        "diff","true");
+    req.setContentStreams(Collections.singletonList(new ContentStreamBase.StringStream(xml)));
+    xml = h.query(req);
+
+    NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
+    assertNotNull(((NamedList)nl.get("ADMIN").get("/admin/mbeans").get("stats")).get("ADD ADMIN./admin/mbeans.totalTime"));
+  }
+
+  @Test
   public void testXMLDiffWithExternalEntity() throws Exception {
     String file = getFile("mailing_lists.pdf").toURI().toASCIIString();
     String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +


[3/3] lucene-solr:branch_7_0: SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null

Posted by sa...@apache.org.
SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null


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

Branch: refs/heads/branch_7_0
Commit: 117f60fb6a1d1004fdd5a863f7a8c7e3c5fa501f
Parents: 0fc791a
Author: Steve Rowe <sa...@apache.org>
Authored: Wed Jul 26 12:21:02 2017 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Jul 26 12:21:36 2017 -0400

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 ++
 .../handler/admin/SolrInfoMBeanHandler.java     | 14 ++++----
 .../solr/handler/admin/MBeansHandlerTest.java   | 34 ++++++++++++++++++++
 3 files changed, 45 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/117f60fb/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6bac127..1b3da5c 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -293,6 +293,9 @@ Bug Fixes
 
 * SOLR-11130: V2Request in SolrJ should return the correct collection name so that the request is forwarded to the
   correct node (noble)
+  
+* SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null.
+  (Steve Rowe)
 
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/117f60fb/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
index 4faa466..f9a3c05 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
@@ -209,14 +209,16 @@ public class SolrInfoMBeanHandler extends RequestHandlerBase {
     for(int i=0; i<ref.size(); i++) {
       String name = ref.getName(i);
       Object r = ref.getVal(i);
-      Object n = now.remove(name);
-      if(n == null) {
-        if(r!=null) {
-          out.add("REMOVE "+name, r);
+      Object n = now.get(name);
+      if (n == null) {
+        if (r != null) {
+          out.add("REMOVE " + name, r);
+          now.remove(name);
         }
       }
-      else {
-        out.add(name, diffObject(r,n));
+      else if (r != null) {
+        out.add(name, diffObject(r, n));
+        now.remove(name);
       }
     }
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/117f60fb/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
index 40d7821..e47dae5 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
@@ -16,8 +16,13 @@
  */
 package org.apache.solr.handler.admin;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -26,6 +31,12 @@ import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.metrics.SolrCoreMetricManager;
+import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.metrics.reporters.JmxObjectNameFactory;
+import org.apache.solr.metrics.reporters.SolrJmxReporter;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -83,6 +94,29 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
   }
 
   @Test
+  public void testAddedMBeanDiff() throws Exception {
+    String xml = h.query(req(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml"
+    ));
+
+    // Artificially convert a long value to a null, to trigger the ADD case in SolrInfoMBeanHandler.diffObject()
+    xml = xml.replaceFirst("<long\\s+(name\\s*=\\s*\"ADMIN./admin/mbeans.totalTime\"\\s*)>[^<]*</long>", "<null $1/>");
+
+    LocalSolrQueryRequest req = lrf.makeRequest(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml",
+        "diff","true");
+    req.setContentStreams(Collections.singletonList(new ContentStreamBase.StringStream(xml)));
+    xml = h.query(req);
+
+    NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
+    assertNotNull(((NamedList)nl.get("ADMIN").get("/admin/mbeans").get("stats")).get("ADD ADMIN./admin/mbeans.totalTime"));
+  }
+
+  @Test
   public void testXMLDiffWithExternalEntity() throws Exception {
     String file = getFile("mailing_lists.pdf").toURI().toASCIIString();
     String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +


[2/3] lucene-solr:branch_7x: SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null

Posted by sa...@apache.org.
SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null


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

Branch: refs/heads/branch_7x
Commit: 85258370c25a5c646a4eaa274dca2add4e3888a0
Parents: 5d0e58f
Author: Steve Rowe <sa...@apache.org>
Authored: Wed Jul 26 12:21:02 2017 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Wed Jul 26 12:21:21 2017 -0400

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 ++
 .../handler/admin/SolrInfoMBeanHandler.java     | 14 ++++----
 .../solr/handler/admin/MBeansHandlerTest.java   | 34 ++++++++++++++++++++
 3 files changed, 45 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85258370/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 65ab429..d757e6d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -374,6 +374,9 @@ Bug Fixes
 
 * SOLR-11130: V2Request in SolrJ should return the correct collection name so that the request is forwarded to the
   correct node (noble)
+  
+* SOLR-11151: SolrInfoMBeanHandler.getDiff() ADD case non-functional: NPE when a bean value goes from null -> non-null.
+  (Steve Rowe)
 
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85258370/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
index 4faa466..f9a3c05 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
@@ -209,14 +209,16 @@ public class SolrInfoMBeanHandler extends RequestHandlerBase {
     for(int i=0; i<ref.size(); i++) {
       String name = ref.getName(i);
       Object r = ref.getVal(i);
-      Object n = now.remove(name);
-      if(n == null) {
-        if(r!=null) {
-          out.add("REMOVE "+name, r);
+      Object n = now.get(name);
+      if (n == null) {
+        if (r != null) {
+          out.add("REMOVE " + name, r);
+          now.remove(name);
         }
       }
-      else {
-        out.add(name, diffObject(r,n));
+      else if (r != null) {
+        out.add(name, diffObject(r, n));
+        now.remove(name);
       }
     }
     

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/85258370/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
index 40d7821..e47dae5 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
@@ -16,8 +16,13 @@
  */
 package org.apache.solr.handler.admin;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -26,6 +31,12 @@ import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.metrics.SolrCoreMetricManager;
+import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.metrics.reporters.JmxObjectNameFactory;
+import org.apache.solr.metrics.reporters.SolrJmxReporter;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -83,6 +94,29 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
   }
 
   @Test
+  public void testAddedMBeanDiff() throws Exception {
+    String xml = h.query(req(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml"
+    ));
+
+    // Artificially convert a long value to a null, to trigger the ADD case in SolrInfoMBeanHandler.diffObject()
+    xml = xml.replaceFirst("<long\\s+(name\\s*=\\s*\"ADMIN./admin/mbeans.totalTime\"\\s*)>[^<]*</long>", "<null $1/>");
+
+    LocalSolrQueryRequest req = lrf.makeRequest(
+        CommonParams.QT,"/admin/mbeans",
+        "stats","true",
+        CommonParams.WT,"xml",
+        "diff","true");
+    req.setContentStreams(Collections.singletonList(new ContentStreamBase.StringStream(xml)));
+    xml = h.query(req);
+
+    NamedList<NamedList<NamedList<Object>>> nl = SolrInfoMBeanHandler.fromXML(xml);
+    assertNotNull(((NamedList)nl.get("ADMIN").get("/admin/mbeans").get("stats")).get("ADD ADMIN./admin/mbeans.totalTime"));
+  }
+
+  @Test
   public void testXMLDiffWithExternalEntity() throws Exception {
     String file = getFile("mailing_lists.pdf").toURI().toASCIIString();
     String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +