1 Reply Latest reply: Oct 10, 2011 6:30 AM by Galder Zamarreño RSS

Measuring cache update latency

Darrell Burgan Newbie

Sorry if this is an obvious question, but I couldn't find an answer elsewhere in the forum or in the docs.

 

I would like to measure in realtime how long it takes for cache updates (put() and remove()) to actually finish carrying out their synchronization operations with other nodes in the cluster. I know that I can easily measure this for synchronous operations by measuring the time it takes for the put() or remove() to return. But what about for asynchronous operations?

 

For example, consider a cache configured thus:

 

{code:xml}

<global>

          <transport

                    transportClass="org.infinispan.remoting.transport.jgroups.JGroupsTransport"

                    strictPeerToPeer="false"

                    distributedSyncTimeout="240000">

                              <properties>

                                        <property name="configurationFile" value="infinispan/jgroups-production.xml" />

                              </properties>

          </transport>

          <asyncTransportExecutor>

                    <properties>

                              <property name="threadNamePrefix" value="peopleanswersAsyncTransportExecutor" />

                              <property name="maxThreads" value="100" />

                    </properties>

          </asyncTransportExecutor>

</global>

<default>

          <transaction

                    useEagerLocking="false"

                    syncCommitPhase="false"

                    syncRollbackPhase="false"

                    useSynchronization="false"

                    cacheStopTimeout="30000" />

          <locking

                    useLockStriping="false"

                    isolationLevel="READ_COMMITTED"

                    concurrencyLevel="256"

                    lockAcquisitionTimeout="15000"

                    writeSkewCheck="false" />

          <eviction

                    maxEntries="10000"

                    strategy="LIRS" />

          <expiration

                    lifespan="-1"

                    maxIdle="14400000" />

</default>

<namedCache name="asyncInvalidationCache">

          <clustering mode="invalidation">

                    <async

                              asyncMarshalling="false"

                              useReplQueue="false" />

                    <stateRetrieval fetchInMemoryState="false" />

          </clustering>

</namedCache>

{code}

 

When my code calls put(), my understanding is that the cache class returns almost immediately after updating the local cache, and communication of the invalidation to all other caches happens in a background thread. But I would like to measure the time between the start of the initial call to put() all the way to the time that the final invalidation message is sent to the final node in the cluster.

 

Note that we're currently using TCP/TCPGOSSIP communication in JGroups, if that matters.

 

Also note that we are not using JTA transactioning at all, so Infinispan is using the DummyTransactionManager, if that is relevant.

 

Is there some kind of way to measure this in Infinispan? Or is this an impossible task?

 

Thanks for your help!

 

Darrell Burgan