Skip to content

Commit

Permalink
ISPN-9942 Cache container resource
Browse files Browse the repository at this point in the history
  • Loading branch information
Gustavo Fernandes authored and tristantarrant committed Aug 2, 2019
1 parent 3b9086d commit fe0864e
Show file tree
Hide file tree
Showing 21 changed files with 933 additions and 362 deletions.
Expand Up @@ -28,7 +28,7 @@ public String toJSON(ConfigurationInfo configurationInfo) {
void writeElement(Json parent, ConfigurationInfo element, boolean renderName) {
ElementDefinition configurationElement = element.getElementDefinition();
if (configurationElement == null) {
throw new CacheConfigurationException("No ElementDefinition found for " + this.getClass());
throw new CacheConfigurationException("No ElementDefinition found for " + element.getClass());
}

AttributeSet attributes = element.attributes();
Expand Down
Expand Up @@ -104,8 +104,10 @@ public String toString() {
public ThreadPoolConfiguration asThreadPoolConfigurationBuilder() {
ThreadPoolConfigurationBuilder builder = new ThreadPoolConfigurationBuilder(getGlobalConfig());
builder.threadPoolFactory(new BlockingThreadPoolExecutorFactory(maxThreads(), coreThreads(), queueLength(), keepAliveTime()));
DefaultThreadFactory threadFactory = getGlobalConfig().threads().getThreadFactory(threadFactory()).create().getThreadFactory();
builder.threadFactory(threadFactory);
if (threadFactory() != null) {
DefaultThreadFactory threadFactory = getGlobalConfig().threads().getThreadFactory(threadFactory()).create().getThreadFactory();
builder.threadFactory(threadFactory);
}
return builder.create();
}
}
Expand Up @@ -23,11 +23,11 @@ class CacheContainerConfiguration implements ConfigurationInfo {
static final AttributeDefinition<String> NAME = AttributeDefinition.builder("name", "DefaultCacheManager").immutable().build();
public static final AttributeDefinition<Boolean> STATISTICS = AttributeDefinition.builder("statistics", false).immutable().build();
static final AttributeDefinition<Boolean> ZERO_CAPACITY_NODE = AttributeDefinition.builder("zeroCapacityNode", Boolean.FALSE).immutable().build();
static final AttributeDefinition<String> ASYNC_EXECUTOR = AttributeDefinition.builder("asyncExecutor", null, String.class).immutable().build();
static final AttributeDefinition<String> LISTENER_EXECUTOR = AttributeDefinition.builder("listenerExecutor", null, String.class).immutable().build();
static final AttributeDefinition<String> EXPIRATION_EXECUTOR = AttributeDefinition.builder("expirationExecutor", null, String.class).immutable().build();
static final AttributeDefinition<String> PERSISTENCE_EXECUTOR = AttributeDefinition.builder("persistenceExecutor", null, String.class).immutable().build();
static final AttributeDefinition<String> STATE_TRANSFER_EXECUTOR = AttributeDefinition.builder("stateTransferExecutor", null, String.class).immutable().build();
static final AttributeDefinition<String> ASYNC_EXECUTOR = AttributeDefinition.builder("asyncExecutor", "async-pool", String.class).immutable().build();
static final AttributeDefinition<String> LISTENER_EXECUTOR = AttributeDefinition.builder("listenerExecutor", "listener-pool", String.class).immutable().build();
static final AttributeDefinition<String> EXPIRATION_EXECUTOR = AttributeDefinition.builder("expirationExecutor", "expiration-pool", String.class).immutable().build();
static final AttributeDefinition<String> PERSISTENCE_EXECUTOR = AttributeDefinition.builder("persistenceExecutor", "persistence-pool", String.class).immutable().build();
static final AttributeDefinition<String> STATE_TRANSFER_EXECUTOR = AttributeDefinition.builder("stateTransferExecutor", "state-transfer-pool", String.class).immutable().build();

public static AttributeSet attributeDefinitionSet() {
return new AttributeSet(CacheContainerConfiguration.class, NAME, STATISTICS, ZERO_CAPACITY_NODE, DEFAULT_CACHE, ASYNC_EXECUTOR, LISTENER_EXECUTOR, EXPIRATION_EXECUTOR, PERSISTENCE_EXECUTOR, STATE_TRANSFER_EXECUTOR);
Expand Down
Expand Up @@ -109,6 +109,10 @@ public GlobalJmxStatisticsConfiguration globalJmxStatistics() {
return cacheContainerConfiguration.globalJmxStatistics();
}

public String cacheManagerName() {
return cacheContainerConfiguration.cacheManagerName();
}

public TransportConfiguration transport() {
return cacheContainerConfiguration.transport();
}
Expand Down
Expand Up @@ -70,7 +70,7 @@ public boolean allowDuplicateDomains() {

/**
* @return the cache manager name
* @deprecated use {@link GlobalConfigurationBuilder#cacheManagerName()} instead
* @deprecated use {@link GlobalConfiguration#cacheManagerName()} instead
*/
@Deprecated
public String cacheManagerName() {
Expand Down
Expand Up @@ -30,8 +30,8 @@ public class TransportConfiguration implements ConfigurationInfo {
public static final AttributeDefinition<Long> INITIAL_CLUSTER_TIMEOUT = AttributeDefinition.builder(
"initialClusterTimeout", TimeUnit.MINUTES.toMillis(1)).build();
public static final AttributeDefinition<String> STACK = AttributeDefinition.builder("stack", null, String.class).build();
public static final AttributeDefinition<String> TRANSPORT_EXECUTOR = AttributeDefinition.builder("executor", null, String.class).build();
public static final AttributeDefinition<String> REMOTE_EXECUTOR = AttributeDefinition.builder("remoteCommandExecutor", null, String.class).build();
public static final AttributeDefinition<String> TRANSPORT_EXECUTOR = AttributeDefinition.builder("executor", "transport-pool", String.class).build();
public static final AttributeDefinition<String> REMOTE_EXECUTOR = AttributeDefinition.builder("remoteCommandExecutor", "remote-command-pool", String.class).build();

static AttributeSet attributeSet() {
return new AttributeSet(TransportConfiguration.class, CLUSTER_NAME, MACHINE_ID, RACK_ID, SITE_ID, NODE_NAME,
Expand Down
Expand Up @@ -1044,7 +1044,9 @@ private ThreadPoolConfiguration createThreadPoolConfiguration(String threadPoolN

ThreadPoolConfiguration threadPoolConfiguration = threadPool.asThreadPoolConfigurationBuilder();
DefaultThreadFactory threadFactory = threadPoolConfiguration.threadFactory();
threadFactory.setComponent(shortened(componentName));
if (threadFactory != null) {
threadFactory.setComponent(shortened(componentName));
}
return threadPoolConfiguration;
}

Expand Down
156 changes: 156 additions & 0 deletions core/src/main/java/org/infinispan/manager/CacheManagerInfo.java
@@ -0,0 +1,156 @@
package org.infinispan.manager;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

import org.infinispan.Version;
import org.infinispan.commons.util.Immutables;
import org.infinispan.configuration.ConfigurationManager;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.registry.InternalCacheRegistry;
import org.infinispan.remoting.transport.Address;
import org.infinispan.remoting.transport.Transport;

/**
* @since 10.0
*/
public class CacheManagerInfo {

public static final List<String> LOCAL_NODE = Collections.singletonList("local");
private final DefaultCacheManager cacheManager;
private final ConfigurationManager configurationManager;
private final GlobalComponentRegistry globalComponentRegistry;
private InternalCacheRegistry internalCacheRegistry;

public CacheManagerInfo(DefaultCacheManager cacheManager) {
this.cacheManager = cacheManager;
this.configurationManager = cacheManager.getConfigurationManager();
this.globalComponentRegistry = cacheManager.getGlobalComponentRegistry();
this.internalCacheRegistry = globalComponentRegistry.getComponent(InternalCacheRegistry.class);

}

public String getCoordinatorAddress() {
Transport t = cacheManager.getTransport();
return t == null ? "N/A" : t.getCoordinator().toString();
}

public boolean isCoordinator() {
return cacheManager.getTransport() != null && cacheManager.getTransport().isCoordinator();
}

public String getCacheManagerStatus() {
return cacheManager.getStatus().toString();
}


public Set<BasicCacheInfo> getDefinedCaches() {
return cacheManager.getCacheNames().stream().map(c -> {
boolean started = cacheManager.getCaches().containsKey(c);
return new BasicCacheInfo(c, started);
}).collect(Collectors.toSet());
}

public Set<String> getCacheConfigurationNames() {
Set<String> names = new HashSet<>(configurationManager.getDefinedConfigurations());
InternalCacheRegistry internalCacheRegistry = globalComponentRegistry.getComponent(InternalCacheRegistry.class);
internalCacheRegistry.filterPrivateCaches(names);
if (names.isEmpty())
return Collections.emptySet();
else
return Immutables.immutableSetWrap(names);
}

public String getCreatedCacheCount() {
long created = cacheManager.getCaches().keySet().stream().filter(c -> !internalCacheRegistry.isInternalCache(c)).count();
return String.valueOf(created);
}

public String getRunningCacheCount() {
long running = cacheManager.getCaches().keySet().stream().filter(c -> cacheManager.isRunning(c) && !internalCacheRegistry.isInternalCache(c)).count();
return String.valueOf(running);
}

public String getVersion() {
return Version.getVersion();
}

public String getName() {
return configurationManager.getGlobalConfiguration().globalJmxStatistics().cacheManagerName();
}

public String getNodeAddress() {
return cacheManager.getLogicalAddressString();
}

public String getPhysicalAddresses() {
if (cacheManager.getTransport() == null) return "local";
List<Address> address = cacheManager.getTransport().getPhysicalAddresses();
return address == null ? "local" : address.toString();
}

public List<String> getClusterMembers() {
if (cacheManager.getTransport() == null) return LOCAL_NODE;
return cacheManager.getTransport().getMembers().stream().map(Objects::toString).collect(Collectors.toList());
}

public List<String> getClusterMembersPhysicalAddresses() {
if (cacheManager.getTransport() == null) return LOCAL_NODE;
List<Address> addressList = cacheManager.getTransport().getMembersPhysicalAddresses();
return addressList.stream().map(Objects::toString).collect(Collectors.toList());
}

public int getClusterSize() {
if (cacheManager.getTransport() == null) return 1;
return cacheManager.getTransport().getMembers().size();
}

public String getClusterName() {
return configurationManager.getGlobalConfiguration().transport().clusterName();
}

private String getLogicalAddressString() {
return cacheManager.getAddress() == null ? "local" : cacheManager.getAddress().toString();
}

static class BasicCacheInfo {
String name;
boolean started;

BasicCacheInfo(String name, boolean started) {
this.name = name;
this.started = started;
}

public String getName() {
return name;
}

public boolean isStarted() {
return started;
}
}

static class ClusterMember {
String name;
String address;

public ClusterMember(String name, String address) {
this.name = name;
this.address = address;
}

public String getName() {
return name;
}

public String getAddress() {
return address;
}
}

}

0 comments on commit fe0864e

Please sign in to comment.