You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2021/04/15 15:36:42 UTC
[pulsar] branch master updated: Fix entry cache size update logic
so it won't go negative. (#10225)
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 7e83406 Fix entry cache size update logic so it won't go negative. (#10225)
7e83406 is described below
commit 7e8340663bbd75b120eefd1f47fe19e36351f6c8
Author: Marvin Cai <zx...@streamnative.io>
AuthorDate: Thu Apr 15 08:35:54 2021 -0700
Fix entry cache size update logic so it won't go negative. (#10225)
---
.../apache/bookkeeper/mledger/util/RangeCache.java | 5 +--
.../mledger/impl/EntryCacheManagerTest.java | 36 ++++++++++++++++++++--
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/util/RangeCache.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/util/RangeCache.java
index 042137a..a5786ad 100644
--- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/util/RangeCache.java
+++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/util/RangeCache.java
@@ -219,7 +219,7 @@ public class RangeCache<Key extends Comparable<Key>, Value extends ReferenceCoun
/**
* Remove all the entries from the cache.
*
- * @return the old size
+ * @return size of removed entries
*/
public synchronized long clear() {
long removedSize = 0;
@@ -235,7 +235,8 @@ public class RangeCache<Key extends Comparable<Key>, Value extends ReferenceCoun
}
entries.clear();
- return size.getAndAdd(-removedSize);
+ size.getAndAdd(-removedSize);
+ return removedSize;
}
/**
diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCacheManagerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCacheManagerTest.java
index c7572bd..d8cb3dc 100644
--- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCacheManagerTest.java
+++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCacheManagerTest.java
@@ -26,8 +26,9 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
-import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -40,7 +41,6 @@ import org.apache.bookkeeper.mledger.ManagedLedgerException;
import org.apache.bookkeeper.mledger.ManagedLedgerFactoryConfig;
import org.apache.bookkeeper.test.MockedBookKeeperTestCase;
import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class EntryCacheManagerTest extends MockedBookKeeperTestCase {
@@ -149,6 +149,38 @@ public class EntryCacheManagerTest extends MockedBookKeeperTestCase {
}
@Test
+ public void cacheSizeUpdate() throws Exception {
+ ManagedLedgerFactoryConfig config = new ManagedLedgerFactoryConfig();
+ config.setMaxCacheSize(200);
+ config.setCacheEvictionWatermark(0.8);
+
+ factory = new ManagedLedgerFactoryImpl(bkc, bkc.getZkHandle(), config);
+
+ EntryCacheManager cacheManager = factory.getEntryCacheManager();
+ EntryCache cache1 = cacheManager.getEntryCache(ml1);
+ List<EntryImpl> entries = new ArrayList<>();
+
+ // Put entries into cache.
+ for (int i = 0; i < 20; i++) {
+ entries.add(EntryImpl.create(1, i, new byte[i + 1]));
+ assertTrue(cache1.insert(entries.get(i)));
+ }
+ assertEquals(210, cacheManager.getSize());
+
+ // Consume some entries.
+ Random random = new Random();
+ for (int i = 0; i < 20; i++) {
+ if (random.nextBoolean()) {
+ (entries.get(i).getDataBuffer()).readBytes(new byte[entries.get(i).getDataBuffer().readableBytes()]);
+ }
+ }
+
+ cacheManager.removeEntryCache(ml1.getName());
+ assertTrue(cacheManager.getSize() > 0);
+ }
+
+
+ @Test
public void cacheDisabled() throws Exception {
ManagedLedgerFactoryConfig config = new ManagedLedgerFactoryConfig();
config.setMaxCacheSize(0);