package org.radargun.service; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Set; import org.infinispan.AdvancedCache; import org.infinispan.Cache; import org.infinispan.configuration.parsing.ConfigurationBuilderHolder; import org.infinispan.configuration.parsing.ParserRegistry; import org.infinispan.container.entries.InternalCacheEntry; import org.infinispan.distribution.DistributionManager; import org.infinispan.distribution.ch.ConsistentHash; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.util.FileLookupFactory; import org.radargun.Service; import org.radargun.config.Init; import org.radargun.config.Property; import org.radargun.traits.ProvidesTrait; /** * @author Radim Vansa <rvansa@redhat.com> * @author Michal Linhard <mlinhard@redhat.com> */ @Service(doc = InfinispanEmbeddedService.SERVICE_DESCRIPTION) public class Infinispan52EmbeddedService extends Infinispan51EmbeddedService { @Property(doc = "mapReduceDistributedReducePhase") protected boolean mapReduceDistributedReducePhase; @Property(doc = "mapReduceUseIntermediateSharedCache") protected boolean mapReduceUseIntermediateSharedCache; protected InfinispanDistributedTask distributedTaskExecutor; @Override protected Infinispan52Lifecycle createLifecycle() { return new Infinispan52Lifecycle(this); } @ProvidesTrait @Override public InfinispanOperations createBasicOperations() { return new Infinispan52Operations(this); } @ProvidesTrait @Override public Infinispan52MapReduce createMapReduce() { return new Infinispan52MapReduce(this); } @ProvidesTrait @Override public InfinispanCacheInfo createCacheInformation() { return new Infinispan52CacheInfo(this); } @ProvidesTrait public InfinispanDistributedTask getDistributedTaskExecutor() { return distributedTaskExecutor; } @ProvidesTrait public EmbeddedConfigurationProvider createConfigurationProvider() { return new EmbeddedConfigurationProvider(this); } @Init public void init() { distributedTaskExecutor = new InfinispanDistributedTask(this); } @Override protected ConfigurationBuilderHolder createConfiguration(String configFile) throws FileNotFoundException { ClassLoader classLoader = getClass().getClassLoader(); try (InputStream input = FileLookupFactory.newInstance().lookupFileStrict(configFile, classLoader)) { return new ParserRegistry(classLoader).parse(input); } catch (IOException e) { log.error("Failed to get configuration input stream", e); } return null; } protected ConfigDumpHelper createConfigDumpHelper() { return new ConfigDumpHelper(); } @Override protected String getJmxDomain() { return ((DefaultCacheManager) cacheManager).getCacheManagerConfiguration().globalJmxStatistics().domain(); } @Override protected String getKeyInfo(AdvancedCache cache, Object key) { DistributionManager dm = cache.getDistributionManager(); return super.getKeyInfo(cache, key) + ", segmentId=" + dm.getConsistentHash().getSegment(key); } @Override protected String getCHInfo(DistributionManager dm) { StringBuilder sb = new StringBuilder(1000); sb.append("\nWrite CH: ").append(dm.getWriteConsistentHash()); sb.append("\nRead CH: ").append(dm.getReadConsistentHash()); return sb.toString(); } @Override protected String toString(InternalCacheEntry ice) { if (ice == null) return null; StringBuilder sb = new StringBuilder(256); sb.append(ice.getClass().getSimpleName()); sb.append("[key=").append(ice.getKey()).append(", value=").append(ice.getValue()); sb.append(", created=").append(ice.getCreated()).append(", isCreated=").append(ice.isCreated()); sb.append(", lastUsed=").append(ice.getLastUsed()).append(", isChanged=").append(ice.isChanged()); sb.append(", expires=").append(ice.getExpiryTime()).append(", isExpired=").append(ice.isExpired()); sb.append(", canExpire=").append(ice.canExpire()).append(", isEvicted=").append(ice.isEvicted()); sb.append(", isRemoved=").append(ice.isRemoved()).append(", isValid=").append(ice.isValid()); sb.append(", lifespan=").append(ice.getLifespan()).append(", maxIdle=").append(ice.getMaxIdle()); sb.append(", version=").append(ice.getVersion()).append(", lockPlaceholder=").append(ice.isLockPlaceholder()); return sb.append(']').toString(); } @Override protected int membersCount(ConsistentHash consistentHash) { return consistentHash.getMembers().size(); } @Override protected boolean isJoinComplete(Cache<?, ?> cache) { DistributionManager dm = cache.getAdvancedCache().getDistributionManager(); boolean joinComplete = dm.isJoinComplete(); Set<Integer> ownedSegments = dm.getReadConsistentHash().getSegmentsForOwner(cache.getCacheManager().getAddress()); if (log.isTraceEnabled()) { log.trace("joinComplete=" + joinComplete + ", ownedSegments=" + ownedSegments + ", " + getCHInfo(dm)); } return joinComplete && !ownedSegments.isEmpty(); } }