You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2019/04/29 11:11:46 UTC

[lucene-solr] branch branch_8x updated: SOLR-13407: Fix NPE and be consistent about returning empty instead of null properties.

This is an automated email from the ASF dual-hosted git repository.

ab pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 72230b6  SOLR-13407: Fix NPE and be consistent about returning empty instead of null properties.
72230b6 is described below

commit 72230b69b3bd3ee0449e6c3ec149fa917add3ea9
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon Apr 29 12:19:29 2019 +0200

    SOLR-13407: Fix NPE and be consistent about returning empty instead of null properties.
---
 .../solr/cloud/api/collections/MaintainCategoryRoutedAliasCmd.java   | 4 ++--
 .../solr/cloud/api/collections/MaintainTimeRoutedAliasCmd.java       | 4 ++--
 .../src/java/org/apache/solr/handler/admin/CollectionsHandler.java   | 2 +-
 .../org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java | 2 +-
 .../apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java  | 2 +-
 solr/solrj/src/java/org/apache/solr/common/cloud/Aliases.java        | 5 ++---
 6 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainCategoryRoutedAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainCategoryRoutedAliasCmd.java
index 99c7ad0..2878735 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainCategoryRoutedAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainCategoryRoutedAliasCmd.java
@@ -92,9 +92,9 @@ public class MaintainCategoryRoutedAliasCmd extends AliasCmd {
     final ZkStateReader.AliasesManager aliasesManager = ocmh.zkStateReader.aliasesManager;
     final Aliases aliases = aliasesManager.getAliases();
     final Map<String, String> aliasMetadata = aliases.getCollectionAliasProperties(aliasName);
-    if (aliasMetadata == null) {
+    if (aliasMetadata.isEmpty()) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-          "Alias " + aliasName + " does not exist."); // if it did exist, we'd have a non-null map
+          "Alias " + aliasName + " does not exist or is not a routed alias."); // if it did exist, we'd have a non-null map
     }
     final CategoryRoutedAlias categoryRoutedAlias = (CategoryRoutedAlias) RoutedAlias.fromProps(aliasName, aliasMetadata);
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainTimeRoutedAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainTimeRoutedAliasCmd.java
index cb95d76..c1a015e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainTimeRoutedAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainTimeRoutedAliasCmd.java
@@ -103,9 +103,9 @@ public class MaintainTimeRoutedAliasCmd extends AliasCmd {
     final ZkStateReader.AliasesManager aliasesManager = ocmh.zkStateReader.aliasesManager;
     final Aliases aliases = aliasesManager.getAliases();
     final Map<String, String> aliasMetadata = aliases.getCollectionAliasProperties(aliasName);
-    if (aliasMetadata == null) {
+    if (aliasMetadata.isEmpty()) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-          "Alias " + aliasName + " does not exist."); // if it did exist, we'd have a non-null map
+          "Alias " + aliasName + " does not exist or is not a routed alias."); // if it did exist, we'd have a non-null map
     }
     final TimeRoutedAlias timeRoutedAlias = new TimeRoutedAlias(aliasName, aliasMetadata);
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index fc7b59a..07ec42a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -698,7 +698,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         Map<String,Map<String,String>> meta = new LinkedHashMap<>();
         for (String alias : aliases.getCollectionAliasListMap().keySet()) {
           Map<String, String> collectionAliasProperties = aliases.getCollectionAliasProperties(alias);
-          if (collectionAliasProperties != null) {
+          if (!collectionAliasProperties.isEmpty()) {
             meta.put(alias, collectionAliasProperties);
           }
         }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
index ab83e22..13dd731 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
@@ -105,7 +105,7 @@ public class RoutedAliasUpdateProcessor extends UpdateRequestProcessor {
   private static Map<String, String> getAliasProps(SolrQueryRequest req, String aliasName) {
     ZkController zkController = req.getCore().getCoreContainer().getZkController();
     final Map<String, String> aliasProperties = zkController.getZkStateReader().getAliases().getCollectionAliasProperties(aliasName);
-    if (aliasProperties == null) {
+    if (aliasProperties.isEmpty()) {
       throw RoutedAlias.newAliasMustExistException(aliasName); // if it did exist, we'd have a non-null map
     }
     return aliasProperties;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
index 8dd4f1e..87f4a2f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
@@ -246,7 +246,7 @@ public abstract class BaseHttpClusterStateProvider implements ClusterStateProvid
   @Override
   public Map<String, String> getAliasProperties(String alias) {
     getAliases(false);
-    return Collections.unmodifiableMap(aliasProperties.get(alias));
+    return Collections.unmodifiableMap(aliasProperties.getOrDefault(alias, Collections.emptyMap()));
   }
 
   @Override
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/Aliases.java b/solr/solrj/src/java/org/apache/solr/common/cloud/Aliases.java
index f84ad16..6f97c25 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/Aliases.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/Aliases.java
@@ -160,11 +160,10 @@ public class Aliases {
   }
 
   /**
-   * Returns an unmodifiable Map of properties for a given alias. If an alias by the given name
-   * exists, this method will never return null.
+   * Returns an unmodifiable Map of properties for a given alias. This method will never return null.
    *
    * @param alias the name of an alias also found as a key in {@link #getCollectionAliasListMap()}
-   * @return The properties for the alias (possibly empty) or null if the alias does not exist.
+   * @return The properties for the alias (possibly empty).
    */
   public Map<String,String> getCollectionAliasProperties(String alias) {
     // Note: map is already unmodifiable; it can be shared safely