package org.radargun.service; import java.util.Iterator; import org.infinispan.AdvancedCache; import org.infinispan.commons.util.CloseableIterable; import org.infinispan.iteration.EntryIterable; import org.radargun.filters.AllFilter; import org.radargun.filters.NullConverter; import org.radargun.logging.Log; import org.radargun.logging.LogFactory; import org.radargun.traits.CacheInformation; /** * @author Radim Vansa <rvansa@redhat.com> * @author Alan Field <afield@redhat.com> */ public class Infinispan70CacheInfo extends Infinispan53CacheInfo { private final Log log = LogFactory.getLog(Infinispan70CacheInfo.class); public Infinispan70CacheInfo(InfinispanEmbeddedService service) { super(service); } @Override public CacheInformation.Cache getCache(String cacheName) { return new Cache(service.getCache(cacheName).getAdvancedCache()); } protected class Cache extends Infinispan53CacheInfo.Cache { public Cache(AdvancedCache cache) { super(cache); } @Override public long getTotalSize() { long totalSize = 0; EntryIterable entryIterator = null; try { entryIterator = cache.filterEntries(AllFilter.INSTANCE); CloseableIterable ci = entryIterator.converter(NullConverter.INSTANCE); Iterator iter = ci.iterator(); while (iter.hasNext()) { iter.next(); totalSize++; } return totalSize; } finally { if (entryIterator != null) { try { entryIterator.close(); } catch (Exception e) { log.error("Failed to close EntryIterable", e); } } } } } }