You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2023/08/09 04:36:32 UTC
[solr] branch main updated: SOLR-16360: Atomic update on boolean fields doesn't reflect when value starts with "1", "t" or "T" (#1816)
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new 9b88eb8f564 SOLR-16360: Atomic update on boolean fields doesn't reflect when value starts with "1", "t" or "T" (#1816)
9b88eb8f564 is described below
commit 9b88eb8f5646d4c8745166ffb7f41cd35269fff3
Author: Rahul Goswami <ra...@gmail.com>
AuthorDate: Wed Aug 9 00:36:25 2023 -0400
SOLR-16360: Atomic update on boolean fields doesn't reflect when value starts with "1", "t" or "T" (#1816)
* StrUtils.parseBoolean() can accept a CharSequence
---------
Co-authored-by: Rahul Goswami <rg...@commvault.com>
---
solr/CHANGES.txt | 2 ++
solr/core/src/java/org/apache/solr/schema/BoolField.java | 6 +++---
.../src/test/org/apache/solr/schema/BooleanFieldTest.java | 14 +++++++++++++-
.../src/java/org/apache/solr/common/util/StrUtils.java | 2 +-
4 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index bbc85e009f4..d5d12bf7cf8 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -110,6 +110,8 @@ Bug Fixes
* SOLR-16922: Scripts wrongly prohibit embedded zookeeper when solr port is between 55535 and 64535 (Tiziano Degaetano, Colvin Cowie)
+* SOLR-16360: Atomic update on boolean fields doesn't reflect when value starts with "1", "t" or "T" (Rahul Goswami, Justin Sweeney, David Smiley)
+
Dependency Upgrades
---------------------
(No changes)
diff --git a/solr/core/src/java/org/apache/solr/schema/BoolField.java b/solr/core/src/java/org/apache/solr/schema/BoolField.java
index 5a9146ce08b..65c86f919d6 100644
--- a/solr/core/src/java/org/apache/solr/schema/BoolField.java
+++ b/solr/core/src/java/org/apache/solr/schema/BoolField.java
@@ -40,6 +40,7 @@ import org.apache.lucene.util.CharsRefBuilder;
import org.apache.lucene.util.mutable.MutableValue;
import org.apache.lucene.util.mutable.MutableValueBool;
import org.apache.solr.analysis.SolrAnalyzer;
+import org.apache.solr.common.util.StrUtils;
import org.apache.solr.response.TextResponseWriter;
import org.apache.solr.search.QParser;
import org.apache.solr.search.function.OrdFieldSource;
@@ -123,8 +124,7 @@ public class BoolField extends PrimitiveFieldType {
@Override
public String toInternal(String val) {
- char ch = (val != null && val.length() > 0) ? val.charAt(0) : 0;
- return (ch == '1' || ch == 't' || ch == 'T') ? "T" : "F";
+ return StrUtils.parseBoolean(val) ? "T" : "F";
}
@Override
@@ -211,7 +211,7 @@ public class BoolField extends PrimitiveFieldType {
@Override
public Object toNativeType(Object val) {
if (val instanceof CharSequence) {
- return Boolean.valueOf(val.toString());
+ return Boolean.valueOf(StrUtils.parseBoolean((CharSequence) val));
}
return super.toNativeType(val);
}
diff --git a/solr/core/src/test/org/apache/solr/schema/BooleanFieldTest.java b/solr/core/src/test/org/apache/solr/schema/BooleanFieldTest.java
index fd183b29473..a2cbb5759bc 100644
--- a/solr/core/src/test/org/apache/solr/schema/BooleanFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/BooleanFieldTest.java
@@ -17,6 +17,7 @@
package org.apache.solr.schema;
+import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -24,7 +25,7 @@ import org.junit.Test;
public class BooleanFieldTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solrconfig-basic.xml", "schema15.xml");
+ initCore("solrconfig-tlog.xml", "schema15.xml");
}
// Note, docValues-based boolean tests are tested elsewhere referring to more appropriate schemas
@@ -108,5 +109,16 @@ public class BooleanFieldTest extends SolrTestCaseJ4 {
"//lst[@name='bindsto']/int[@name='true'][.='2']",
"//lst[@name='bindstom']/int[@name='false'][.='2']",
"//lst[@name='bindstom']/int[@name='true'][.='3']");
+
+ // SOLR-16360
+ assertU(adoc("id", "7", "bindsto", "false"));
+ assertU(commit());
+ // do atomic update
+ assertU(adoc(sdoc("id", "7", "bindsto", Map.of("set", "1"))));
+ assertQ(
+ req("qt", "/get", "id", "7"),
+ "count(//doc)=1",
+ "//doc/str[@name='id'][.='7']",
+ "//doc/bool[@name='bindsto'][.='true']");
}
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/StrUtils.java b/solr/solrj/src/java/org/apache/solr/common/util/StrUtils.java
index 0a6ed1464ca..9e813258cd3 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/StrUtils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/StrUtils.java
@@ -256,7 +256,7 @@ public class StrUtils {
}
/** Return if a string starts with '1', 't', or 'T' and return false otherwise. */
- public static boolean parseBoolean(String s) {
+ public static boolean parseBoolean(CharSequence s) {
char ch = s.length() > 0 ? s.charAt(0) : 0;
return (ch == '1' || ch == 't' || ch == 'T');
}