Ok, the commit that broke this was made on 10-31-2107 by Paul Nobel:

>>>>>>
f6f6f113209 (Noble Paul            2017-06-16 14:05:51 +0930 327)
 protected HttpRequestBase createMethod(SolrRequest request, String
collection) throws IOException, SolrServerException {
f6f6f113209 (Noble Paul            2017-06-16 14:05:51 +0930 328)     if
(request instanceof V2RequestSupport) {
f6f6f113209 (Noble Paul            2017-06-16 14:05:51 +0930 329)
 request = ((V2RequestSupport) request).getV2Request();
f6f6f113209 (Noble Paul            2017-06-16 14:05:51 +0930 330)     }
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 331)
 SolrParams params = request.getParams();
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 332)
 RequestWriter.ContentWriter contentWriter =
requestWriter.getContentWriter(request);
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 333)
 Collection<ContentStream> streams = contentWriter == null ?
requestWriter.getContentStreams(request) : null;
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 334)
 String path = requestWriter.getPath(request);
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 335)     if
(path == null || !path.startsWith("/")) {
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 336)
 path = DEFAULT_PATH;
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 337)     }
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 338)
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 339)
 ResponseParser parser = request.getResponseParser();
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 340)     if
(parser == null) {
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 341)
 parser = this.parser;
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 342)     }
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 343)
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 344)     //
The parser 'wt=' and 'version=' params are used instead of the original
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 345)     //
params
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 346)
 ModifiableSolrParams wparams = new ModifiableSolrParams(params);
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 347)     if
(parser != null) {
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 348)
 wparams.set(CommonParams.WT, parser.getWriterType());
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 349)
 wparams.set(CommonParams.VERSION, parser.getVersion());
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 350)     }
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 351)     if
(invariantParams != null) {
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 352)
 wparams.add(invariantParams);
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 353)     }
68d180346ab (Alan Woodward         2015-03-09 11:54:45 +0000 354)
68d180346ab (Alan Woodward         2015-03-09 11:54:45 +0000 355)
 String basePath = baseUrl;
68d180346ab (Alan Woodward         2015-03-09 11:54:45 +0000 356)     if
(collection != null)
68d180346ab (Alan Woodward         2015-03-09 11:54:45 +0000 357)
 basePath += "/" + collection;
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 358)
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 359)     if
(request instanceof V2Request) {
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 360)       if
(System.getProperty("solr.v2RealPath") == null) {
c8e0e939e49 (Ishan Chattopadhyaya  2017-08-20 21:00:15 +0530 361)
 basePath = baseUrl.replace("/solr", "/api");
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 362)       }
else {
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 363)
 basePath = baseUrl + "/____v2";
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 364)       }
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 365)     }
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 366)
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 367)     if
(SolrRequest.METHOD.GET == request.getMethod()) {
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 368)       if
(streams != null || contentWriter != null) {
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 369)
 throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "GET can't
send streams!");
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 370)       }
ce172acb8fe (markrmiller           2016-04-01 12:21:59 -0400 371)
f4fe17cce85 (Uwe Schindler         2015-11-22 09:56:22 +0000 372)
 return new HttpGet(basePath + path + wparams.toQueryString());
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 373)     }
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 374)
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 375)     if
(SolrRequest.METHOD.DELETE == request.getMethod()) {
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 376)
 return new HttpDelete(basePath + path + wparams.toQueryString());
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 377)     }
cc8b5bab0bd (Cao Manh Dat          2017-05-11 09:06:03 +0700 378)
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 379)     if
(SolrRequest.METHOD.POST == request.getMethod() || SolrRequest.METHOD.PUT
== request.getMethod()) {
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 380)
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 381)
 String url = basePath + path;
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 382)
 boolean hasNullStreamName = false;
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 383)       if
(streams != null) {
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 384)
 for (ContentStream cs : streams) {
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 385)
 if (cs.getName() == null) {
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 386)
   hasNullStreamName = true;
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 387)
   break;
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 388)
 }
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 389)         }
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 390)       }
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 391)
 boolean isMultipart = ((this.useMultiPartPost && SolrRequest.METHOD.POST
== request.getMethod())
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 392)
 || (streams != null && streams.size() > 1)) && !hasNullStreamName;
ef809a0f10e (Alan Woodward         2014-12-31 14:05:48 +0000 393)
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 394)
 LinkedList<NameValuePair> postOrPutParams = new LinkedList<>();
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 395)
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 396)
 if(contentWriter != null) {
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 397)
 String fullQueryUrl = url + wparams.toQueryString();
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 398)
 HttpEntityEnclosingRequestBase postOrPut = SolrRequest.METHOD.POST ==
request.getMethod() ?
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 399)
   new HttpPost(fullQueryUrl) : new HttpPut(fullQueryUrl);
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 400)
 postOrPut.addHeader("Content-Type",
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 401)
   contentWriter.getContentType());
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 402)
 postOrPut.setEntity(new BasicHttpEntity(){
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 403)
 @Override
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 404)
 public boolean isStreaming() {
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 405)
   return true;
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 406)
 }
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 407)
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 408)
 @Override
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 409)
 public void writeTo(OutputStream outstream) throws IOException {
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 410)
   contentWriter.write(outstream);
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 411)
 }
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 412)
 });
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 413)
 return postOrPut;
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 414)
706b6c91718 (Noble Paul            2017-10-31 13:16:31 +1030 415)       }
else if (streams == null || isMultipart) {
203bbf504a3 (Alan Woodward         2015-03-26 10:42:22 +0000 416)
 // send server list and request list as query string params
...
<<<<<<

The introduction of RequestWriter essentially prevented use of streams and
multipart EXCEPT when there was no RequestWriter in a request, which is
never.

Karl


On Sat, Sep 22, 2018 at 12:19 PM Karl Wright <daddy...@gmail.com> wrote:

> I'll dig to find which commit it was that introduced the changes.
> Karl
>
> On Sat, Sep 22, 2018 at 11:28 AM Alexandre Rafalovitch <arafa...@gmail.com>
> wrote:
>
>> Do you know which Jira introduced the change?
>>
>> Without further details (I am barely familiar with that code part), it
>> sounds like a regression and possibly even a blocker for the next
>> version. Unless there is a workaround that is quite non-intuitive.
>>
>> Regards,
>>    Alex.
>>
>> On 21 September 2018 at 11:43, Karl Wright <daddy...@gmail.com> wrote:
>> > I should also mention that Solr Cell makes use of the multipart form's
>> > separator name.  This functionality seems to be unavailable through the
>> URL.
>> > We have a number of clients who rely on this.
>> >
>> > Karl
>> >
>> >
>> > On Fri, Sep 21, 2018 at 10:15 AM Karl Wright <daddy...@gmail.com>
>> wrote:
>> >>
>> >> Hi all,
>> >>
>> >> With the release of 7.4, several things changed inside Solrj.  One
>> >> critical thing that changed was that it now seems to be impossible to
>> send
>> >> POST requests with multipart form encoding.  This functionality is
>> critical
>> >> to ManifoldCF since the metadata it sends to Solr regularly exceeds URL
>> >> length.  Here's a snippet of (modified) code from HttpSolrClient:
>> >>
>> >> >>>>>>
>> >>       if(contentWriter != null) {
>> >>         String fullQueryUrl = url + toQueryString(wparams, false);
>> >>         HttpEntityEnclosingRequestBase postOrPut =
>> SolrRequest.METHOD.POST
>> >> == request.getMethod() ?
>> >>             new HttpPost(fullQueryUrl) : new HttpPut(fullQueryUrl);
>> >>         System.out.println("Content type is
>> >> "+contentWriter.getContentType());
>> >>         postOrPut.addHeader("Content-Type",
>> >>             contentWriter.getContentType());
>> >>         postOrPut.setEntity(new BasicHttpEntity(){
>> >>           @Override
>> >>           public boolean isStreaming() {
>> >>             return true;
>> >>           }
>> >>
>> >>           @Override
>> >>           public void writeTo(OutputStream outstream) throws
>> IOException {
>> >>             contentWriter.write(outstream);
>> >>           }
>> >>         });
>> >>         return postOrPut;
>> >> <<<<<<
>> >>
>> >> This takes over all transmissions of POST requests, in practice, and
>> >> transmits them as application/octet-stream, with metadata on the URL.
>> >> There's no way to override this; while I can instead used the multipart
>> >> stuff consistently, when I do so the request to delete a document
>> fails,
>> >> with this SolrJ stack trace:
>> >>
>> >> >>>>>>
>> >> FATAL 2018-09-21T09:54:58,362 (Document delete thread '4') - Error
>> tossed:
>> >> This Should not happen
>> >> java.lang.RuntimeException: This Should not happen
>> >>         at
>> >>
>> org.apache.solr.client.solrj.impl.BinaryRequestWriter.getContentStreams(BinaryRequestWriter.java:67)
>> >> ~[solr-solrj-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc -
>> >> jpountz - 2018-06-18 16:55:14]
>> >>         at
>> >>
>> org.apache.manifoldcf.agents.output.solr.ModifiedHttpSolrClient.createMethod(ModifiedHttpSolrClient.java:148)
>> >> ~[classes/:?]
>> >>         at
>> >>
>> org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:253)
>> >> ~[solr-solrj-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc -
>> >> jpountz - 2018-06-18 16:55:14]
>> >>         at
>> >>
>> org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244)
>> >> ~[solr-solrj-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc -
>> >> jpountz - 2018-06-18 16:55:14]
>> >>         at
>> >> org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)
>> >> ~[solr-solrj-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc -
>> >> jpountz - 2018-06-18 16:55:14]
>> >>         at
>> >> org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:211)
>> >> ~[solr-solrj-7.4.0.jar:7.4.0 9060ac689c270b02143f375de0348b7f626adebc -
>> >> jpountz - 2018-06-18 16:55:14]
>> >>         at
>> >>
>> org.apache.manifoldcf.agents.output.solr.HttpPoster$DeleteThread.run(HttpPoster.java:1364)
>> >> ~[classes/:?]
>> >> <<<<<<
>> >>
>> >> Any ideas?
>> >>
>> >> Karl
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
>> For additional commands, e-mail: dev-h...@lucene.apache.org
>>
>>

Reply via email to