From 4c42e52610a0bcd33e427025513539f31465a513 Mon Sep 17 00:00:00 2001 From: emeroad Date: Tue, 21 Jun 2022 19:32:58 +0900 Subject: [PATCH] [#8952] Replace guava cache with caffeine cache --- .../bootstrap/classloader/ProfilerLibs.java | 2 +- .../pinpoint/test/MockApiMetaDataService.java | 7 +-- profiler/pom.xml | 4 ++ .../pinpoint/profiler/cache/IdAllocator.java | 49 +++++++++++++++++ .../{metadata => cache}/LRUCache.java | 10 ++-- .../profiler/{metadata => cache}/Result.java | 2 +- .../{metadata => cache}/SimpleCache.java | 52 +++++-------------- .../active/DefaultActiveTraceRepository.java | 8 ++- .../metadata/ApiMetaDataServiceProvider.java | 2 +- .../provider/metadata/SimpleCacheFactory.java | 28 +++++++--- .../metadata/SimpleCacheFactoryProvider.java | 12 ++--- .../metadata/SqlMetadataServiceProvider.java | 2 +- .../StringMetadataServiceProvider.java | 2 +- .../transformer/DefaultHierarchyCaches.java | 51 ++++++++---------- .../metadata/DefaultApiMetaDataService.java | 3 ++ .../metadata/DefaultCachingSqlNormalizer.java | 2 + .../metadata/DefaultSqlMetaDataService.java | 2 + .../DefaultStringMetaDataService.java | 3 ++ .../{metadata => cache}/LRUCacheTest.java | 19 +++---- .../{metadata => cache}/SimpleCacheTest.java | 11 ++-- .../DefaultApiMetaDataServiceTest.java | 4 +- .../DefaultCachingSqlNormalizerTest.java | 4 +- .../DefaultSqlMetaDataServiceTest.java | 4 +- .../DefaultStringMetaDataServiceTest.java | 4 +- .../profiler/util/GuavaCacheTest.java | 46 ---------------- 25 files changed, 166 insertions(+), 167 deletions(-) create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/IdAllocator.java rename profiler/src/main/java/com/navercorp/pinpoint/profiler/{metadata => cache}/LRUCache.java (84%) rename profiler/src/main/java/com/navercorp/pinpoint/profiler/{metadata => cache}/Result.java (94%) rename profiler/src/main/java/com/navercorp/pinpoint/profiler/{metadata => cache}/SimpleCache.java (52%) rename profiler/src/test/java/com/navercorp/pinpoint/profiler/{metadata => cache}/LRUCacheTest.java (79%) rename profiler/src/test/java/com/navercorp/pinpoint/profiler/{metadata => cache}/SimpleCacheTest.java (79%) delete mode 100644 profiler/src/test/java/com/navercorp/pinpoint/profiler/util/GuavaCacheTest.java diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibs.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibs.java index d324c21b91da..0d9aa7992053 100644 --- a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibs.java +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/ProfilerLibs.java @@ -53,7 +53,7 @@ public class ProfilerLibs { "com.google.rpc", "com.google.type", - + "com.github.benmanes.caffeine", "org.objectweb.asm", "org.slf4j", "org.apache.thrift", diff --git a/profiler-test/src/main/java/com/navercorp/pinpoint/test/MockApiMetaDataService.java b/profiler-test/src/main/java/com/navercorp/pinpoint/test/MockApiMetaDataService.java index 7ebff7c80529..7bbeb121705d 100644 --- a/profiler-test/src/main/java/com/navercorp/pinpoint/test/MockApiMetaDataService.java +++ b/profiler-test/src/main/java/com/navercorp/pinpoint/test/MockApiMetaDataService.java @@ -20,8 +20,9 @@ import com.navercorp.pinpoint.profiler.metadata.ApiMetaData; import com.navercorp.pinpoint.profiler.metadata.ApiMetaDataService; import com.navercorp.pinpoint.profiler.metadata.MetaDataType; -import com.navercorp.pinpoint.profiler.metadata.Result; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.Result; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import java.util.Objects; @@ -31,7 +32,7 @@ */ public class MockApiMetaDataService implements ApiMetaDataService { - private final SimpleCache apiCache = new SimpleCache<>(new SimpleCache.ZigZagTransformer()); + private final SimpleCache apiCache = new SimpleCache<>(new IdAllocator.ZigZagAllocator()); private final EnhancedDataSender enhancedDataSender; diff --git a/profiler/pom.xml b/profiler/pom.xml index 8efc0f665516..0619e1ccd23c 100644 --- a/profiler/pom.xml +++ b/profiler/pom.xml @@ -94,6 +94,10 @@ 4.1.0 test + + com.github.ben-manes.caffeine + caffeine + diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/IdAllocator.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/IdAllocator.java new file mode 100644 index 000000000000..be73d64df7ce --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/IdAllocator.java @@ -0,0 +1,49 @@ +package com.navercorp.pinpoint.profiler.cache; + +import com.navercorp.pinpoint.common.util.BytesUtils; + +import java.util.concurrent.atomic.AtomicInteger; + +public interface IdAllocator { + int allocate(); + + enum ID_TYPE { + BYPASS, ZIGZAG; + } + + class ZigZagAllocator implements IdAllocator { + private final AtomicInteger idGen; + + public ZigZagAllocator() { + this(1); + } + + public ZigZagAllocator(int startValue) { + this.idGen = new AtomicInteger(startValue); + } + + @Override + public int allocate() { + int id = this.idGen.getAndIncrement(); + return BytesUtils.zigzagToInt(id); + } + } + + class BypassAllocator implements IdAllocator { + private final AtomicInteger idGen; + + public BypassAllocator() { + this(1); + } + + public BypassAllocator(int startValue) { + this.idGen = new AtomicInteger(startValue); + } + + @Override + public int allocate() { + return this.idGen.getAndIncrement(); + } + } + +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/LRUCache.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/LRUCache.java similarity index 84% rename from profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/LRUCache.java rename to profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/LRUCache.java index 3a02d1734092..5bbf5ed8d0bf 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/LRUCache.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/LRUCache.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.navercorp.pinpoint.profiler.metadata; +package com.navercorp.pinpoint.profiler.cache; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import java.util.concurrent.ConcurrentMap; @@ -35,8 +35,7 @@ public class LRUCache { public LRUCache(int maxCacheSize) { - final CacheBuilder cacheBuilder = CacheBuilder.newBuilder(); - cacheBuilder.concurrencyLevel(32); + final Caffeine cacheBuilder = Caffeine.newBuilder(); cacheBuilder.initialCapacity(maxCacheSize); cacheBuilder.maximumSize(maxCacheSize); Cache localCache = cacheBuilder.build(); @@ -49,7 +48,6 @@ public LRUCache() { public boolean put(T value) { - Object oldValue = cache.putIfAbsent(value, V); return oldValue == null; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/Result.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/Result.java similarity index 94% rename from profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/Result.java rename to profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/Result.java index 12022e5afb08..9f79bf56a04d 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/Result.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/Result.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.navercorp.pinpoint.profiler.metadata; +package com.navercorp.pinpoint.profiler.cache; /** * @author emeroad diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/SimpleCache.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/SimpleCache.java similarity index 52% rename from profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/SimpleCache.java rename to profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/SimpleCache.java index 568dd3bf0a83..e1d1e74f0372 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/SimpleCache.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/cache/SimpleCache.java @@ -14,15 +14,13 @@ * limitations under the License. */ -package com.navercorp.pinpoint.profiler.metadata; +package com.navercorp.pinpoint.profiler.cache; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import java.util.Objects; -import com.navercorp.pinpoint.common.util.BytesUtils; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import java.util.Objects; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicInteger; /** * @author emeroad @@ -30,33 +28,24 @@ public class SimpleCache { // zero means not exist. - private final AtomicInteger idGen; private final ConcurrentMap cache; - private final IdTransformer idTransformer; - - public SimpleCache(IdTransformer idTransformer) { - this(idTransformer, 1024, 1); - } + private final IdAllocator idAllocator; - public SimpleCache(IdTransformer idTransformer, int cacheSize) { - this(idTransformer, cacheSize, 1); + public SimpleCache(IdAllocator idAllocator) { + this(idAllocator, 1024); } - - public SimpleCache(IdTransformer idTransformer, int cacheSize, int startValue) { - this.idGen = new AtomicInteger(startValue); + public SimpleCache(IdAllocator idAllocator, int cacheSize) { this.cache = createCache(cacheSize); - this.idTransformer = Objects.requireNonNull(idTransformer, "idTransformer"); + this.idAllocator = Objects.requireNonNull(idAllocator, "idTransformer"); } private ConcurrentMap createCache(int maxCacheSize) { - final CacheBuilder cacheBuilder = CacheBuilder.newBuilder(); - cacheBuilder.concurrencyLevel(64); + final Caffeine cacheBuilder = Caffeine.newBuilder(); cacheBuilder.initialCapacity(maxCacheSize); cacheBuilder.maximumSize(maxCacheSize); Cache localCache = cacheBuilder.build(); - ConcurrentMap cache = localCache.asMap(); - return cache; + return localCache.asMap(); } public Result put(T value) { @@ -76,27 +65,10 @@ public Result put(T value) { } private int nextId() { - int nextId = idGen.getAndIncrement(); - return this.idTransformer.transform(nextId); + return this.idAllocator.allocate(); } - public interface IdTransformer { - int transform(int id); - } - public static class ZigZagTransformer implements IdTransformer { - @Override - public int transform(int id) { - return BytesUtils.zigzagToInt(id); - } - } - - public static class BypassTransformer implements IdTransformer { - @Override - public int transform(int id) { - return id; - } - } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/active/DefaultActiveTraceRepository.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/active/DefaultActiveTraceRepository.java index 2d86e0006d6b..cb41a3913935 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/active/DefaultActiveTraceRepository.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/active/DefaultActiveTraceRepository.java @@ -15,9 +15,8 @@ */ package com.navercorp.pinpoint.profiler.context.active; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import com.navercorp.pinpoint.common.trace.BaseHistogramSchema; import com.navercorp.pinpoint.common.trace.HistogramSchema; import com.navercorp.pinpoint.common.trace.HistogramSlot; @@ -62,8 +61,7 @@ public DefaultActiveTraceRepository(ResponseTimeCollector responseTimeCollector, } private ConcurrentMap createCache(int maxActiveTraceSize) { - final CacheBuilder cacheBuilder = CacheBuilder.newBuilder(); - cacheBuilder.concurrencyLevel(64); + final Caffeine cacheBuilder = Caffeine.newBuilder(); cacheBuilder.initialCapacity(maxActiveTraceSize); cacheBuilder.maximumSize(maxActiveTraceSize); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/ApiMetaDataServiceProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/ApiMetaDataServiceProvider.java index 5295e4ab655d..6f9b362cdf4d 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/ApiMetaDataServiceProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/ApiMetaDataServiceProvider.java @@ -22,7 +22,7 @@ import com.navercorp.pinpoint.profiler.metadata.ApiMetaDataService; import com.navercorp.pinpoint.profiler.metadata.DefaultApiMetaDataService; import com.navercorp.pinpoint.profiler.metadata.MetaDataType; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import java.util.Objects; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactory.java index 22fab4eb7684..a8667e1418fe 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactory.java @@ -16,7 +16,8 @@ package com.navercorp.pinpoint.profiler.context.provider.metadata; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import java.util.Objects; @@ -25,17 +26,30 @@ */ public class SimpleCacheFactory { - private final SimpleCache.IdTransformer idTransformer; + private final IdAllocator.ID_TYPE type; - public SimpleCacheFactory(SimpleCache.IdTransformer idTransformer) { - this.idTransformer = Objects.requireNonNull(idTransformer, "idTransformer"); + public SimpleCacheFactory(IdAllocator.ID_TYPE type) { + this.type = Objects.requireNonNull(type, "type"); } public SimpleCache newSimpleCache() { - return new SimpleCache(idTransformer); + IdAllocator idAllocator = newIdAllocator(type, 1); + return new SimpleCache<>(idAllocator); } - public SimpleCache newSimpleCache(int size ) { - return new SimpleCache(idTransformer, size); + public SimpleCache newSimpleCache(int size) { + IdAllocator idAllocator = newIdAllocator(type, size); + return new SimpleCache<>(idAllocator, size); + } + + private IdAllocator newIdAllocator(IdAllocator.ID_TYPE type, int size) { + switch (type) { + case BYPASS: + return new IdAllocator.BypassAllocator(size); + case ZIGZAG: + return new IdAllocator.ZigZagAllocator(size); + } + throw new RuntimeException("Unknown SimpleCache.ID_TYPE:" + type); } } + diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactoryProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactoryProvider.java index 2ba483189ece..2b3f771e618e 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactoryProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SimpleCacheFactoryProvider.java @@ -19,28 +19,28 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.navercorp.pinpoint.bootstrap.config.TransportModule; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; /** * @author Woonduk Kang(emeroad) */ public class SimpleCacheFactoryProvider implements Provider { - private final SimpleCache.IdTransformer idTransformer; + private final IdAllocator.ID_TYPE type; @Inject public SimpleCacheFactoryProvider(TransportModule transportModule) { if (TransportModule.THRIFT == transportModule) { - this.idTransformer = new SimpleCache.ZigZagTransformer(); + this.type = IdAllocator.ID_TYPE.ZIGZAG; } else if (TransportModule.GRPC == transportModule) { - this.idTransformer = new SimpleCache.BypassTransformer(); + this.type = IdAllocator.ID_TYPE.BYPASS; } else { - throw new IllegalStateException("unsupported transportModule:" + transportModule); + throw new IllegalStateException("Unsupported transportModule:" + transportModule); } } @Override public SimpleCacheFactory get() { - return new SimpleCacheFactory(idTransformer); + return new SimpleCacheFactory(type); } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SqlMetadataServiceProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SqlMetadataServiceProvider.java index 5b5126adcf52..e5714e382710 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SqlMetadataServiceProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/SqlMetadataServiceProvider.java @@ -21,7 +21,7 @@ import com.navercorp.pinpoint.profiler.context.module.MetadataDataSender; import com.navercorp.pinpoint.profiler.metadata.DefaultSqlMetaDataService; import com.navercorp.pinpoint.profiler.metadata.MetaDataType; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/StringMetadataServiceProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/StringMetadataServiceProvider.java index 2640d4d7d807..888148c7faef 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/StringMetadataServiceProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/metadata/StringMetadataServiceProvider.java @@ -20,7 +20,7 @@ import com.navercorp.pinpoint.profiler.context.module.MetadataDataSender; import com.navercorp.pinpoint.profiler.metadata.DefaultStringMetaDataService; import com.navercorp.pinpoint.profiler.metadata.MetaDataType; -import com.navercorp.pinpoint.profiler.metadata.SimpleCache; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/transformer/DefaultHierarchyCaches.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/transformer/DefaultHierarchyCaches.java index b684d003f81f..acc151cbf7db 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/transformer/DefaultHierarchyCaches.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/transformer/DefaultHierarchyCaches.java @@ -15,10 +15,10 @@ */ package com.navercorp.pinpoint.profiler.instrument.transformer; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.LoadingCache; + import java.util.concurrent.ExecutionException; @@ -41,16 +41,14 @@ public DefaultHierarchyCaches(final int size, final int entrySize) { this.cacheEntrySize = getCacheEntrySize(entrySize); - this.caches = CacheBuilder.newBuilder() + this.caches = Caffeine.newBuilder() .maximumSize(this.cacheSize) .initialCapacity(this.cacheSize) - .concurrencyLevel(4) - .build(new CacheLoader() { - @Override - public Hierarchy load(String s) throws Exception { - return new Hierarchy(); - } - }); + .build(this::loadEntry); + } + + private Hierarchy loadEntry(String key) { + return new Hierarchy(); } private int getCacheEntrySize(int entrySize) { @@ -72,20 +70,15 @@ private int getCacheSize(int size) { @Override public boolean get(String key, String classInternalName) { - try { - return this.caches.get(key).cache.getIfPresent(classInternalName) != null; - } catch (ExecutionException ignored) { - } - return false; + Hierarchy hierarchy = this.caches.get(key); + return hierarchy.cache.getIfPresent(classInternalName) != null; } @Override public void put(String key, String classInternalName) { - try { - this.caches.get(key).cache.put(classInternalName, Boolean.TRUE); - } catch (ExecutionException ignored) { - } + Hierarchy hierarchy = this.caches.get(key); + hierarchy.cache.put(classInternalName, Boolean.TRUE); } @Override @@ -101,7 +94,10 @@ class Hierarchy { Cache cache; public Hierarchy() { - cache = CacheBuilder.newBuilder().maximumSize(cacheEntrySize).initialCapacity(cacheEntrySize).concurrencyLevel(4).build(); + cache = Caffeine.newBuilder() + .maximumSize(cacheEntrySize) + .initialCapacity(cacheEntrySize) + .build(); } @Override @@ -112,12 +108,9 @@ public String toString() { @Override public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("{"); - sb.append("caches=").append(caches.asMap()).append(", "); - sb.append("size=").append(caches.size()).append(", "); - sb.append("stats=").append(caches.stats()); - sb.append("}"); - return sb.toString(); + String sb = "{" + + "stats=" + caches.stats() + + "}"; + return sb; } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataService.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataService.java index 39f2117a307a..1442c9893a4c 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataService.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataService.java @@ -18,6 +18,9 @@ import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor; import java.util.Objects; + +import com.navercorp.pinpoint.profiler.cache.Result; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; /** diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizer.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizer.java index 0551e9caf052..ff5013962c4a 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizer.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizer.java @@ -21,6 +21,8 @@ import com.navercorp.pinpoint.common.profiler.sql.DefaultSqlParser; import com.navercorp.pinpoint.common.profiler.sql.NormalizedSql; import com.navercorp.pinpoint.common.profiler.sql.SqlParser; +import com.navercorp.pinpoint.profiler.cache.Result; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataService.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataService.java index a196b320a233..edd938500ba8 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataService.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataService.java @@ -18,6 +18,8 @@ import com.navercorp.pinpoint.bootstrap.context.ParsingResult; import java.util.Objects; + +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataService.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataService.java index 6f0df97c12fd..28616d65ddc0 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataService.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataService.java @@ -17,6 +17,9 @@ package com.navercorp.pinpoint.profiler.metadata; import java.util.Objects; + +import com.navercorp.pinpoint.profiler.cache.Result; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; /** diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/LRUCacheTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/LRUCacheTest.java similarity index 79% rename from profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/LRUCacheTest.java rename to profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/LRUCacheTest.java index 117212630fe5..f187ffb1e9fa 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/LRUCacheTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/LRUCacheTest.java @@ -14,15 +14,17 @@ * limitations under the License. */ -package com.navercorp.pinpoint.profiler.metadata; +package com.navercorp.pinpoint.profiler.cache; +import org.awaitility.Awaitility; +import org.awaitility.core.ConditionFactory; import org.junit.Assert; - import org.junit.Test; - import java.util.Random; +import static org.hamcrest.Matchers.is; + /** * @author emeroad */ @@ -35,10 +37,8 @@ public void testPut() { for (int i = 0; i < 1000; i++) { cache.put(String.valueOf(random.nextInt(100000))); } - - long size = cache.getSize(); - Assert.assertEquals(size, cacheSize); - + ConditionFactory await = Awaitility.await(); + await.until(cache::getSize, is(cacheSize)); } @Test @@ -54,15 +54,16 @@ public void testGetSize() { boolean hit2 = cache.put(sqlObject); Assert.assertFalse(hit2); - Assert.assertEquals(cache.getSize(), 1); + ConditionFactory await = Awaitility.await(); + await.until(cache::getSize, is(1L)); // "23 123"; // "DCArMlhwQO 7" cache.put("23 123"); cache.put("DCArMlhwQO 7"); cache.put("3"); cache.put("4"); - Assert.assertEquals(cache.getSize(), 2); + await.until(cache::getSize, is(2L)); } } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/SimpleCacheTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/SimpleCacheTest.java similarity index 79% rename from profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/SimpleCacheTest.java rename to profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/SimpleCacheTest.java index 8ce16f6c3092..07530d867e08 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/SimpleCacheTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/cache/SimpleCacheTest.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package com.navercorp.pinpoint.profiler.metadata; +package com.navercorp.pinpoint.profiler.cache; import org.junit.Assert; - import org.junit.Test; @@ -26,25 +25,23 @@ */ public class SimpleCacheTest { - private SimpleCache.IdTransformer idTransformer = new SimpleCache.ZigZagTransformer(); - @Test public void startKey0() { - SimpleCache cache = new SimpleCache<>(idTransformer, 1024, 0); + SimpleCache cache = new SimpleCache<>(new IdAllocator.ZigZagAllocator(0), 1024); Result test = cache.put("test"); Assert.assertEquals(0, test.getId()); } @Test public void startKey1() { - SimpleCache cache = new SimpleCache<>(idTransformer, 1); + SimpleCache cache = new SimpleCache<>(new IdAllocator.ZigZagAllocator(), 1); Result test = cache.put("test"); Assert.assertEquals(-1, test.getId()); } @Test public void put() { - SimpleCache cache = new SimpleCache<>(idTransformer); + SimpleCache cache = new SimpleCache<>(new IdAllocator.ZigZagAllocator()); Result test = cache.put("test"); Assert.assertEquals(-1, test.getId()); Assert.assertTrue(test.isNewValue()); diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataServiceTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataServiceTest.java index 03705e986d22..cf3bdc53b07f 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataServiceTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultApiMetaDataServiceTest.java @@ -17,6 +17,8 @@ package com.navercorp.pinpoint.profiler.metadata; import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.context.DefaultMethodDescriptor; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import org.junit.Assert; @@ -32,7 +34,7 @@ public class DefaultApiMetaDataServiceTest { @Test public void cacheApi() { EnhancedDataSender dataSender = mock(EnhancedDataSender.class); - SimpleCache cache = new SimpleCache(new SimpleCache.ZigZagTransformer()); + SimpleCache cache = new SimpleCache<>(new IdAllocator.ZigZagAllocator(1)); ApiMetaDataService apiMetaDataService = new DefaultApiMetaDataService(dataSender, cache); MethodDescriptor methodDescriptor = new DefaultMethodDescriptor("clazz", "method", diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizerTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizerTest.java index 3bdf6b4aa0e5..142c40a5501e 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizerTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultCachingSqlNormalizerTest.java @@ -17,6 +17,8 @@ package com.navercorp.pinpoint.profiler.metadata; import com.navercorp.pinpoint.bootstrap.context.ParsingResult; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import org.junit.Assert; import org.junit.Test; @@ -62,6 +64,6 @@ public void testNormalizedSql_cache_expire() { } private SimpleCache newCache(int size) { - return new SimpleCache<>(new SimpleCache.ZigZagTransformer(), size); + return new SimpleCache<>(new IdAllocator.ZigZagAllocator(), size); } } \ No newline at end of file diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataServiceTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataServiceTest.java index a52b5d93a128..6b4097b71ffe 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataServiceTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultSqlMetaDataServiceTest.java @@ -17,6 +17,8 @@ package com.navercorp.pinpoint.profiler.metadata; import com.navercorp.pinpoint.bootstrap.context.ParsingResult; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import org.junit.Assert; import org.junit.Test; @@ -34,7 +36,7 @@ public class DefaultSqlMetaDataServiceTest { @Test public void cacheSql() { final EnhancedDataSender dataSender = mock(EnhancedDataSender.class); - SimpleCache sqlCache = new SimpleCache<>(new SimpleCache.ZigZagTransformer(), 100); + SimpleCache sqlCache = new SimpleCache<>(new IdAllocator.ZigZagAllocator(), 100); final SqlMetaDataService sqlMetaDataService = new DefaultSqlMetaDataService(dataSender, sqlCache); final String sql = "select * from A"; diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataServiceTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataServiceTest.java index 04bc4951af13..990eadf55b38 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataServiceTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/metadata/DefaultStringMetaDataServiceTest.java @@ -16,6 +16,8 @@ package com.navercorp.pinpoint.profiler.metadata; +import com.navercorp.pinpoint.profiler.cache.IdAllocator; +import com.navercorp.pinpoint.profiler.cache.SimpleCache; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; import org.junit.Assert; import org.junit.Test; @@ -30,7 +32,7 @@ public class DefaultStringMetaDataServiceTest { @Test public void cacheString() { EnhancedDataSender dataSender = mock(EnhancedDataSender.class); - SimpleCache stringCache = new SimpleCache(new SimpleCache.ZigZagTransformer()); + SimpleCache stringCache = new SimpleCache(new IdAllocator.ZigZagAllocator()); StringMetaDataService stringMetaDataService = new DefaultStringMetaDataService(dataSender, stringCache); String str = "test"; diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/GuavaCacheTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/GuavaCacheTest.java deleted file mode 100644 index e34a0f2709c6..000000000000 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/GuavaCacheTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2014 NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.pinpoint.profiler.util; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import org.junit.Test; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; - -/** - * @author emeroad - */ -public class GuavaCacheTest { - private final Logger logger = LogManager.getLogger(this.getClass()); - - - @Test - public void test() { - CacheBuilder builder = CacheBuilder.newBuilder(); - builder.concurrencyLevel(8); - builder.maximumSize(1); - builder.initialCapacity(1); - Cache cache = builder.build(); - - cache.put("test1", "1"); - logger.debug("{}", cache.size()); - cache.put("test3", "2"); - logger.debug("{}", cache.size()); - - } -}