Hi Andrew, Ignasi
I have raised a PR with change to utilize MD5 hash present in the
payload contentMetadata, instead of generating it from payload.
Thank You,
Kiran
-----Original Message-----
From: Andrew Gaul [mailto:[email protected]]
Sent: Thursday, November 9, 2017 11:55 PM
To: [email protected]
Cc: Kiran Khopade <[email protected]>
Subject: Re: ApacheHCHttpCommandExecutorService->convert(HttpRequest request)
regenerating MD5 though it is available in payload metadata
This code was added in e8d0a11cda55328ea25fb1abb3183694f8c771db and I agree
that it should not exist. This code does not work for non-repeatable payloads
like InputStream. Users should provide MD5 instead of implicitly doing so due
to CPU overhead. Kiran could you submit a pull request to fix this?
On Thu, Nov 09, 2017 at 12:07:06PM +0100, Ignasi Barrera wrote:
> Hi Kiran,
>
> I don't know why the MD5 hash is being re-computed, and it looks like
> it is the only jclouds HTTP driver that does this. In fact, this was
> discussed some time ago, and it was proven unnecessary:
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fs.apa
> che.org%2FCPuh&data=02%7C01%7C%7Cceed09435a0444dde4f608d5279f3788%7Cfa
> 7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636458487140062213&sdata=iKr6
> pGMlb8Bw1r8T7BBf4Gnhuye7GG375liALycS7hs%3D&reserved=0
>
> I'd say it would be safe to apply the patch mentioned in the linked
> thread. If you could try it and confirm it fixes your issue, I'd be
> happy to appy it or to merge a pull request :)
>
> @gaul, do you have any input on why could the Apache driver be doing this?
>
> On 9 November 2017 at 11:54, Kiran Khopade <[email protected]> wrote:
> > Hi,
> >
> > I'm generally just a lurker on this list but we use jclouds
> > internally here for various things. I was just trying to understand
> > the implementation of ApacheHCHttpCommandExecutorService. While
> > doing so, I could not understand following code snippet from
> > [drivers>apachehc]ApacheHCHttpCommandExecutorService.java->convert(H
> > ttpRequest request) method. (Please refer the following code
> > snippet, highlighted if condition)
> >
> >
> > protected HttpUriRequest convert(HttpRequest request) throws IOException
> > {
> > HttpUriRequest returnVal = apacheHCUtils.convertToApacheRequest(request);
> > if (request.getPayload() != null &&
> > request.getPayload().getContentMetadata().getContentMD5() != null) {
> > String md5 =
> > base64().encode(ByteStreams2.hashAndClose(request.getPayload().openStream(),
> > md5()).asBytes());
> > returnVal.addHeader("Content-MD5", md5);
> > }
> >
> > if (!returnVal.containsHeader(HttpHeaders.USER_AGENT)) {
> > returnVal.addHeader(HttpHeaders.USER_AGENT, userAgent);
> > }
> >
> > return returnVal;
> > }
> >
> > I have couple of queries on this if condition code -
> >
> > 1. I Could not understand the purpose of generating MD5 hashcode of
> > payload, if it is already available in payload metadata.
> > 2. While generating md5 of payload in this heighlighted if condition
> > snippet, InputStream is consumed. And as it is consumed to generate MD5,
> > payload will be empty.
> >
> > Please put some lights on this. We are blocked on this.
> >
> > Thank You,
> > Kiran
> >
> >
--
Andrew Gaul
https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgaul.org%2F&data=02%7C01%7C%7Cceed09435a0444dde4f608d5279f3788%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636458487140062213&sdata=V%2FEijTYheLgoQ9GVeQoPqnVlihSKgZyYSnDQLBRP%2BHA%3D&reserved=0