You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2021/02/10 15:36:00 UTC
[lucene-solr] branch branch_8x updated: SOLR-15145: System property
to control whether base_url is stored in state.json to enable back-compat
with older SolrJ versions (#2328)
This is an automated email from the ASF dual-hosted git repository.
thelabdude 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 735d7d3 SOLR-15145: System property to control whether base_url is stored in state.json to enable back-compat with older SolrJ versions (#2328)
735d7d3 is described below
commit 735d7d3d59f64dd680153501e0876cad3f1a1e9f
Author: Timothy Potter <th...@gmail.com>
AuthorDate: Wed Feb 10 08:35:37 2021 -0700
SOLR-15145: System property to control whether base_url is stored in state.json to enable back-compat with older SolrJ versions (#2328)
---
solr/CHANGES.txt | 3 +++
.../org/apache/solr/common/cloud/ZkNodeProps.java | 20 +++++++++++---------
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index b3b326c..aa92267 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -33,6 +33,9 @@ Bug Fixes
---------------------
* SOLR-15078: Fix ExpandComponent behavior when expanding on numeric fields to differentiate '0' group from null group (hossman)
+* SOLR-15145: System property to control whether base_url is stored in state.json to enable back-compat with older SolrJ versions.
+ (Timothy Potter)
+
Other Changes
---------------------
* SOLR-15118: Deprecate CollectionAdminRequest.getV2Request(). (Jason Gerlowski)
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
index 6f893c9..47ab034 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
@@ -35,6 +35,13 @@ import static org.apache.solr.common.util.Utils.toJSONString;
*/
public class ZkNodeProps implements JSONWriter.Writable {
+ /**
+ * Feature flag to enable storing the 'base_url' property; base_url will not be stored as of Solr 9.x.
+ * Installations that use an older (pre-8.8) SolrJ against a 8.8.0 or newer server will need to set this system
+ * property to true to avoid NPEs when reading cluster state from Zookeeper, see SOLR-15145.
+ */
+ static final boolean STORE_BASE_URL = Boolean.parseBoolean(System.getProperty("solr.storeBaseUrl", "true"));
+
protected final Map<String,Object> propMap;
/**
@@ -45,7 +52,7 @@ public class ZkNodeProps implements JSONWriter.Writable {
// don't store base_url if we have a node_name to recompute from when we read back from ZK
// sub-classes that know they need a base_url (Replica) can eagerly compute in their ctor
- if (this.propMap.containsKey(ZkStateReader.NODE_NAME_PROP)) {
+ if (!STORE_BASE_URL && this.propMap.containsKey(ZkStateReader.NODE_NAME_PROP)) {
this.propMap.remove(ZkStateReader.BASE_URL_PROP);
}
@@ -118,14 +125,9 @@ public class ZkNodeProps implements JSONWriter.Writable {
@Override
public void write(JSONWriter jsonWriter) {
// don't write out the base_url if we have a node_name
- if (propMap.containsKey(ZkStateReader.BASE_URL_PROP) && propMap.containsKey(ZkStateReader.NODE_NAME_PROP)) {
- final Map<String,Object> filtered = new HashMap<>();
- // stream / collect is no good here as the Collector doesn't like null values
- propMap.forEach((key, value) -> {
- if (!ZkStateReader.BASE_URL_PROP.equals(key)) {
- filtered.put(key, value);
- }
- });
+ if (!STORE_BASE_URL && propMap.containsKey(ZkStateReader.BASE_URL_PROP) && propMap.containsKey(ZkStateReader.NODE_NAME_PROP)) {
+ final Map<String,Object> filtered = new HashMap<>(propMap);
+ filtered.remove(ZkStateReader.BASE_URL_PROP);
jsonWriter.write(filtered);
} else {
jsonWriter.write(propMap);