From 45cb618a74ebd116670ee49aa2ed86dcf31bf684 Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Tue, 16 Apr 2024 10:21:17 +0800 Subject: [PATCH 01/11] AbstractCacheManager destroy fix #13615 Introduce disposable resource register mechanism. Follows "who creates, who destroys" rule. --- .../dubbo/metadata/AbstractCacheManager.java | 87 ++++++++++++------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index 33441157516..3d2d9eed0cb 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -26,11 +26,15 @@ import org.apache.dubbo.common.utils.LRUCache; import org.apache.dubbo.common.utils.NamedThreadFactory; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT; @@ -44,6 +48,7 @@ public abstract class AbstractCacheManager implements Disposable { protected FileCacheStore cacheStore; protected LRUCache cache; + private List disposableResources = new ArrayList(); protected void init( boolean enableFileCache, @@ -68,23 +73,50 @@ protected void init( this.cache.put(key, toValueType(value)); } // executorService can be empty if FileCacheStore fails - if (executorService == null) { - this.executorService = Executors.newSingleThreadScheduledExecutor( - new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); - } else { - this.executorService = executorService; - } - - this.executorService.scheduleWithFixedDelay( - new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), - 10, - interval, - TimeUnit.MINUTES); + boolean usingExternalExecutorService = false; + if (executorService == null) { + this.executorService = Executors.newSingleThreadScheduledExecutor( + new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); + registerDisposable(newExecutorDisposer(executorService)); + } else { + this.executorService = executorService; + usingExternalExecutorService = true; + } + + final ScheduledFuture newFuture = this.executorService.scheduleWithFixedDelay( + new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), 10, interval, + TimeUnit.MINUTES); + + if (usingExternalExecutorService) { + registerDisposable(() -> { + newFuture.cancel(true); + }); + } } catch (Exception e) { logger.error(COMMON_FAILED_LOAD_MAPPING_CACHE, "", "", "Load mapping from local cache file error ", e); } } + protected void registerDisposable(Disposable resource) { + this.disposableResources.add(resource); + } + + private Disposable newExecutorDisposer(final ExecutorService executor) { + return () -> { + // Try to destroy self-created executorService instance. + executor.shutdownNow(); + try { + if (!executor.awaitTermination(ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), + TimeUnit.MILLISECONDS)) { + logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", + "Wait global executor service terminated timeout."); + } + } catch (InterruptedException e) { + logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "destroy resources failed: " + e.getMessage(), e); + } + }; + } + protected abstract V toValueType(String value); protected abstract String getName(); @@ -124,26 +156,17 @@ public void update(Map newCache) { } } - public void destroy() { - if (executorService != null) { - executorService.shutdownNow(); - try { - if (!executorService.awaitTermination( - ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), TimeUnit.MILLISECONDS)) { - logger.warn( - COMMON_UNEXPECTED_EXCEPTION, "", "", "Wait global executor service terminated timeout."); - } - } catch (InterruptedException e) { - logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "destroy resources failed: " + e.getMessage(), e); - } - } - if (cacheStore != null) { - cacheStore.destroy(); - } - if (cache != null) { - cache.clear(); - } - } + @Override + public void destroy() { + // destroy in FILO order. + Disposable[] elements = this.disposableResources.toArray(new Disposable[0]); + for (int i = elements.length - 1; i >= 0; i--) { + elements[i].destroy(); + } + this.disposableResources.clear(); + + this.executorService = null; + } public static class CacheRefreshTask implements Runnable { private final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(getClass()); From f561a26f75feb9d92195d3973e78986403e8b03c Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Tue, 16 Apr 2024 10:39:56 +0800 Subject: [PATCH 02/11] code format change. --- .../dubbo/metadata/AbstractCacheManager.java | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index 3d2d9eed0cb..a00e3ab258f 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -48,7 +48,7 @@ public abstract class AbstractCacheManager implements Disposable { protected FileCacheStore cacheStore; protected LRUCache cache; - private List disposableResources = new ArrayList(); + private List disposableResources = new ArrayList(); protected void init( boolean enableFileCache, @@ -73,49 +73,49 @@ protected void init( this.cache.put(key, toValueType(value)); } // executorService can be empty if FileCacheStore fails - boolean usingExternalExecutorService = false; - if (executorService == null) { - this.executorService = Executors.newSingleThreadScheduledExecutor( - new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); - registerDisposable(newExecutorDisposer(executorService)); - } else { - this.executorService = executorService; - usingExternalExecutorService = true; - } - - final ScheduledFuture newFuture = this.executorService.scheduleWithFixedDelay( - new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), 10, interval, - TimeUnit.MINUTES); - - if (usingExternalExecutorService) { - registerDisposable(() -> { - newFuture.cancel(true); - }); - } + boolean usingExternalExecutorService = false; + if (executorService == null) { + this.executorService = Executors.newSingleThreadScheduledExecutor( + new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); + registerDisposable(newExecutorDisposer(executorService)); + } else { + this.executorService = executorService; + usingExternalExecutorService = true; + } + + final ScheduledFuture newFuture = this.executorService.scheduleWithFixedDelay( + new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), 10, interval, + TimeUnit.MINUTES); + + if (usingExternalExecutorService) { + registerDisposable(() -> { + newFuture.cancel(true); + }); + } } catch (Exception e) { logger.error(COMMON_FAILED_LOAD_MAPPING_CACHE, "", "", "Load mapping from local cache file error ", e); } } - protected void registerDisposable(Disposable resource) { - this.disposableResources.add(resource); - } + protected void registerDisposable(Disposable resource) { + this.disposableResources.add(resource); + } - private Disposable newExecutorDisposer(final ExecutorService executor) { - return () -> { - // Try to destroy self-created executorService instance. - executor.shutdownNow(); - try { - if (!executor.awaitTermination(ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), - TimeUnit.MILLISECONDS)) { - logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", - "Wait global executor service terminated timeout."); - } - } catch (InterruptedException e) { - logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "destroy resources failed: " + e.getMessage(), e); - } - }; - } + private Disposable newExecutorDisposer(final ExecutorService executor) { + return () -> { + // Try to destroy self-created executorService instance. + executor.shutdownNow(); + try { + if (!executor.awaitTermination(ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), + TimeUnit.MILLISECONDS)) { + logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", + "Wait global executor service terminated timeout."); + } + } catch (InterruptedException e) { + logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "destroy resources failed: " + e.getMessage(), e); + } + }; + } protected abstract V toValueType(String value); @@ -156,17 +156,17 @@ public void update(Map newCache) { } } - @Override - public void destroy() { - // destroy in FILO order. - Disposable[] elements = this.disposableResources.toArray(new Disposable[0]); - for (int i = elements.length - 1; i >= 0; i--) { - elements[i].destroy(); - } - this.disposableResources.clear(); - - this.executorService = null; - } + @Override + public void destroy() { + // destroy in FILO order. + Disposable[] elements = this.disposableResources.toArray(new Disposable[0]); + for (int i = elements.length - 1; i >= 0; i--) { + elements[i].destroy(); + } + this.disposableResources.clear(); + + this.executorService = null; + } public static class CacheRefreshTask implements Runnable { private final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(getClass()); From bda262dca1932fe2d10278b238fe8e8d6344c48b Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Tue, 16 Apr 2024 10:47:49 +0800 Subject: [PATCH 03/11] spotless:apply --- .../dubbo/metadata/AbstractCacheManager.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index a00e3ab258f..de53535bc20 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -84,7 +84,9 @@ protected void init( } final ScheduledFuture newFuture = this.executorService.scheduleWithFixedDelay( - new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), 10, interval, + new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), + 10, + interval, TimeUnit.MINUTES); if (usingExternalExecutorService) { @@ -100,23 +102,23 @@ protected void init( protected void registerDisposable(Disposable resource) { this.disposableResources.add(resource); } - + private Disposable newExecutorDisposer(final ExecutorService executor) { return () -> { // Try to destroy self-created executorService instance. executor.shutdownNow(); try { - if (!executor.awaitTermination(ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), - TimeUnit.MILLISECONDS)) { - logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", - "Wait global executor service terminated timeout."); + if (!executor.awaitTermination( + ConfigurationUtils.reCalShutdownTime(DEFAULT_SERVER_SHUTDOWN_TIMEOUT), TimeUnit.MILLISECONDS)) { + logger.warn( + COMMON_UNEXPECTED_EXCEPTION, "", "", "Wait global executor service terminated timeout."); } } catch (InterruptedException e) { logger.warn(COMMON_UNEXPECTED_EXCEPTION, "", "", "destroy resources failed: " + e.getMessage(), e); } }; } - + protected abstract V toValueType(String value); protected abstract String getName(); From 2c9c530c2d9684231d1a2a70c2819d5b589d52e9 Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Tue, 16 Apr 2024 16:17:27 +0800 Subject: [PATCH 04/11] Fix NPE --- .../java/org/apache/dubbo/metadata/AbstractCacheManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index de53535bc20..720a775d2cc 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -22,6 +22,7 @@ import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.resource.Disposable; +import org.apache.dubbo.common.utils.Assert; import org.apache.dubbo.common.utils.JsonUtils; import org.apache.dubbo.common.utils.LRUCache; import org.apache.dubbo.common.utils.NamedThreadFactory; @@ -77,7 +78,7 @@ protected void init( if (executorService == null) { this.executorService = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); - registerDisposable(newExecutorDisposer(executorService)); + registerDisposable(newExecutorDisposer(this.executorService)); } else { this.executorService = executorService; usingExternalExecutorService = true; @@ -104,6 +105,7 @@ protected void registerDisposable(Disposable resource) { } private Disposable newExecutorDisposer(final ExecutorService executor) { + Assert.notNull(executor, "ExecutorService can not be null"); return () -> { // Try to destroy self-created executorService instance. executor.shutdownNow(); From 5c84ba494724f1e9281f12d83f162e0b3de5b83b Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Wed, 17 Apr 2024 09:36:53 +0800 Subject: [PATCH 05/11] add cache and cachestore destroy. --- .../dubbo/metadata/AbstractCacheManager.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index 720a775d2cc..3da74013e89 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -60,9 +60,16 @@ protected void init( int interval, ScheduledExecutorService executorService) { this.cache = new LRUCache<>(entrySize); - + registerDisposable(() -> { + this.cache.clear(); + }); + try { cacheStore = FileCacheStoreFactory.getInstance(filePath, fileName, enableFileCache); + registerDisposable(() -> { + cacheStore.destroy(); + }); + Map properties = cacheStore.loadCache(entrySize); if (logger.isDebugEnabled()) { logger.debug("Successfully loaded " + getName() + " cache from file " + fileName + ", entries " @@ -163,12 +170,14 @@ public void update(Map newCache) { @Override public void destroy() { // destroy in FILO order. - Disposable[] elements = this.disposableResources.toArray(new Disposable[0]); + Disposable[] elements = this.disposableResources + .toArray(new Disposable[0]); + for (int i = elements.length - 1; i >= 0; i--) { elements[i].destroy(); } this.disposableResources.clear(); - + this.executorService = null; } From 07c7b504e2f1a49a11203b40e6aa233c7afd2eaf Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Wed, 17 Apr 2024 09:38:46 +0800 Subject: [PATCH 06/11] add Eclipse IDE specific conf. gen by mvn eclipse:eclipse --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b504f334b40..a3061c17008 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ target/ .settings/ .project .classpath +.externalToolBuilders +maven-eclipse.xml # idea ignore .idea/ From 67e6ffffe5c57bd60a9ffcdaf8e0dba779f9c916 Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Wed, 17 Apr 2024 10:12:03 +0800 Subject: [PATCH 07/11] code format: via spotless --- .../apache/dubbo/metadata/AbstractCacheManager.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index 3da74013e89..d06554dc40f 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -63,13 +63,13 @@ protected void init( registerDisposable(() -> { this.cache.clear(); }); - + try { cacheStore = FileCacheStoreFactory.getInstance(filePath, fileName, enableFileCache); registerDisposable(() -> { cacheStore.destroy(); }); - + Map properties = cacheStore.loadCache(entrySize); if (logger.isDebugEnabled()) { logger.debug("Successfully loaded " + getName() + " cache from file " + fileName + ", entries " @@ -170,14 +170,13 @@ public void update(Map newCache) { @Override public void destroy() { // destroy in FILO order. - Disposable[] elements = this.disposableResources - .toArray(new Disposable[0]); - + Disposable[] elements = this.disposableResources.toArray(new Disposable[0]); + for (int i = elements.length - 1; i >= 0; i--) { elements[i].destroy(); } this.disposableResources.clear(); - + this.executorService = null; } From f41c8b500dd783c334469ad3021dfa52d96cff3e Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Wed, 17 Apr 2024 12:29:35 +0800 Subject: [PATCH 08/11] Code smell enhancement. --- .../dubbo/metadata/AbstractCacheManager.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index d06554dc40f..2a61bb9dae6 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -49,7 +49,7 @@ public abstract class AbstractCacheManager implements Disposable { protected FileCacheStore cacheStore; protected LRUCache cache; - private List disposableResources = new ArrayList(); + private List disposableResources = new ArrayList<>(); protected void init( boolean enableFileCache, @@ -60,15 +60,11 @@ protected void init( int interval, ScheduledExecutorService executorService) { this.cache = new LRUCache<>(entrySize); - registerDisposable(() -> { - this.cache.clear(); - }); + registerDisposable(() -> this.cache.clear()); try { cacheStore = FileCacheStoreFactory.getInstance(filePath, fileName, enableFileCache); - registerDisposable(() -> { - cacheStore.destroy(); - }); + registerDisposable(() -> cacheStore.destroy()); Map properties = cacheStore.loadCache(entrySize); if (logger.isDebugEnabled()) { @@ -98,9 +94,7 @@ protected void init( TimeUnit.MINUTES); if (usingExternalExecutorService) { - registerDisposable(() -> { - newFuture.cancel(true); - }); + registerDisposable(() -> newFuture.cancel(true)); } } catch (Exception e) { logger.error(COMMON_FAILED_LOAD_MAPPING_CACHE, "", "", "Load mapping from local cache file error ", e); From 0ef3c2061dce37013d72f43468d390d7a87f749e Mon Sep 17 00:00:00 2001 From: Chen Jipeng Date: Fri, 19 Apr 2024 16:41:57 +0800 Subject: [PATCH 09/11] Update AbstractCacheManager.java Remove unused instance variable "executorService". --- .../dubbo/metadata/AbstractCacheManager.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java index 2a61bb9dae6..9ca58cbe779 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/AbstractCacheManager.java @@ -45,8 +45,6 @@ public abstract class AbstractCacheManager implements Disposable { protected final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(getClass()); - private ScheduledExecutorService executorService; - protected FileCacheStore cacheStore; protected LRUCache cache; private List disposableResources = new ArrayList<>(); @@ -77,25 +75,20 @@ protected void init( this.cache.put(key, toValueType(value)); } // executorService can be empty if FileCacheStore fails - boolean usingExternalExecutorService = false; if (executorService == null) { - this.executorService = Executors.newSingleThreadScheduledExecutor( + executorService = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("Dubbo-cache-refreshing-scheduler", true)); - registerDisposable(newExecutorDisposer(this.executorService)); - } else { - this.executorService = executorService; - usingExternalExecutorService = true; + registerDisposable(newExecutorDisposer(executorService)); } - final ScheduledFuture newFuture = this.executorService.scheduleWithFixedDelay( + final ScheduledFuture newFuture = executorService.scheduleWithFixedDelay( new CacheRefreshTask<>(this.cacheStore, this.cache, this, fileSize), 10, interval, TimeUnit.MINUTES); - if (usingExternalExecutorService) { - registerDisposable(() -> newFuture.cancel(true)); - } + registerDisposable(() -> newFuture.cancel(true)); + } catch (Exception e) { logger.error(COMMON_FAILED_LOAD_MAPPING_CACHE, "", "", "Load mapping from local cache file error ", e); } @@ -170,8 +163,6 @@ public void destroy() { elements[i].destroy(); } this.disposableResources.clear(); - - this.executorService = null; } public static class CacheRefreshTask implements Runnable { From be81d446c192849fc99675bdc2751700895e72e8 Mon Sep 17 00:00:00 2001 From: Chenjp Date: Wed, 24 Apr 2024 19:42:40 +0800 Subject: [PATCH 10/11] Revert "Merge branch '3.2' into 3.2-fix-disposable-issue-13615" This reverts commit 5cc8776273978cabc13318a5d3de3f04789c49af, reversing changes made to 0ef3c2061dce37013d72f43468d390d7a87f749e. --- .../apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java index e093e748c56..0aaca484910 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java @@ -461,7 +461,6 @@ public void onData(ByteBuf data, boolean endStream) { private void doOnData(ByteBuf data, boolean endStream) { if (deframer == null) { - ReferenceCountUtil.release(data); return; } deframer.deframe(data); From 4d2a0ad68041d0fa400ed7d608ebc73497f50db9 Mon Sep 17 00:00:00 2001 From: Chenjp Date: Wed, 24 Apr 2024 19:46:36 +0800 Subject: [PATCH 11/11] Revert "Revert "Merge branch '3.2' into 3.2-fix-disposable-issue-13615"" This reverts commit be81d446c192849fc99675bdc2751700895e72e8. --- .../apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java index 0aaca484910..e093e748c56 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/TripleServerStream.java @@ -461,6 +461,7 @@ public void onData(ByteBuf data, boolean endStream) { private void doOnData(ByteBuf data, boolean endStream) { if (deframer == null) { + ReferenceCountUtil.release(data); return; } deframer.deframe(data);