package org.infinispan.util; import org.infinispan.AdvancedCache; import org.infinispan.Cache; import org.infinispan.commands.ReplicableCommand; import org.infinispan.commands.control.LockControlCommand; import org.infinispan.commands.remote.ClusteredGetCommand; import org.infinispan.remoting.rpc.RpcManager; /** * Use the {@link CountingRpcManager#replaceRpcManager(org.infinispan.Cache)}. * * @author Mircea Markus * @since 5.2 */ public class CountingRpcManager extends AbstractControlledRpcManager { public volatile int lockCount; public volatile int clusterGet; public volatile int otherCount; public CountingRpcManager(RpcManager realOne) { super(realOne); } public static CountingRpcManager replaceRpcManager(Cache c) { AdvancedCache advancedCache = c.getAdvancedCache(); CountingRpcManager crm = new CountingRpcManager(advancedCache.getRpcManager()); advancedCache.getComponentRegistry().registerComponent(crm, RpcManager.class); advancedCache.getComponentRegistry().rewire(); assert advancedCache.getRpcManager().equals(crm); return crm; } public void resetStats() { lockCount = 0; clusterGet = 0; otherCount = 0; } @Override protected Object beforeInvokeRemotely(ReplicableCommand rpcCommand) { if (rpcCommand instanceof LockControlCommand) { lockCount++; } else if (rpcCommand instanceof ClusteredGetCommand) { clusterGet++; } else { otherCount++; } return null; } }