Skip to content

Commit

Permalink
Merge branch 'master' into dependabot/maven/org.codehaus.groovy-groov…
Browse files Browse the repository at this point in the history
…y-all-2.4.19
  • Loading branch information
rantoniuk committed Apr 23, 2020
2 parents 01d0218 + 46b664d commit 04802c8
Show file tree
Hide file tree
Showing 8 changed files with 272 additions and 130 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,6 +1,7 @@
.classpath
.project
.settings
.factorypath
build
target
bin
Expand Down
44 changes: 23 additions & 21 deletions pom.xml
Expand Up @@ -29,7 +29,7 @@
<jenkins.version>2.176.4</jenkins.version>

<!-- security -->
<findbugs.failOnError>false</findbugs.failOnError>
<spotbugs.failOnError>false</spotbugs.failOnError>

<!-- tests -->
<test.groovy.version>2.4.19</test.groovy.version>
Expand Down Expand Up @@ -193,6 +193,10 @@
<groupId>org.codehaus.jackson</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
Expand All @@ -210,14 +214,20 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.5.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- Jenkins plugin dependencies -->

<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-project</artifactId>
<version>1.6</version>
<version>1.14</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down Expand Up @@ -265,12 +275,7 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>script-security</artifactId>
<version>1.16</version>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand All @@ -290,12 +295,6 @@
<version>${test.configuration-as-code.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>2.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
Expand All @@ -321,26 +320,29 @@
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>junit</artifactId>
<version>1.20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${test.groovy.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>jenkins-test-harness</artifactId>
<version>2.56</version>
<version>2.63</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
Expand Down
Expand Up @@ -137,121 +137,109 @@ public ApacheAsyncHttpClient(final Supplier<String> applicationName,

try
{
final IOReactorConfig reactorConfig = IOReactorConfig.custom()
.setIoThreadCount(options.getIoThreadCount())
.setSelectInterval(options.getIoSelectInterval())
.setInterestOpQueued(true)
.build();
final HttpAsyncClientBuilder clientBuilder = createClientBuilder();

this.nonCachingHttpClient = clientBuilder.build();
this.callbackExecutor = options.getCallbackExecutor();
nonCachingHttpClient.start();
}
catch (IOReactorException e)
{
throw new RuntimeException("Reactor " + options.getThreadPrefix() + "not set up correctly", e);
}
}

private HttpAsyncClientBuilder createClientBuilder() throws IOReactorException {

final HttpClientOptions options = httpClientOptions;
final IOReactorConfig reactorConfig = IOReactorConfig.custom()
.setIoThreadCount(options.getIoThreadCount())
.setSelectInterval(options.getIoSelectInterval())
.setInterestOpQueued(true)
.build();

final DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(reactorConfig);
ioReactor.setExceptionHandler(new IOReactorExceptionHandler()
final DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(reactorConfig);
ioReactor.setExceptionHandler(new IOReactorExceptionHandler()
{
@Override
public boolean handle(final IOException e)
{
@Override
public boolean handle(final IOException e)
{
log.error("IO exception in reactor ", e);
return false;
}
log.error("IO exception in reactor ", e);
return false;
}

@Override
public boolean handle(final RuntimeException e)
@Override
public boolean handle(final RuntimeException e)
{
log.error("Fatal runtime error", e);
return false;
}
});

final PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(
ioReactor,
ManagedNHttpClientConnectionFactory.INSTANCE,
getRegistry(options),
DefaultSchemePortResolver.INSTANCE,
SystemDefaultDnsResolver.INSTANCE,
options.getConnectionPoolTimeToLive(),
TimeUnit.MILLISECONDS)
{
@Override
protected void finalize() throws Throwable
{
// prevent the PoolingClientAsyncConnectionManager from logging - this causes exceptions due to
// the ClassLoader probably having been removed when the plugin shuts down. Added a
// PluginEventListener to make sure the shutdown method is called while the plugin classloader
// is still active.
try
{
log.error("Fatal runtime error", e);
return false;
this.shutdown();
}
});

final PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(
ioReactor,
ManagedNHttpClientConnectionFactory.INSTANCE,
getRegistry(options),
DefaultSchemePortResolver.INSTANCE,
SystemDefaultDnsResolver.INSTANCE,
options.getConnectionPoolTimeToLive(),
TimeUnit.MILLISECONDS)
{
@Override
protected void finalize() throws Throwable
catch ( Throwable e )
{
// prevent the PoolingClientAsyncConnectionManager from logging - this causes exceptions due to
// the ClassLoader probably having been removed when the plugin shuts down. Added a
// PluginEventListener to make sure the shutdown method is called while the plugin classloader
// is still active.
try
{
this.shutdown();
}
catch ( Throwable e )
{
// ignore e.printStackTrace();
}
// ignore e.printStackTrace();
}
};

connectionManager.setDefaultMaxPerRoute(options.getMaxConnectionsPerHost());
}
};

final RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout((int) options.getConnectionTimeout())
.setConnectionRequestTimeout((int) options.getLeaseTimeout())
.setCookieSpec(options.getIgnoreCookies() ? CookieSpecs.IGNORE_COOKIES : CookieSpecs.DEFAULT)
.setSocketTimeout((int) options.getSocketTimeout())
.build();
connectionManager.setDefaultMaxPerRoute(options.getMaxConnectionsPerHost());

final HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom()
.setThreadFactory(ThreadFactories.namedThreadFactory(options.getThreadPrefix() + "-io", ThreadFactories.Type.DAEMON))
.setDefaultIOReactorConfig(reactorConfig)
.setConnectionManager(connectionManager)
.setRedirectStrategy(new RedirectStrategy())
.setUserAgent(getUserAgent(options))
.setDefaultRequestConfig(requestConfig);

if(Jenkins.getInstance() != null) {
ProxyConfiguration proxyConfiguration = Jenkins.getInstance().proxy;
if ( proxyConfiguration != null ) {
final HttpHost proxy = new HttpHost( proxyConfiguration.name, proxyConfiguration.port );
//clientBuilder.setProxy( proxy );
if ( StringUtils.isNotBlank( proxyConfiguration.getUserName() ) ) {
clientBuilder.setProxyAuthenticationStrategy( ProxyAuthenticationStrategy.INSTANCE );
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials( new AuthScope( proxyConfiguration.name, proxyConfiguration.port ),
new UsernamePasswordCredentials( proxyConfiguration.getUserName(),
proxyConfiguration.getPassword() ) );
clientBuilder.setDefaultCredentialsProvider( credsProvider );
}

clientBuilder.setRoutePlanner(
new JenkinsProxyRoutePlanner( proxy, proxyConfiguration.getNoProxyHostPatterns() ) );
}
}
final RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout((int) options.getConnectionTimeout())
.setConnectionRequestTimeout((int) options.getLeaseTimeout())
.setCookieSpec(options.getIgnoreCookies() ? CookieSpecs.IGNORE_COOKIES : CookieSpecs.DEFAULT)
.setSocketTimeout((int) options.getSocketTimeout())
.build();

/*
ProxyConfigFactory.getProxyHost(options).foreach(new Effect<HttpHost>()
{
@Override
public void apply(final HttpHost httpHost)
{
clientBuilder.setProxy(httpHost);
ProxyCredentialsProvider.build(options).foreach(new Effect<ProxyCredentialsProvider>()
{
@Override
public void apply(final ProxyCredentialsProvider proxyCredentialsProvider)
{
clientBuilder.setProxyAuthenticationStrategy(ProxyAuthenticationStrategy.INSTANCE);
clientBuilder.setDefaultCredentialsProvider(proxyCredentialsProvider);
}
});
final HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom()
.setThreadFactory(ThreadFactories.namedThreadFactory(options.getThreadPrefix() + "-io", ThreadFactories.Type.DAEMON))
.setDefaultIOReactorConfig(reactorConfig)
.setConnectionManager(connectionManager)
.setRedirectStrategy(new RedirectStrategy())
.setUserAgent(getUserAgent(options))
.setDefaultRequestConfig(requestConfig);

if(Jenkins.getInstance() != null) {
ProxyConfiguration proxyConfiguration = Jenkins.getInstance().proxy;
if ( proxyConfiguration != null ) {
final HttpHost proxy = new HttpHost( proxyConfiguration.name, proxyConfiguration.port );
//clientBuilder.setProxy( proxy );
if ( StringUtils.isNotBlank( proxyConfiguration.getUserName() ) ) {
clientBuilder.setProxyAuthenticationStrategy( ProxyAuthenticationStrategy.INSTANCE );
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials( new AuthScope( proxyConfiguration.name, proxyConfiguration.port ),
new UsernamePasswordCredentials( proxyConfiguration.getUserName(),
proxyConfiguration.getPassword() ) );
clientBuilder.setDefaultCredentialsProvider( credsProvider );
}
});
*/

this.nonCachingHttpClient = clientBuilder.build();
this.callbackExecutor = options.getCallbackExecutor();
nonCachingHttpClient.start();
}
catch (IOReactorException e)
{
throw new RuntimeException("Reactor " + options.getThreadPrefix() + "not set up correctly", e);
clientBuilder.setRoutePlanner(
new JenkinsProxyRoutePlanner( proxy, proxyConfiguration.getNoProxyHostPatterns() ) );
}
}

return clientBuilder;
}

private class JenkinsProxyRoutePlanner extends DefaultRoutePlanner {
Expand All @@ -264,6 +252,7 @@ public JenkinsProxyRoutePlanner(HttpHost proxy, List<Pattern> nonProxyHosts) {
this.nonProxyHosts = nonProxyHosts;
}

@Override
protected HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException {
return bypassProxy(target.getHostName()) ? null : this.proxy;
}
Expand Down Expand Up @@ -469,6 +458,18 @@ private void publishEvent(Request request, long requestDuration, Throwable ex)

private PromiseHttpAsyncClient getPromiseHttpAsyncClient(Request request)
{

log.trace( "Creating new HttpAsyncClient" );
final CloseableHttpAsyncClient nonCachingHttpClient;
try {
final HttpAsyncClientBuilder clientBuilder = createClientBuilder();

nonCachingHttpClient = clientBuilder.build();
nonCachingHttpClient.start();
} catch ( IOReactorException e ) {
throw new RuntimeException( "Reactor " + httpClientOptions.getThreadPrefix() + "not set up correctly" , e );
}

return new SettableFuturePromiseHttpPromiseAsyncClient<C>(nonCachingHttpClient, threadLocalContextManager, callbackExecutor);
}

Expand Down

0 comments on commit 04802c8

Please sign in to comment.