Created https://github.com/apache/maven-resolver/pull/274

T

On Mon, Mar 27, 2023 at 11:04 AM Tamás Cservenák <ta...@cservenak.net>
wrote:

> In this case, is "configuration of pool" (I guess you mean like sizes etc)
> really needed?
> Would "use pool" (on/off) enough instead?
>
> T
>
> On Mon, Mar 27, 2023 at 10:54 AM Michael Vitz
> <vitz.mich...@googlemail.com.invalid> wrote:
>
>> Yes, it seems the isStale-Implementation of BHttpConnectionBase
>>
>> ```
>>     @Override
>>     public boolean isStale() throws IOException {
>>         if (!isOpen()) {
>>             return true;
>>         }
>>         try {
>>             final int bytesRead =
>> fillInputBuffer(Timeout.ofMilliseconds(1));
>>             return bytesRead < 0;
>>         } catch (final SocketTimeoutException ex) {
>>             return false;
>>         } catch (final SocketException ex) {
>>             return true;
>>         }
>>     }
>> ```
>>
>> does not work correctly with the way Azure intercepts these connections.
>>
>> What's the way to improve the situation? Opening a bug there and waiting
>> for it to be fixed? Or is the option to allow configuration of the pool,
>> TTL and or Disabling the pool, like wagon did feasible?
>>
>> Am Mo., 27. März 2023 um 09:58 Uhr schrieb Konrad Windszus <
>> konra...@gmx.de
>> >:
>>
>> > Thanks for the reproducer and sorry for not reading thoroughly before.
>> > Indeed the connection pool is not configurable yet with the native
>> > connector. According to
>> >
>> https://hc.apache.org/httpcomponents-client-4.5.x/current/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html
>> > stale connections are checked after 2 seconds before being reused but
>> > probably the check does not work for some reason with Azure….
>> >
>> > > Am 27.03.2023 um 09:49 schrieb Michael Vitz <
>> vitz.mich...@googlemail.com
>> > .invalid>:
>> > >
>> > > Hi Konrad,
>> > >
>> > > The only two timeout related properties are
>> > aether.connector.requestTimeout
>> > > and aether.connector.connectTimeout.
>> > > Both do not solve my problem.
>> > >
>> > > I created a GitHub project (
>> > > https://github.com/mvitz/maven-39-gh-actions-timeouts) which
>> reproduces
>> > the
>> > > problem.
>> > > It declares many dependencies/plugins to make sure the complete HTTP
>> pool
>> > > is used before the tests, contains a test that runs in total about 6
>> > > minutes to take longer than the four-minute Azure timeout and uses
>> Maven
>> > > 3.9.1.
>> > >
>> > > The first build (
>> > >
>> >
>> https://github.com/mvitz/maven-39-gh-actions-timeouts/actions/runs/4524745997/jobs/7968775993
>> > )
>> > > uses -Daether.connector.requestTimeout=270000 which is longer than
>> four
>> > > minutes and fails.
>> > > The second one (
>> > >
>> >
>> https://github.com/mvitz/maven-39-gh-actions-timeouts/actions/runs/4524925829/jobs/7969075725
>> > )
>> > > uses -Daether.connector.connectTimeout=60000
>> > > -Daether.connector.requestTimeout=180000 which is shorter but fails,
>> too.
>> > >
>> > > Both builds fail with:
>> > > Error:  Failed to execute goal
>> > > org.apache.maven.plugins:maven-jar-plugin:3.3.0:jar (default-jar) on
>> > > project maven-39-gh-actions-timeouts: Execution default-jar of goal
>> > > org.apache.maven.plugins:maven-jar-plugin:3.3.0:jar failed: Plugin
>> > > org.apache.maven.plugins:maven-jar-plugin:3.3.0 or one of its
>> > dependencies
>> > > could not be resolved: Failed to collect dependencies at
>> > > org.apache.maven.plugins:maven-jar-plugin:jar:3.3.0 ->
>> > > org.apache.maven.shared:file-management:jar:3.1.0: Failed to read
>> > artifact
>> > > descriptor for org.apache.maven.shared:file-management:jar:3.1.0: The
>> > > following artifacts could not be resolved:
>> > > org.apache.maven.shared:file-management:pom:3.1.0 (absent): Could not
>> > > transfer artifact org.apache.maven.shared:file-management:pom:3.1.0
>> > from/to
>> > > central (https://repo.maven.apache.org/maven2): Read timed out ->
>> [Help
>> > 1]
>> > >
>> > > I suspect that the HTTP pool is fully used before the tests, all
>> > > connections are silently interrupted during the test run that takes
>> > longer
>> > > than the Azure limit of four minutes, and the pool unable to recover
>> any
>> > > connection from that.
>> > >
>> > > As told before when using wagon with -Dmaven.resolver.transport=wagon
>> and
>> > > configuring a pool time to love of 3 minutes via
>> > > -Dmaven.wagon.httpconnectionManager.ttlSeconds=180 everything works as
>> > > expected (
>> > >
>> >
>> https://github.com/mvitz/maven-39-gh-actions-timeouts/actions/runs/4529868249/jobs/7978093099
>> > > ).
>> > >
>> > > Regards,
>> > > Michael
>> > >
>> > >
>> > >> Am So., 26. März 2023 um 12:54 Uhr schrieb Konrad Windszus <
>> > konra...@gmx.de
>> > >>> :
>> > >>
>> > >> The timeouts are configurable even with new native connector:
>> > >> https://maven.apache.org/resolver/configuration.html.
>> > >> Please try if those settings help.
>> > >> Konrad
>> > >>
>> > >>> Am 25.03.2023 um 15:08 schrieb Michael Vitz <
>> > vitz.mich...@googlemail.com
>> > >> .invalid>:
>> > >>>
>> > >>> Hi all,
>> > >>>
>> > >>> We recently switched from Maven 3.8.x to 3.9.x and all of a sudden,
>> we
>> > >> ran
>> > >>> into connection timeouts during downloading the maven-jar-plugin
>> after
>> > >> all
>> > >>> tests passed.
>> > >>>
>> > >>> After some digging, I suspect that it is a combination of GitHub
>> > Actions
>> > >>> running on Azure which silently drops open connections after around
>> > four
>> > >>> minutes (see discussion in
>> > >>> https://github.com/actions/runner-images/issues/1499) and the
>> switch
>> > to
>> > >> the
>> > >>> native HTTP transport in Maven 3.9.x.
>> > >>> Our tests take quite some time and because the maven-jar-plugin is
>> > >> freshly
>> > >>> downloaded after these, the used connection was opened before the
>> tests
>> > >>> were started and is dropped by Azure meanwhile.
>> > >>>
>> > >>> Our current workaround is switching to the old Wagon HTTP provider
>> > (with
>> > >>> -Dmaven.resolver.transport=wagon) and setting a TTL for the used
>> HTTP
>> > >> pool
>> > >>> (-Dmaven.wagon.httpconnectionManager.ttlSeconds=180) or disabling
>> the
>> > >> pool
>> > >>> and keep alive (-Dhttp.keepAlive=false
>> -Dmaven.wagon.http.pool=false).
>> > >>>
>> > >>> Unfortunately, the new HTTP transport does not allow changing the
>> TTL
>> > >>> (which by default is -1 which means forever) or disabling it
>> > altogether.
>> > >> It
>> > >>> would be nice if such settings would be added in one of the next
>> > >> releases.
>> > >>>
>> > >>> I would be happy to help/try to provide a patch on my own if this
>> > helps.
>> > >>>
>> > >>> Regards,
>> > >>> Michael
>> > >>
>> >
>>
>

Reply via email to