You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by no...@apache.org on 2023/06/21 09:06:42 UTC

[solr] branch main updated: Support toggling STRREF feauture. It's a relatively new feature and it may not be supported on all platforms (#1716)

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

noble 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 3e10f8b8901 Support toggling STRREF feauture. It's a relatively new feature and it may not be supported on all platforms (#1716)
3e10f8b8901 is described below

commit 3e10f8b8901751de78e3c5b93538be133b6336ff
Author: Noble Paul <no...@users.noreply.github.com>
AuthorDate: Wed Jun 21 19:06:36 2023 +1000

    Support toggling STRREF feauture. It's a relatively new feature and it may not be supported on all platforms (#1716)
---
 .../java/org/apache/solr/handler/loader/CborLoader.java    |  2 +-
 .../java/org/apache/solr/response/CborResponseWriter.java  |  8 ++++++--
 .../src/test/org/apache/solr/util/TestCborDataFormat.java  | 14 ++++++++++++--
 .../modules/query-guide/pages/response-writers.adoc        |  4 +++-
 4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/handler/loader/CborLoader.java b/solr/core/src/java/org/apache/solr/handler/loader/CborLoader.java
index f1ab9e24a34..ab6dfaf8fa0 100644
--- a/solr/core/src/java/org/apache/solr/handler/loader/CborLoader.java
+++ b/solr/core/src/java/org/apache/solr/handler/loader/CborLoader.java
@@ -127,7 +127,7 @@ public class CborLoader {
   }
 
   public static ContentStreamLoader createLoader(SolrParams p) {
-    CBORFactory factory = new CBORFactory();
+    CBORFactory factory = CBORFactory.builder().enable(CBORGenerator.Feature.STRINGREF).build();
     return new ContentStreamLoader() {
       @Override
       public void load(
diff --git a/solr/core/src/java/org/apache/solr/response/CborResponseWriter.java b/solr/core/src/java/org/apache/solr/response/CborResponseWriter.java
index 9dbd2370112..294cba59851 100644
--- a/solr/core/src/java/org/apache/solr/response/CborResponseWriter.java
+++ b/solr/core/src/java/org/apache/solr/response/CborResponseWriter.java
@@ -32,15 +32,19 @@ import org.apache.solr.request.SolrQueryRequest;
  */
 public class CborResponseWriter extends BinaryResponseWriter {
   final CBORFactory cborFactory;
+  final CBORFactory cborFactoryCompact;
 
   public CborResponseWriter() {
-    cborFactory = CBORFactory.builder().enable(CBORGenerator.Feature.STRINGREF).build();
+    cborFactoryCompact = CBORFactory.builder().enable(CBORGenerator.Feature.STRINGREF).build();
+    cborFactory = CBORFactory.builder().build();
   }
 
   @Override
   public void write(OutputStream out, SolrQueryRequest req, SolrQueryResponse response)
       throws IOException {
-    WriterImpl writer = new WriterImpl(cborFactory, out, req, response);
+    boolean useStringRef = req.getParams().getBool("string_ref", true);
+    WriterImpl writer =
+        new WriterImpl(useStringRef ? cborFactoryCompact : cborFactory, out, req, response);
     writer.writeResponse();
     writer.gen.flush();
   }
diff --git a/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java b/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java
index 4caa6ebd15a..90b61853bfb 100644
--- a/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java
+++ b/solr/core/src/test/org/apache/solr/util/TestCborDataFormat.java
@@ -87,6 +87,9 @@ public class TestCborDataFormat extends SolrCloudTestCase {
       runQuery(testCollection, client, "json");
       runQuery(testCollection, client, "json");
       b = runQuery(testCollection, client, "cbor");
+      int compactSz = b.length;
+      b = runQuery(testCollection, client, "cbor-noncompact");
+      assertTrue(compactSz < b.length);
       b = runQuery(testCollection, client, "cbor");
       ObjectMapper objectMapper = new ObjectMapper(new CBORFactory());
       Object o = objectMapper.readValue(b, Object.class);
@@ -116,11 +119,18 @@ public class TestCborDataFormat extends SolrCloudTestCase {
     NamedList<Object> result;
     QueryRequest request;
     RTimer timer = new RTimer();
-    request = new QueryRequest(new SolrQuery("*:*").setRows(1111));
-    request.setResponseParser(new InputStreamResponseParser(wt));
+    SolrQuery q = new SolrQuery("*:*").setRows(1111);
+    request = new QueryRequest(q);
+    if (wt.equals("cbor-noncompact")) {
+      q.set("string_ref", false);
+      request.setResponseParser(new InputStreamResponseParser("cbor"));
+    } else {
+      request.setResponseParser(new InputStreamResponseParser(wt));
+    }
     result = client.request(request, testCollection);
     byte[] b = copyStream((InputStream) result.get("stream"));
     System.out.println(wt + "_time : " + timer.getTime());
+    System.out.println(wt + "_size : " + b.length);
     return b;
   }
 
diff --git a/solr/solr-ref-guide/modules/query-guide/pages/response-writers.adoc b/solr/solr-ref-guide/modules/query-guide/pages/response-writers.adoc
index bbc08e04478..6fc40c65ef7 100644
--- a/solr/solr-ref-guide/modules/query-guide/pages/response-writers.adoc
+++ b/solr/solr-ref-guide/modules/query-guide/pages/response-writers.adoc
@@ -397,7 +397,9 @@ MA147LL/A,"electronics,music",Apple 60 GB iPod with Video Playback Black,10,399.
 
 == CBOR Response Writer
 
-Solr supports CBOR format which is more compact and fast.
+Solr supports CBOR response format which is more compact and fast. Use the `wt=cbor` parameter to get responses in CBOR.
+
+If your client does not support the STRINGREF feature of CBOR, use `wt=cbor&str_ref=false`
 
 === Example Python program