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.
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).
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