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