[
https://issues.apache.org/jira/browse/SOLR-16265?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17757682#comment-17757682
]
ASF subversion and git services commented on SOLR-16265:
--------------------------------------------------------
Commit 5eb27048136bd8dd5ae3e063014dea74ea3f6bb7 in solr's branch
refs/heads/branch_9x from Houston Putman
[ https://gitbox.apache.org/repos/asf?p=solr.git;h=5eb27048136 ]
SOLR-16265: Fix NPE for req in Http2SolrClient (#1860)
(cherry picked from commit c79c8994b5e29f69bcb5db12fcd42d332e3bba37)
> 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
> Reporter: Chris M. Hostetter
> Assignee: Alex Deparvu
> Priority: Major
> Fix For: 9.4
>
> Time Spent: 3h
> Remaining Estimate: 0h
>
> 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.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]