From 162863020ded7fdd85f9d51bf69486e0d0e1d1c7 Mon Sep 17 00:00:00 2001 From: Ignacio Lozano Date: Mon, 27 Mar 2023 18:04:16 +0200 Subject: [PATCH] Remove duplicated DataBuffer that caused leak alert by LocalResponseCache (#2886) Having `response.bufferFactory().wrap(byteBuffer)` left the original DataBuffer without calling internally the `release()` method, which also decrease the counter of the incoming references to the object by Netty memory leak control. This copy is not necessary and it was making Netty losing the object, causing memory Leak alert [connected #2879] --- .../gateway/filter/factory/cache/ResponseCacheManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java index 5b6ce13b..4ad1a82d 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/cache/ResponseCacheManager.java @@ -98,7 +98,7 @@ public class ResponseCacheManager { return body.map(dataBuffer -> { ByteBuffer byteBuffer = dataBuffer.toByteBuffer().asReadOnlyBuffer(); cachedResponseBuilder.appendToBody(byteBuffer); - return response.bufferFactory().wrap(byteBuffer); + return dataBuffer; }).doOnComplete(() -> { CachedResponse responseToCache = cachedResponseBuilder.timestamp(toProcess.timestamp()).build(); saveMetadataInCache(metadataKey, metadata);