Two bugfies, disabling use of TCP client pool 47/3847/2
authorPatrikBuhr <patrik.buhr@est.tech>
Mon, 18 May 2020 07:23:18 +0000 (09:23 +0200)
committerPatrikBuhr <patrik.buhr@est.tech>
Tue, 26 May 2020 12:53:21 +0000 (14:53 +0200)
TCP client pool is not used for connections.
Connections were for some reason not reused and
this consumed a lot of memory which was never released.

Registerring of a service should start a new kepp alive interval.

Change-Id: If53a58fdf971b1b771560dda5f24218bec1de92a
Issue-ID: NONRTRIC-195
Signed-off-by: PatrikBuhr <patrik.buhr@est.tech>
policy-agent/config/application.yaml
policy-agent/src/main/java/org/oransc/policyagent/clients/AsyncRestClient.java
policy-agent/src/main/java/org/oransc/policyagent/repository/Services.java

index 55a1d64..c0ddfb5 100644 (file)
@@ -9,7 +9,7 @@ management:
   endpoints:
     web:
       exposure:
-        include: "loggers,logfile,health,info,metrics,threaddump"
+        include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
 
 logging:
   level:
index 4a995c9..4ba58c7 100644 (file)
@@ -57,6 +57,7 @@ import org.springframework.web.reactive.function.client.WebClientResponseExcepti
 
 import reactor.core.publisher.Mono;
 import reactor.netty.http.client.HttpClient;
+import reactor.netty.resources.ConnectionProvider;
 import reactor.netty.tcp.TcpClient;
 
 /**
@@ -178,8 +179,9 @@ public class AsyncRestClient {
     }
 
     private Mono<ResponseEntity<String>> retrieve(Object traceTag, RequestHeadersSpec<?> request) {
+        final Class<String> clazz = String.class;
         return request.retrieve() //
-            .toEntity(String.class) //
+            .toEntity(clazz) //
             .doOnNext(entity -> logger.trace("{} Received: {}", traceTag, entity.getBody())) //
             .doOnError(throwable -> onHttpError(traceTag, throwable));
     }
@@ -263,9 +265,11 @@ public class AsyncRestClient {
     }
 
     private WebClient createWebClient(String baseUrl, SslContext sslContext) {
-        TcpClient tcpClient = TcpClient.create() //
+        ConnectionProvider connectionProvider = ConnectionProvider.newConnection();
+        TcpClient tcpClient = TcpClient.create(connectionProvider) //
             .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000) //
             .secure(c -> c.sslContext(sslContext)) //
+
             .doOnConnected(connection -> {
                 connection.addHandlerLast(new ReadTimeoutHandler(30));
                 connection.addHandlerLast(new WriteTimeoutHandler(30));
index f829c7c..1fd08a8 100644 (file)
@@ -47,6 +47,7 @@ public class Services {
 
     public synchronized void put(Service service) {
         logger.debug("Put service: {}", service.getName());
+        service.keepAlive();
         registeredServices.put(service.getName(), service);
     }