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:g...@apache.org] 
Sent: Thursday, November 9, 2017 11:55 PM
To: dev@jclouds.apache.org
Cc: Kiran Khopade <khop...@adobe.com>
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 <khop...@adobe.com.invalid> 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

Reply via email to