From issues-return-136749-archive-asf-public=cust-asf.ponee.io@maven.apache.org Mon Aug 20 21:51:09 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 5A6A2180771 for ; Mon, 20 Aug 2018 21:51:08 +0200 (CEST) Received: (qmail 84054 invoked by uid 500); 20 Aug 2018 19:51:07 -0000 Mailing-List: contact issues-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@maven.apache.org Delivered-To: mailing list issues@maven.apache.org Received: (qmail 83925 invoked by uid 99); 20 Aug 2018 19:51:07 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 20 Aug 2018 19:51:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 8D1491A1603 for ; Mon, 20 Aug 2018 19:51:06 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -109.501 X-Spam-Level: X-Spam-Status: No, score=-109.501 tagged_above=-999 required=6.31 tests=[ENV_AND_HDR_SPF_MATCH=-0.5, KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, USER_IN_DEF_SPF_WL=-7.5, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id WcgxZdJd6dMs for ; Mon, 20 Aug 2018 19:51:05 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 17C795F523 for ; Mon, 20 Aug 2018 19:51:04 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id BA65FE261D for ; Mon, 20 Aug 2018 19:51:02 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id D1DAC246EF for ; Mon, 20 Aug 2018 19:51:01 +0000 (UTC) Date: Mon, 20 Aug 2018 19:51:01 +0000 (UTC) From: "ASF GitHub Bot (JIRA)" To: issues@maven.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (WAGON-526) making the retry handle of http client configurable MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/WAGON-526?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16586424#comment-16586424 ] ASF GitHub Bot commented on WAGON-526: -------------------------------------- michael-o commented on a change in pull request #37: [WAGON-526] making the retry handle of http client configurable URL: https://github.com/apache/maven-wagon/pull/37#discussion_r211385112 ########## File path: wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagonTest.java ########## @@ -51,4 +79,197 @@ public void test() wagon.disconnect(); } + + @Test + public void retryableConfigurationDefaultTest() throws Exception + { + doTestHttpClient(new Runnable() + { + @Override + public void run() + { + final HttpRequestRetryHandler handler = getCurrentHandler(); + assertNotNull( handler ); + assertThat( handler, instanceOf( DefaultHttpRequestRetryHandler.class ) ); + final DefaultHttpRequestRetryHandler impl = DefaultHttpRequestRetryHandler.class.cast(handler); + assertEquals( 3, impl.getRetryCount() ); + assertFalse( impl.isRequestSentRetryEnabled() ); + } + }); + } + + @Test + public void retryableConfigurationCountTest() throws Exception + { + doTestHttpClient(new Runnable() + { + @Override + public void run() + { + System.setProperty( "maven.wagon.http.retryhandler.class", "default" ); + System.setProperty( "maven.wagon.http.retryhandler.count", "5" ); + + final HttpRequestRetryHandler handler = getCurrentHandler(); + assertNotNull( handler ); + assertThat( handler, instanceOf( DefaultHttpRequestRetryHandler.class ) ); + final DefaultHttpRequestRetryHandler impl = DefaultHttpRequestRetryHandler.class.cast(handler); + assertEquals( 5, impl.getRetryCount() ); + assertFalse( impl.isRequestSentRetryEnabled() ); + } + }); + } + + @Test + public void retryableConfigurationSentTest() throws Exception + { + doTestHttpClient(new Runnable() + { + @Override + public void run() + { + System.setProperty( "maven.wagon.http.retryhandler.class", "default" ); + System.setProperty( "maven.wagon.http.retryhandler.requestSentEnabled", "true" ); + + final HttpRequestRetryHandler handler = getCurrentHandler(); + assertNotNull( handler ); + assertThat( handler, instanceOf( DefaultHttpRequestRetryHandler.class ) ); + final DefaultHttpRequestRetryHandler impl = DefaultHttpRequestRetryHandler.class.cast(handler); + assertEquals( 3, impl.getRetryCount() ); + assertTrue( impl.isRequestSentRetryEnabled() ); + } + }); + } + + @Test + public void retryableConfigurationExceptionsTest() throws Exception + { + doTestHttpClient(new Runnable() + { + @Override + public void run() + { + System.setProperty( "maven.wagon.http.retryhandler.class", "default" ); + System.setProperty( "maven.wagon.http.retryhandler.nonRetryableClasses", IOException.class.getName() ); + + final HttpRequestRetryHandler handler = getCurrentHandler(); + assertNotNull( handler ); + assertThat( handler, instanceOf( DefaultHttpRequestRetryHandler.class ) ); + final DefaultHttpRequestRetryHandler impl = DefaultHttpRequestRetryHandler.class.cast(handler); + assertEquals( 3, impl.getRetryCount() ); + assertFalse( impl.isRequestSentRetryEnabled() ); + + try + { + final Field nonRetriableClasses = handler.getClass().getSuperclass() + .getDeclaredField( "nonRetriableClasses" ); + if (!nonRetriableClasses.isAccessible()) + { + nonRetriableClasses.setAccessible(true); + } + final Set exceptions = Set.class.cast( nonRetriableClasses.get(handler) ); + assertEquals( 1, exceptions.size() ); + assertTrue( exceptions.contains( IOException.class ) ); + } + catch ( final Exception e ) + { + fail( e.getMessage() ); + } + } + }); + } + + private HttpRequestRetryHandler getCurrentHandler() + { + try + { + final Class impl = Thread.currentThread().getContextClassLoader().loadClass( + "org.apache.maven.wagon.shared.http.AbstractHttpClientWagon" ); + + final CloseableHttpClient httpClient = CloseableHttpClient.class.cast( + impl.getMethod("getHttpClient").invoke(null) ); + + final Field redirectExec = httpClient.getClass().getDeclaredField("execChain"); Review comment: space missing ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: users@infra.apache.org > making the retry handle of http client configurable > --------------------------------------------------- > > Key: WAGON-526 > URL: https://issues.apache.org/jira/browse/WAGON-526 > Project: Maven Wagon > Issue Type: New Feature > Reporter: Romain Manni-Bucau > Priority: Major > > Provide a way to customize a lot (until a custom impl) the way wagon retries downloads. -- This message was sent by Atlassian JIRA (v7.6.3#76005)