diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java index 18581167e..e77d59c4a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java @@ -58,6 +58,14 @@ public class CoreModuleConfig extends ModuleConfig { */ @Setter private int remoteTimeout = 20; + /** + * Following are cache settings for inventory(s) + */ + private long maxSizeOfServiceInventory = 10_000L; + private long maxSizeOfServiceInstanceInventory = 1_000_000L; + private long maxSizeOfEndpointInventory = 1_000_000L; + private long maxSizeOfNetworkInventory = 1_000_000L; + CoreModuleConfig() { this.downsampling = new ArrayList<>(); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java index 3bc4e9af7..9f58df6dc 100755 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java @@ -141,16 +141,16 @@ public class CoreModuleProvider extends ModuleProvider { this.registerServiceImplementation(IModelGetter.class, storageModels); this.registerServiceImplementation(IModelOverride.class, storageModels); - this.registerServiceImplementation(ServiceInventoryCache.class, new ServiceInventoryCache(getManager())); + this.registerServiceImplementation(ServiceInventoryCache.class, new ServiceInventoryCache(getManager(), moduleConfig)); this.registerServiceImplementation(IServiceInventoryRegister.class, new ServiceInventoryRegister(getManager())); - this.registerServiceImplementation(ServiceInstanceInventoryCache.class, new ServiceInstanceInventoryCache(getManager())); + this.registerServiceImplementation(ServiceInstanceInventoryCache.class, new ServiceInstanceInventoryCache(getManager(), moduleConfig)); this.registerServiceImplementation(IServiceInstanceInventoryRegister.class, new ServiceInstanceInventoryRegister(getManager())); - this.registerServiceImplementation(EndpointInventoryCache.class, new EndpointInventoryCache(getManager())); + this.registerServiceImplementation(EndpointInventoryCache.class, new EndpointInventoryCache(getManager(), moduleConfig)); this.registerServiceImplementation(IEndpointInventoryRegister.class, new EndpointInventoryRegister(getManager())); - this.registerServiceImplementation(NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager())); + this.registerServiceImplementation(NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager(), moduleConfig)); this.registerServiceImplementation(INetworkAddressInventoryRegister.class, new NetworkAddressInventoryRegister(getManager())); this.registerServiceImplementation(TopologyQueryService.class, new TopologyQueryService(getManager())); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java index a7e71275d..096a5d137 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache; import com.google.common.cache.*; import java.util.Objects; import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; import org.apache.skywalking.oap.server.core.register.EndpointInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO; @@ -38,19 +39,24 @@ public class EndpointInventoryCache implements Service { private final ModuleManager moduleManager; private final EndpointInventory userEndpoint; - private final Cache endpointNameCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); - - private final Cache endpointIdCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build(); + private final Cache endpointNameCache; + private final Cache endpointIdCache; private IEndpointInventoryCacheDAO cacheDAO; - public EndpointInventoryCache(ModuleManager moduleManager) { + public EndpointInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) { this.moduleManager = moduleManager; this.userEndpoint = new EndpointInventory(); this.userEndpoint.setSequence(Const.USER_ENDPOINT_ID); this.userEndpoint.setName(Const.USER_CODE); this.userEndpoint.setServiceId(Const.USER_SERVICE_ID); + + long initialSize = moduleConfig.getMaxSizeOfEndpointInventory() / 10L; + int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize); + + endpointNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfEndpointInventory()).build(); + endpointIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfEndpointInventory()).build(); } private IEndpointInventoryCacheDAO getCacheDAO() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java index 79ba73eed..6a254c892 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache; import com.google.common.cache.*; import java.util.Objects; import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; import org.apache.skywalking.oap.server.core.register.NetworkAddressInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO; @@ -36,14 +37,20 @@ public class NetworkAddressInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(NetworkAddressInventoryCache.class); - private final Cache networkAddressCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(5000).build(); - private final Cache addressIdCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(5000).build(); + private final Cache networkAddressCache; + private final Cache addressIdCache; private final ModuleManager moduleManager; private INetworkAddressInventoryCacheDAO cacheDAO; - public NetworkAddressInventoryCache(ModuleManager moduleManager) { + public NetworkAddressInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) { this.moduleManager = moduleManager; + + long initialSize = moduleConfig.getMaxSizeOfNetworkInventory() / 10L; + int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize); + + networkAddressCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfNetworkInventory()).build(); + addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfNetworkInventory()).build(); } private INetworkAddressInventoryCacheDAO getCacheDAO() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java index c328e61d9..e37e947eb 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache; import com.google.common.cache.*; import java.util.Objects; import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO; @@ -38,16 +39,13 @@ public class ServiceInstanceInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(ServiceInstanceInventoryCache.class); private final ServiceInstanceInventory userServiceInstance; - private final Cache serviceInstanceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); - - private final Cache serviceInstanceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); - - private final Cache addressIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); - + private final Cache serviceInstanceIdCache; + private final Cache serviceInstanceNameCache; + private final Cache addressIdCache; private final ModuleManager moduleManager; private IServiceInstanceInventoryCacheDAO cacheDAO; - public ServiceInstanceInventoryCache(ModuleManager moduleManager) { + public ServiceInstanceInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) { this.moduleManager = moduleManager; this.userServiceInstance = new ServiceInstanceInventory(); @@ -55,6 +53,13 @@ public class ServiceInstanceInventoryCache implements Service { this.userServiceInstance.setName(Const.USER_CODE); this.userServiceInstance.setServiceId(Const.USER_SERVICE_ID); this.userServiceInstance.setIsAddress(BooleanUtils.FALSE); + + long initialSize = moduleConfig.getMaxSizeOfServiceInstanceInventory() / 10L; + int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize); + + serviceInstanceIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build(); + serviceInstanceNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build(); + addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build(); } private IServiceInstanceInventoryCacheDAO getCacheDAO() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java index a38cb2e10..9bbebb818 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java @@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache; import com.google.common.cache.*; import java.util.Objects; import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; import org.apache.skywalking.oap.server.core.register.ServiceInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO; @@ -38,20 +39,27 @@ public class ServiceInventoryCache implements Service { private static final Logger logger = LoggerFactory.getLogger(ServiceInventoryCache.class); private final ServiceInventory userService; - private final Cache serviceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); - private final Cache addressIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); - private final Cache serviceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); + private final Cache serviceNameCache; + private final Cache addressIdCache; + private final Cache serviceIdCache; private final ModuleManager moduleManager; private IServiceInventoryCacheDAO cacheDAO; - public ServiceInventoryCache(ModuleManager moduleManager) { + public ServiceInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) { this.moduleManager = moduleManager; this.userService = new ServiceInventory(); this.userService.setSequence(Const.USER_SERVICE_ID); this.userService.setName(Const.USER_CODE); this.userService.setIsAddress(BooleanUtils.FALSE); + + long initialSize = moduleConfig.getMaxSizeOfServiceInventory() / 10L; + int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize); + + serviceNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build(); + addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build(); + serviceIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build(); } private IServiceInventoryCacheDAO getCacheDAO() {