On 12-1-2009 12:42, Wouter Zelle wrote:
I've had similar problems. I've never been able to copy a considerable part
of a repository using the repositorycopy or repository-datacopy tools. I
always get HttpRecoverableExceptions. They do not consistently happen to the
same files, so it seems that it is a non-deterministic issue (probably
timing-related). Instead of trying to fix the actual issue, I decided to try
and fix the symptoms by adding retries to hippo-tools/hippo-wdbp. In
WebdavBatchProcessor there is an executeMethod(HttpMethod method) that
performs the actual httpclient call. I added 3 retries like so:
/**
* Retries up to three times
*
* @return httpclient response code
*/
public int executeMethod(HttpMethodBase method) throws IOException {
DefaultMethodRetryHandler retryHandler = new
DefaultMethodRetryHandler();
retryHandler.setRetryCount(3);
method.setMethodRetryHandler(retryHandler);
return m_httpClient.executeMethod(method);
}
This change works very well for me. In one single repositorycopy run I
copied 6358 files between different repositories, where I had 22 recoverable
exceptions, which all succeeded on a retry. I also did many other runs that
went well. So I strongly suggest that this change gets adopted by Hippo.
Even if the underlying bug is fixed, there may still be network hiccups that
preferably should not stop a multi-hour copy. Please note that I did change
the method API to HttpMethodBase instead of HttpMethod. This allows a
guarantee that the supplied method will be retried. An alternative is to
keep the same API and perform an instanceof check & cast inside the method.
I agree. This makes the java adapter more fault resilient. Changing the
api is probably going to be a problem, so I think we should go for a
instanceof check.
The same fix can be applied to the different WebdavMethods in
hippo-repository-java-adapter to fix Nick's issue. The easiest fix is to put
the method below in WebdavMethod:
/**
* Retries up to three times
*
* @return httpclient response code
*/
protected int executeMethod(HttpClient httpclient, HttpMethodBase method)
throws IOException {
DefaultMethodRetryHandler retryHandler = new
DefaultMethodRetryHandler();
retryHandler.setRetryCount(3);
method.setMethodRetryHandler(retryHandler);
return httpclient.executeMethod(method);
}
Then the subclasses of WebdavMethod should call this method instead of
client.executeMethod(method).
I've to look into this on how to do this exactly. It would be great if
you can create a patch.
Regards,
Bart
Regards,
Wouter
On Wed, Nov 5, 2008 at 6:15 PM, Nick Stolwijk
<[email protected]>wrote:
> Hello,
>
> When we put a little load on our application, which writes XML files
> into the repository, now and then a ClientException occurs:
>
> Caused by: nl.hippo.client.api.ClientException: Exception while
> executing PUT method.:
> org.apache.commons.httpclient.HttpRecoverableException: Error in
> parsing the status line from the response: unable to find line
> starting with "HTTP"
> at nl.hippo.client.webdav.method.Put$1.doExec(Put.java:60)
> at
> nl.hippo.client.webdav.method.WebdavMethod.execute(WebdavMethod.java:62)
> at nl.hippo.client.webdav.method.Put.execute(Put.java:45)
> at
>
nl.hippo.client.webdav.service.WebdavServiceImpl.executePut(WebdavServiceImpl.java:151)
> at
>
com.example.service.Store2RepoServiceImpl.saveFile(Store2RepoServiceImpl.java:107)
> ... 43 more
> Caused by: org.apache.commons.httpclient.HttpRecoverableException:
> org.apache.commons.httpclient.HttpRecoverableException: Error in
> parsing the status line from the response: unable to find line
> starting with "HTTP"
> at
>
org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1962)
> at
>
org.apache.commons.httpclient.HttpMethodBase.processRequest(HttpMethodBase.java:2653)
> at
>
org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1087)
> at
>
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:643)
> at
>
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:497)
> at nl.hippo.client.webdav.method.Put$1.doExec(Put.java:56)
> ... 47 more
>
> Is this a known exception? I am not able to reproduce it clearly with
> a subset of requests.
>
> When we're doing a bulk update, we do two different updates on one
> file. Could it be an issue with putting the same file multiple times
> very soon after each other?
>
> With regards,
>
> Nick Stolwijk
> ~Java Developer~
>
> Iprofs BV.
> Claus Sluterweg 125
> 2012 WS Haarlem
> www.iprofs.nl
> ********************************************
> Hippocms-dev: Hippo CMS development public mailinglist
>
> Searchable archives can be found at:
> MarkMail: http://hippocms-dev.markmail.org
> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>
>
--
Met vriendelijke groet,
Wouter Zelle
********************************************
Hippocms-dev: Hippo CMS development public mailinglist
Searchable archives can be found at:
MarkMail: http://hippocms-dev.markmail.org
Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
--
Hippo B.V. - Amsterdam
Oosteinde 11, 1017 WT, Amsterdam, +31(0)20-5224466
Hippo USA Inc. - San Francisco
101 H Street, Suite Q, Petaluma CA, 94952-3329, +1 (707) 773-4646
-----------------------------------------------------------------
http://www.onehippo.com - [email protected]
-----------------------------------------------------------------
********************************************
Hippocms-dev: Hippo CMS development public mailinglist
Searchable archives can be found at:
MarkMail: http://hippocms-dev.markmail.org
Nabble: http://www.nabble.com/Hippo-CMS-f26633.html