You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/03/12 02:48:45 UTC
svn commit: r1576558 - in
/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube:
CubeBuilder.java CubeDisruptorDataStoreFactory.java HttpClientCube.java
HttpClientCubeBuilder.java
Author: olamy
Date: Wed Mar 12 01:48:44 2014
New Revision: 1576558
URL: http://svn.apache.org/r1576558
Log:
add an async httpclient
more configuration
No need to build so many Cube instances
Modified:
incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java
incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeDisruptorDataStoreFactory.java
incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCube.java
incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCubeBuilder.java
Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java?rev=1576558&r1=1576557&r2=1576558&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeBuilder.java Wed Mar 12 01:48:44 2014
@@ -18,6 +18,7 @@ package org.apache.sirona.cube;
import org.apache.sirona.SironaException;
import org.apache.sirona.configuration.ioc.AutoSet;
+import org.apache.sirona.configuration.ioc.Created;
import org.apache.sirona.util.Localhosts;
import javax.net.ssl.KeyManager;
@@ -59,15 +60,44 @@ public class CubeBuilder {
*/
private int postTimeout = 5000;
+ /**
+ * only for httpclient
+ */
private int maxTotalConnections = 10;
+ /**
+ * only for httpclient
+ */
private int defaultMaxPerRoute = 10;
+ /**
+ * only for httpclient
+ */
private int connectionTimeout = 5000;
+ /**
+ * only for httpclient
+ */
private int connectionRequestTimeout = 5000;
+ /**
+ * only for httpclient
+ */
+ private boolean useAsync;
+
+ private Cube cubeInstance;
+
+ @Created
+ public void createInstance()
+ {
+ cubeInstance = this.build();
+ }
+
public synchronized Cube build() {
+ if (cubeInstance != null)
+ {
+ return cubeInstance;
+ }
if (marker == null) {
marker = Localhosts.get();
}
@@ -251,6 +281,106 @@ public class CubeBuilder {
return connectionRequestTimeout;
}
+ public void setProxyHost( String proxyHost )
+ {
+ this.proxyHost = proxyHost;
+ }
+
+ public void setProxyPort( int proxyPort )
+ {
+ this.proxyPort = proxyPort;
+ }
+
+ public void setCollector( String collector )
+ {
+ this.collector = collector;
+ }
+
+ public void setMarker( String marker )
+ {
+ this.marker = marker;
+ }
+
+ public void setSocketFactory( SSLSocketFactory socketFactory )
+ {
+ this.socketFactory = socketFactory;
+ }
+
+ public void setSslTrustStore( String sslTrustStore )
+ {
+ this.sslTrustStore = sslTrustStore;
+ }
+
+ public void setSslTrustStoreType( String sslTrustStoreType )
+ {
+ this.sslTrustStoreType = sslTrustStoreType;
+ }
+
+ public void setSslTrustStorePassword( String sslTrustStorePassword )
+ {
+ this.sslTrustStorePassword = sslTrustStorePassword;
+ }
+
+ public void setSslTrustStoreProvider( String sslTrustStoreProvider )
+ {
+ this.sslTrustStoreProvider = sslTrustStoreProvider;
+ }
+
+ public void setSslKeyStore( String sslKeyStore )
+ {
+ this.sslKeyStore = sslKeyStore;
+ }
+
+ public void setSslKeyStoreType( String sslKeyStoreType )
+ {
+ this.sslKeyStoreType = sslKeyStoreType;
+ }
+
+ public void setSslKeyStorePassword( String sslKeyStorePassword )
+ {
+ this.sslKeyStorePassword = sslKeyStorePassword;
+ }
+
+ public void setSslKeyStoreProvider( String sslKeyStoreProvider )
+ {
+ this.sslKeyStoreProvider = sslKeyStoreProvider;
+ }
+
+ public void setBasicHeader( String basicHeader )
+ {
+ this.basicHeader = basicHeader;
+ }
+
+ public void setMaxTotalConnections( int maxTotalConnections )
+ {
+ this.maxTotalConnections = maxTotalConnections;
+ }
+
+ public void setDefaultMaxPerRoute( int defaultMaxPerRoute )
+ {
+ this.defaultMaxPerRoute = defaultMaxPerRoute;
+ }
+
+ public void setConnectionTimeout( int connectionTimeout )
+ {
+ this.connectionTimeout = connectionTimeout;
+ }
+
+ public void setConnectionRequestTimeout( int connectionRequestTimeout )
+ {
+ this.connectionRequestTimeout = connectionRequestTimeout;
+ }
+
+ public boolean isUseAsync()
+ {
+ return useAsync;
+ }
+
+ public void setUseAsync( boolean useAsync )
+ {
+ this.useAsync = useAsync;
+ }
+
@Override
public String toString() {
return "CubeBuilder{" + collector + '}';
Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeDisruptorDataStoreFactory.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeDisruptorDataStoreFactory.java?rev=1576558&r1=1576557&r2=1576558&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeDisruptorDataStoreFactory.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubeDisruptorDataStoreFactory.java Wed Mar 12 01:48:44 2014
@@ -26,6 +26,7 @@ public class CubeDisruptorDataStoreFacto
IoCs.processInstance(new CubeCounterDataStore()),
IoCs.processInstance(new CubeGaugeDataStore()),
IoCs.processInstance(new CubeNodeStatusDataStore()),
- IoCs.processInstance(new DisruptorPathTrackingDataStore()));
+ IoCs.findOrCreateInstance( DisruptorPathTrackingDataStore.class ));
+ // IoCs.processInstance(new DisruptorPathTrackingDataStore())
}
}
Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCube.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCube.java?rev=1576558&r1=1576557&r2=1576558&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCube.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCube.java Wed Mar 12 01:48:44 2014
@@ -22,9 +22,17 @@ import org.apache.http.client.HttpClient
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
+import org.apache.http.concurrent.FutureCallback;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
+import org.apache.http.impl.nio.client.HttpAsyncClients;
+import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
+import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
+import org.apache.http.impl.nio.reactor.IOReactorConfig;
+import org.apache.http.nio.conn.NHttpClientConnectionManager;
+import org.apache.http.nio.reactor.ConnectingIOReactor;
import java.io.IOException;
import java.net.URI;
@@ -43,6 +51,8 @@ public class HttpClientCube
private HttpClient httpclient;
+ private CloseableHttpAsyncClient closeableHttpAsyncClient;
+
private RequestConfig requestConfig;
public HttpClientCube( CubeBuilder cubeBuilder )
@@ -50,17 +60,6 @@ public class HttpClientCube
super( cubeBuilder );
try
{
- HttpClientBuilder builder = HttpClientBuilder.create();
-
- PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
-
- connectionManager.setMaxTotal( cubeBuilder.getMaxTotalConnections() );
-
- connectionManager.setDefaultMaxPerRoute( cubeBuilder.getDefaultMaxPerRoute() );
-
- builder = builder.setConnectionManager( connectionManager );
-
- httpclient = builder.build();
requestConfig = RequestConfig.custom() //
.setSocketTimeout( cubeBuilder.getPostTimeout() ) //
@@ -68,6 +67,38 @@ public class HttpClientCube
.setConnectionRequestTimeout( cubeBuilder.getConnectionRequestTimeout() ) //
.build();
+ if ( cubeBuilder.isUseAsync() )
+ {
+ IOReactorConfig ioReactorConfig =
+ IOReactorConfig.custom().setIoThreadCount( Runtime.getRuntime().availableProcessors() - 1 ) //
+ .setConnectTimeout( cubeBuilder.getConnectionTimeout() ) //
+ .setSoTimeout( cubeBuilder.getPostTimeout() ) //
+ .build();
+
+ ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor( ioReactorConfig );
+ NHttpClientConnectionManager manager = new PoolingNHttpClientConnectionManager( ioReactor );
+ closeableHttpAsyncClient = HttpAsyncClients.custom() //
+ .setConnectionManager( manager ) //
+ .setMaxConnPerRoute( cubeBuilder.getDefaultMaxPerRoute() ) //
+ .setMaxConnTotal( cubeBuilder.getMaxTotalConnections() ) //
+ .build();
+ closeableHttpAsyncClient.start();
+ }
+ else
+ {
+ HttpClientBuilder builder = HttpClientBuilder.create();
+
+ PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
+
+ connectionManager.setMaxTotal( cubeBuilder.getMaxTotalConnections() );
+
+ connectionManager.setDefaultMaxPerRoute( cubeBuilder.getDefaultMaxPerRoute() );
+
+ builder = builder.setConnectionManager( connectionManager );
+
+ httpclient = builder.build();
+ }
+
}
catch ( Exception e )
{
@@ -90,22 +121,52 @@ public class HttpClientCube
httpPost.setHeader( X_SIRONA_CLASSNAME, className );
httpPost.setConfig( requestConfig );
-
- httpclient.execute( httpPost, new ResponseHandler<HttpResponse>()
+ if ( this.getConfig().isUseAsync() )
{
- public HttpResponse handleResponse( HttpResponse httpResponse )
- throws ClientProtocolException, IOException
+ closeableHttpAsyncClient.execute( httpPost, new FutureCallback<HttpResponse>()
{
- int status = httpResponse.getStatusLine().getStatusCode();
- if ( status != 200 )
+ @Override
+ public void completed( HttpResponse httpResponse )
+ {
+ int status = httpResponse.getStatusLine().getStatusCode();
+ if ( status != 200 )
+ {
+ LOGGER.warning( "Pushed data but response code is: " + status + //
+ ", reason:" + httpResponse.getStatusLine().getReasonPhrase() );
+ }
+ }
+
+ @Override
+ public void failed( Exception e )
{
- LOGGER.warning( "Pushed data but response code is: " + status + //
- ", reason:" + httpResponse.getStatusLine().getReasonPhrase() );
+ LOGGER.warning( "Failed to push data: " + e.getMessage() );
}
- return httpResponse;
- }
- } );
+ @Override
+ public void cancelled()
+ {
+ LOGGER.warning( "Push data cancelled " );
+ }
+ } );
+ }
+ else
+ {
+
+ httpclient.execute( httpPost, new ResponseHandler<HttpResponse>()
+ {
+ public HttpResponse handleResponse( HttpResponse httpResponse )
+ throws ClientProtocolException, IOException
+ {
+ int status = httpResponse.getStatusLine().getStatusCode();
+ if ( status != 200 )
+ {
+ LOGGER.warning( "Pushed data but response code is: " + status + //
+ ", reason:" + httpResponse.getStatusLine().getReasonPhrase() );
+ }
+ return httpResponse;
+ }
+ } );
+ }
}
catch ( URISyntaxException e )
{
Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCubeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCubeBuilder.java?rev=1576558&r1=1576557&r2=1576558&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCubeBuilder.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/HttpClientCubeBuilder.java Wed Mar 12 01:48:44 2014
@@ -17,6 +17,7 @@
package org.apache.sirona.cube;
import org.apache.sirona.configuration.ioc.AutoSet;
+import org.apache.sirona.configuration.ioc.Created;
/**
* @author Olivier Lamy
@@ -25,9 +26,22 @@ import org.apache.sirona.configuration.i
public class HttpClientCubeBuilder
extends CubeBuilder
{
+
+ private Cube cubeInstance;
+
+ @Created
+ public void createInstance()
+ {
+ cubeInstance = this.build();
+ }
+
@Override
public synchronized Cube build()
{
+ if (cubeInstance != null)
+ {
+ return cubeInstance;
+ }
return new HttpClientCube( this );
}
}