Chris M. Hostetter created SOLR-16265:
-----------------------------------------

             Summary: reduce memory usage of ContentWriter based requests in 
Http2SolrClient
                 Key: SOLR-16265
                 URL: https://issues.apache.org/jira/browse/SOLR-16265
             Project: Solr
          Issue Type: Improvement
      Security Level: Public (Default Security Level. Issues are Public)
            Reporter: Chris M. Hostetter


I recently noticed the code below exists in {{Http2SolrClient.createRequest}}...

{code}
if (contentWriter != null) {
  Request req = httpClient.newRequest(url + 
wparams.toQueryString()).method(method);
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  contentWriter.write(baos);

  // TODO reduce memory usage
  return req.content(
      new BytesContentProvider(contentWriter.getContentType(), 
baos.toByteArray()));
{code}

* AFAICT there is no (other) existing jira discussing this TODO
* This method is called for most "simple" HTTP2 based requests
** {{Http2SolrClient}} or {{CloudHttp2SolrClient}} -- but not 
{{ConcurrentUpdateHttp2SolrClient}}
* This block triggers for anything with a {{ContentWriter}}
** ie: all {{UpdateRequests}} ... and in theory other custom requests
* Part of the issue seems to be that this code repurposes the {{ContentWriter}} 
"push" style API into a "pull" style Jetty client API
** Even though {{Http2SolrClient}} has other code used only by 
{{ConcurrentUpdateHttp2SolrClient}} ({{initOutStream(...)}}) which does 
leverage a "push" style Jetty client API: {{OutputStreamContentProvider}}
* But more silly: we make one (serialized) {{byte[]}} of the data in memory 
inside the {{ByteArrayOutputStream}} then we call {{toByteArray()}} which makes 
a second copy of the {{byte[]}}.




--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to