You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/01/18 15:27:38 UTC
[2/9] ignite git commit: ignite-db-x-opt
ignite-db-x-opt
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/658d2075
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/658d2075
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/658d2075
Branch: refs/heads/ignite-db-x-opt
Commit: 658d2075c423a5b993fe434df76bc66d8a4969c0
Parents: 7493f23
Author: sboikov <sb...@gridgain.com>
Authored: Wed Dec 14 13:49:10 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Dec 14 13:49:10 2016 +0300
----------------------------------------------------------------------
.../ignite/internal/GridKernalContext.java | 6 +-
.../ignite/internal/GridKernalContextImpl.java | 45 +++---
.../processors/cache/GridCacheContext.java | 13 +-
.../processors/cache/GridCacheMapEntry.java | 7 +-
.../processors/cache/GridCacheProcessor.java | 9 +-
.../cache/IgniteCacheOffheapManagerImpl.java | 53 ++------
.../processors/cache/IgniteCacheProxy.java | 11 +-
.../dht/atomic/GridDhtAtomicCache.java | 27 ++--
.../ignite/internal/util/CacheStatistics.java | 65 +++++++++
.../ignite/internal/util/DebugStatistic.java | 60 --------
.../ignite/internal/util/DebugStatistics.java | 47 -------
.../internal/util/InternalStatistics.java | 136 +++++++++++++++++++
.../internal/util/OperationStatistic.java | 78 +++++++++++
.../ignite/internal/util/PutStatistic.java | 61 +++++++++
.../loadtests/hashmap/GridCacheTestContext.java | 3 +-
15 files changed, 419 insertions(+), 202 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
index 556d8d8..102a696 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContext.java
@@ -42,8 +42,8 @@ import org.apache.ignite.internal.processors.cluster.ClusterProcessor;
import org.apache.ignite.internal.processors.continuous.GridContinuousProcessor;
import org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor;
import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor;
-import org.apache.ignite.internal.processors.hadoop.HadoopProcessorAdapter;
import org.apache.ignite.internal.processors.hadoop.HadoopHelper;
+import org.apache.ignite.internal.processors.hadoop.HadoopProcessorAdapter;
import org.apache.ignite.internal.processors.igfs.IgfsHelper;
import org.apache.ignite.internal.processors.igfs.IgfsProcessorAdapter;
import org.apache.ignite.internal.processors.job.GridJobProcessor;
@@ -63,8 +63,8 @@ import org.apache.ignite.internal.processors.service.GridServiceProcessor;
import org.apache.ignite.internal.processors.session.GridTaskSessionProcessor;
import org.apache.ignite.internal.processors.task.GridTaskProcessor;
import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
-import org.apache.ignite.internal.util.DebugStatistic;
import org.apache.ignite.internal.util.IgniteExceptionRegistry;
+import org.apache.ignite.internal.util.InternalStatistics;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.plugin.PluginNotFoundException;
import org.apache.ignite.plugin.PluginProvider;
@@ -606,5 +606,5 @@ public interface GridKernalContext extends Iterable<GridComponent> {
*/
public PlatformProcessor platform();
- public DebugStatistic addStatistic(String name);
+ public InternalStatistics stats();
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
index 0db19bd..d7c6e5d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
@@ -58,8 +58,8 @@ import org.apache.ignite.internal.processors.cluster.ClusterProcessor;
import org.apache.ignite.internal.processors.continuous.GridContinuousProcessor;
import org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor;
import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor;
-import org.apache.ignite.internal.processors.hadoop.HadoopProcessorAdapter;
import org.apache.ignite.internal.processors.hadoop.HadoopHelper;
+import org.apache.ignite.internal.processors.hadoop.HadoopProcessorAdapter;
import org.apache.ignite.internal.processors.igfs.IgfsHelper;
import org.apache.ignite.internal.processors.igfs.IgfsProcessorAdapter;
import org.apache.ignite.internal.processors.job.GridJobProcessor;
@@ -80,9 +80,8 @@ import org.apache.ignite.internal.processors.service.GridServiceProcessor;
import org.apache.ignite.internal.processors.session.GridTaskSessionProcessor;
import org.apache.ignite.internal.processors.task.GridTaskProcessor;
import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
-import org.apache.ignite.internal.util.DebugStatistic;
-import org.apache.ignite.internal.util.DebugStatistics;
import org.apache.ignite.internal.util.IgniteExceptionRegistry;
+import org.apache.ignite.internal.util.InternalStatistics;
import org.apache.ignite.internal.util.spring.IgniteSpringHelper;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
@@ -356,7 +355,7 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
private volatile boolean disconnected;
/** */
- private DebugStatistics debugStatistics;
+ private InternalStatistics internalStatistics;
/**
* No-arg constructor is required by externalization.
@@ -435,30 +434,32 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
"META-INF/ignite.xml.");
}
- debugStatistics = new DebugStatistics();
+ internalStatistics = new InternalStatistics();
- final DebugStatistics stat0 = debugStatistics;
+ final InternalStatistics stat0 = internalStatistics;
- final IgniteLogger log0 = log(getClass());
+ if (config().getGridLogger() != null) {
+ final IgniteLogger log0 = log(getClass());
- Thread thread = new Thread() {
- @Override public void run() {
- try {
- while (true) {
- stat0.dump(log0);
+ Thread thread = new Thread() {
+ @Override public void run() {
+ try {
+ while (true) {
+ stat0.dump(log0);
- Thread.sleep(5000);
+ Thread.sleep(5000);
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
}
}
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- };
+ };
- thread.setDaemon(true);
+ thread.setDaemon(true);
- thread.start();
+ thread.start();
+ }
}
/** {@inheritDoc} */
@@ -1044,8 +1045,8 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
}
/** {@inheritDoc} */
- @Override public DebugStatistic addStatistic(String name) {
- return debugStatistics.add(name);
+ @Override public InternalStatistics stats() {
+ return internalStatistics;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index 7a2009f..e42d42b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -82,6 +82,7 @@ import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProces
import org.apache.ignite.internal.processors.closure.GridClosureProcessor;
import org.apache.ignite.internal.processors.plugin.CachePluginManager;
import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
+import org.apache.ignite.internal.util.CacheStatistics;
import org.apache.ignite.internal.util.F0;
import org.apache.ignite.internal.util.lang.GridFunc;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
@@ -243,6 +244,9 @@ public class GridCacheContext<K, V> implements Externalizable {
/** */
private boolean customAffMapper;
+ /** */
+ private CacheStatistics stats;
+
/**
* Empty constructor required for {@link Externalizable}.
*/
@@ -294,7 +298,8 @@ public class GridCacheContext<K, V> implements Externalizable {
IgniteCacheOffheapManager offheapMgr,
CacheConflictResolutionManager<K, V> rslvrMgr,
CachePluginManager pluginMgr,
- GridCacheAffinityManager affMgr
+ GridCacheAffinityManager affMgr,
+ CacheStatistics stats
) {
assert ctx != null;
assert sharedCtx != null;
@@ -355,6 +360,12 @@ public class GridCacheContext<K, V> implements Externalizable {
expiryPlc = null;
itHolder = new CacheWeakQueryIteratorsHolder(log);
+
+ this.stats = stats;
+ }
+
+ public CacheStatistics stats() {
+ return stats;
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index 7a577d6..7fbfd26 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -36,6 +36,7 @@ import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.cache.CacheAtomicWriteOrderMode;
import org.apache.ignite.cache.eviction.EvictableEntry;
+import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.pagemem.wal.StorageException;
import org.apache.ignite.internal.pagemem.wal.record.DataEntry;
import org.apache.ignite.internal.pagemem.wal.record.DataRecord;
@@ -4062,15 +4063,15 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
/** {@inheritDoc} */
@Override public boolean equals(Object o) {
- if (true)
- throw new IgniteException("Error");
-
// Identity comparison left on purpose.
return o == this;
}
/** {@inheritDoc} */
@Override public int hashCode() {
+ if (true)
+ throw new IgniteException("hasCode should not be called");
+
return hash;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index b470940..3db8a74 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -101,6 +101,7 @@ import org.apache.ignite.internal.processors.cache.version.GridCacheVersionManag
import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
import org.apache.ignite.internal.processors.plugin.CachePluginManager;
import org.apache.ignite.internal.processors.query.GridQueryProcessor;
+import org.apache.ignite.internal.util.CacheStatistics;
import org.apache.ignite.internal.util.F0;
import org.apache.ignite.internal.util.future.GridCompoundFuture;
import org.apache.ignite.internal.util.future.GridFinishedFuture;
@@ -1353,6 +1354,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
boolean affNode = CU.affinityNode(ctx.discovery().localNode(), cfg.getNodeFilter());
+ CacheStatistics stats = ctx.stats().cache();
+
GridCacheContext<?, ?> cacheCtx = new GridCacheContext(
ctx,
sharedCtx,
@@ -1376,7 +1379,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
offheapMgr,
rslvrMgr,
pluginMgr,
- affMgr
+ affMgr,
+ stats
);
cacheCtx.cacheObjectContext(cacheObjCtx);
@@ -1504,7 +1508,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
offheapMgr,
rslvrMgr,
pluginMgr,
- affMgr
+ affMgr,
+ stats
);
cacheCtx.cacheObjectContext(cacheObjCtx);
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 084b938..da2c070 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -50,7 +50,6 @@ import org.apache.ignite.internal.processors.cache.local.GridLocalCache;
import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.processors.query.GridQueryProcessor;
-import org.apache.ignite.internal.util.DebugStatistic;
import org.apache.ignite.internal.util.GridAtomicLong;
import org.apache.ignite.internal.util.GridCloseableIteratorAdapter;
import org.apache.ignite.internal.util.GridEmptyCloseableIterator;
@@ -67,6 +66,10 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_IDX;
import static org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.FIND_ONE;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.STORE_ADD;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.STORE_RMV;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.TREE_PUT;
/**
*
@@ -94,18 +97,6 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
/** */
private final GridAtomicLong globalRmvId = new GridAtomicLong(U.currentTimeMillis() * 1000_000);
- /** */
- private DebugStatistic storeAddStat;
-
- /** */
- private DebugStatistic storeRmvStat;
-
- /** */
- private DebugStatistic treePutStat;
-
- /** */
- private DebugStatistic treeFindOneStat;
-
/** {@inheritDoc} */
@Override public GridAtomicLong globalRemoveId() {
return globalRmvId;
@@ -133,11 +124,6 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
cctx.shared().database().checkpointReadUnlock();
}
}
-
- storeAddStat = cctx.kernalContext().addStatistic(cctx.name() + "-storeAdd");
- storeRmvStat = cctx.kernalContext().addStatistic(cctx.name() + "-storeRmv");
- treePutStat = cctx.kernalContext().addStatistic(cctx.name() + "-treePut");
- treeFindOneStat = cctx.kernalContext().addStatistic(cctx.name() + "-treeFindOne");
}
/**
@@ -851,27 +837,24 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
key.valueBytes(cctx.cacheObjectContext());
val.valueBytes(cctx.cacheObjectContext());
- long start = storeAddStat.start();
+ cctx.stats().opStart(STORE_ADD);
rowStore.addRow(dataRow);
- storeAddStat.addTime(start);
+ cctx.stats().opEnd(STORE_ADD);
assert dataRow.link() != 0 : dataRow;
- start = treePutStat.start();
+ cctx.stats().opStart(TREE_PUT);
DataRow old = dataTree.put(dataRow);
- treePutStat.addTime(start);
+ cctx.stats().opEnd(TREE_PUT);
if (old == null)
storageSize.incrementAndGet();
if (indexingEnabled) {
- if (true)
- throw new IgniteException("Error");
-
GridCacheQueryManager qryMgr = cctx.queries();
assert qryMgr.enabled();
@@ -885,26 +868,18 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
if (old != null) {
assert old.link() != 0 : old;
- if (pendingEntries != null && old.expireTime() != 0) {
- if (true)
- throw new IgniteException("Error");
-
+ if (pendingEntries != null && old.expireTime() != 0)
pendingEntries.remove(new PendingRow(old.expireTime(), old.link()));
- }
- start = storeRmvStat.start();
+ cctx.stats().opStart(STORE_RMV);
rowStore.removeRow(old.link());
- storeRmvStat.addTime(start);
+ cctx.stats().opEnd(STORE_RMV);
}
- if (pendingEntries != null && expireTime != 0) {
- if (true)
- throw new IgniteException("Error");
-
+ if (pendingEntries != null && expireTime != 0)
pendingEntries.put(new PendingRow(expireTime, dataRow.link()));
- }
}
/** {@inheritDoc} */
@@ -942,13 +917,13 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
/** {@inheritDoc} */
@Override public CacheDataRow find(KeyCacheObject key)
throws IgniteCheckedException {
- long start = treeFindOneStat.start();
+ cctx.stats().opStart(FIND_ONE);
try {
return dataTree.findOne(new KeySearchRow(key.hashCode(), key, 0));
}
finally {
- treeFindOneStat.addTime(start);
+ cctx.stats().opEnd(FIND_ONE);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index 8908a11..2b87715 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -64,13 +64,11 @@ import org.apache.ignite.internal.AsyncSupportAdapter;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.query.CacheQuery;
import org.apache.ignite.internal.processors.cache.query.CacheQueryFuture;
import org.apache.ignite.internal.processors.cache.query.GridCacheQueryType;
import org.apache.ignite.internal.processors.query.GridQueryProcessor;
-import org.apache.ignite.internal.util.DebugStatistic;
import org.apache.ignite.internal.util.GridCloseableIteratorAdapter;
import org.apache.ignite.internal.util.GridEmptyIterator;
import org.apache.ignite.internal.util.future.IgniteFutureImpl;
@@ -136,9 +134,6 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V
@GridToStringExclude
private boolean lock;
- /** */
- private DebugStatistic putStat;
-
/**
* Empty constructor required for {@link Externalizable}.
*/
@@ -189,8 +184,6 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V
internalProxy = new GridCacheProxyImpl<>(ctx, delegate, opCtx);
this.lock = lock;
-
- putStat = ctx.kernalContext().addStatistic(ctx.name() + "-put");
}
/**
@@ -1351,7 +1344,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V
/** {@inheritDoc} */
@Override public void put(K key, V val) {
try {
- long start = putStat.start();
+ ctx.stats().putStart();
GridCacheGateway<K, V> gate = this.gate;
@@ -1382,7 +1375,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V
finally {
onLeave(gate, prev);
- putStat.addTime(start);
+ ctx.stats().putEnd();
}
}
catch (IgniteCheckedException e) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index c3a7ca1..c5ed1e7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -81,7 +81,6 @@ import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersionConflictContext;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersionEx;
-import org.apache.ignite.internal.util.DebugStatistic;
import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.future.GridEmbeddedFuture;
import org.apache.ignite.internal.util.future.GridFinishedFuture;
@@ -118,6 +117,9 @@ import static org.apache.ignite.internal.processors.cache.GridCacheUtils.isNearE
import static org.apache.ignite.internal.processors.dr.GridDrType.DR_BACKUP;
import static org.apache.ignite.internal.processors.dr.GridDrType.DR_NONE;
import static org.apache.ignite.internal.processors.dr.GridDrType.DR_PRIMARY;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.LOCK;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.UNLOCK;
+import static org.apache.ignite.internal.util.PutStatistic.Ops.UPDATE_INTERNAL;
/**
* Non-transactional partitioned cache.
@@ -229,12 +231,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
};
}
- /** */
- private DebugStatistic updateStat;
-
- /** */
- private DebugStatistic lockStat;
-
/** {@inheritDoc} */
@SuppressWarnings({"IfMayBeConditional", "SimplifiableIfStatement"})
@Override public void start() throws IgniteCheckedException {
@@ -298,9 +294,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
preldr.start();
- updateStat = ctx.kernalContext().addStatistic("update-" + cacheCfg.getName());
- lockStat = ctx.kernalContext().addStatistic("lock-" + cacheCfg.getName());
-
ctx.io().addHandler(
ctx.cacheId(),
GridNearGetRequest.class,
@@ -1699,7 +1692,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
GridNearAtomicAbstractUpdateRequest req,
CI2<GridNearAtomicAbstractUpdateRequest, GridNearAtomicUpdateResponse> completionCb
) {
- long start = updateStat.start();
+ ctx.stats().opStart(UPDATE_INTERNAL);
GridNearAtomicUpdateResponse res = new GridNearAtomicUpdateResponse(ctx.cacheId(), nodeId, req.futureVersion(),
ctx.deploymentEnabled());
@@ -1717,11 +1710,11 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
try {
// If batch store update is enabled, we need to lock all entries.
// First, need to acquire locks on cache entries, then check filter.
- long lockStart = lockStat.start();
+ ctx.stats().opStart(LOCK);
List<GridDhtCacheEntry> locked = lockEntries(req, req.topologyVersion());
- lockStat.addTime(lockStart);
+ ctx.stats().opEnd(LOCK);
Collection<IgniteBiTuple<GridDhtCacheEntry, GridCacheVersion>> deleted = null;
@@ -1852,9 +1845,13 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
e.printStackTrace();
}
finally {
+ ctx.stats().opStart(UNLOCK);
+
if (locked != null)
unlockEntries(locked, req.topologyVersion());
+ ctx.stats().opEnd(UNLOCK);
+
// Enqueue if necessary after locks release.
if (deleted != null) {
assert !deleted.isEmpty();
@@ -1893,7 +1890,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
return;
}
finally {
- updateStat.addTime(start);
+ ctx.stats().opEnd(UPDATE_INTERNAL);
}
if (remap) {
@@ -2923,7 +2920,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
* @param locked Locked entries.
* @param topVer Topology version.
*/
- private void unlockEntries(Collection<GridDhtCacheEntry> locked, AffinityTopologyVersion topVer) {
+ private void unlockEntries(List<GridDhtCacheEntry> locked, AffinityTopologyVersion topVer) {
// Process deleted entries before locks release.
assert ctx.deferredDelete() : this;
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java b/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
new file mode 100644
index 0000000..ab6d614
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/CacheStatistics.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.util;
+
+/**
+ *
+ */
+public class CacheStatistics {
+ /** */
+ private final ThreadLocal<PutStatistic> putStat = new ThreadLocal<>();
+
+ private final InternalStatistics stats;
+
+ public CacheStatistics(InternalStatistics stats) {
+ this.stats = stats;
+ }
+
+ public void putStart() {
+ PutStatistic stat = putStat.get();
+
+ if (stat == null)
+ putStat.set(stat = new PutStatistic());
+
+ stat.start();
+ }
+
+ public void putEnd() {
+ PutStatistic stat = putStat.get();
+
+ if (stat != null) {
+ stat.end();
+
+ stats.add(stat);
+ }
+ }
+
+ public final void opStart(Enum op) {
+ PutStatistic stat = putStat.get();
+
+ if (stat != null)
+ stat.startOp(op.ordinal());
+ }
+
+ public final void opEnd(Enum op) {
+ PutStatistic stat = putStat.get();
+
+ if (stat != null)
+ stat.endOp(op.ordinal());
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistic.java b/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistic.java
deleted file mode 100644
index e1f0619..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistic.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.util;
-
-import org.jsr166.LongAdder8;
-
-/**
- *
- */
-public class DebugStatistic {
- /** */
- private final String name;
-
- /** */
- private final LongAdder8 time = new LongAdder8();
-
- /** */
- private final LongAdder8 cnt = new LongAdder8();
-
- DebugStatistic(String name) {
- this.name = name;
- }
-
- public long start() {
- return System.nanoTime();
- }
-
- public String name() {
- return name;
- }
-
- public void addTime(long start) {
- time.add(System.nanoTime() - start);
-
- cnt.increment();
- }
-
- public LongAdder8 time() {
- return time;
- }
-
- public LongAdder8 count() {
- return cnt;
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistics.java b/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistics.java
deleted file mode 100644
index c094192..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/DebugStatistics.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.util;
-
-import java.util.concurrent.CopyOnWriteArrayList;
-import org.apache.ignite.IgniteLogger;
-
-/**
- *
- */
-public class DebugStatistics {
- /** */
- private final CopyOnWriteArrayList<DebugStatistic> stats = new CopyOnWriteArrayList<>();
-
- public DebugStatistic add(String name) {
- DebugStatistic stat = new DebugStatistic(name);
-
- stats.add(stat);
-
- return stat;
- }
-
- public void dump(IgniteLogger log) {
- for (DebugStatistic stat : stats) {
- long cnt = stat.count().sumThenReset();
- long time = stat.time().sumThenReset();
-
- if (cnt > 0)
- log.info("Statistic [name=" + stat.name() + ", cnt=" + time + ", avg=" + (time / (double)cnt) + ']');
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/InternalStatistics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/InternalStatistics.java b/modules/core/src/main/java/org/apache/ignite/internal/util/InternalStatistics.java
new file mode 100644
index 0000000..c4312a8
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/InternalStatistics.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.util;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.apache.ignite.IgniteLogger;
+import org.jsr166.LongAdder8;
+
+/**
+ *
+ */
+public class InternalStatistics {
+ /** */
+ private final CacheStatistics cache;
+
+ /** */
+ private final ConcurrentMap<Class<?>, StatAggregate> stats = new ConcurrentHashMap<>();
+
+ public InternalStatistics() {
+ cache = new CacheStatistics(this);
+ }
+
+ public void dump(IgniteLogger log) {
+ for (StatAggregate stat : stats.values())
+ stat.dump(log);
+ }
+
+ public void add(OperationStatistic stat) {
+ StatAggregate agg = stats.get(stat.getClass());
+
+ if (agg == null) {
+ StatAggregate old = stats.putIfAbsent(stat.getClass(), agg = new StatAggregate(stat));
+
+ if (old != null)
+ agg = old;
+ }
+
+ agg.add(stat);
+ }
+
+ public CacheStatistics cache() {
+ return cache;
+ }
+
+ /**
+ *
+ */
+ static class StatAggregate {
+ /** */
+ private final LongAdder8 totalTime = new LongAdder8();
+
+ /** */
+ private final LongAdder8 cnt = new LongAdder8();
+
+ /** */
+ private final LongAdder8[] times;
+
+ /** */
+ private final OperationStatistic op;
+
+ StatAggregate(OperationStatistic op) {
+ this.op = op;
+
+ this.times = new LongAdder8[op.time().length];
+
+ for (int i = 0; i < times.length; i++)
+ times[i] = new LongAdder8();
+ }
+
+ void dump(IgniteLogger log) {
+ long cnt = this.cnt.sumThenReset();
+ long totalTime = this.totalTime.sumThenReset();
+
+ if (cnt > 0) {
+ double totAvg = (totalTime / (double)cnt);
+
+ log.info(String.format("Total statistic [name=%s, cnt=%d, avg=%.2f]",
+ op.getClass().getSimpleName(),
+ cnt,
+ totAvg));
+
+ for (int i = 0; i < times.length; i++) {
+ long time = times[i].sumThenReset();
+
+ if (time > 0) {
+ double avg = (time / (double)cnt);
+
+ log.info(String.format("Part statistic [name=%s, cnt=%d, avg=%.2f, p=%.2f]",
+ op.opName(i),
+ cnt,
+ avg,
+ avg / totAvg));
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < times.length; i++)
+ times[i].sumThenReset();
+ }
+ }
+
+ public void add(OperationStatistic op) {
+ if (op.endTime() > 0) {
+ cnt.increment();
+
+ totalTime.add(op.endTime() - op.startTime());
+
+ long time[] = op.time();
+
+ for (int i = 0; i < time.length; i++) {
+ long time0 = time[i];
+
+ if (time0 > 0)
+ times[i].add(time0);
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java b/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
new file mode 100644
index 0000000..6de5f5e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/OperationStatistic.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.util;
+
+import java.util.Arrays;
+
+/**
+ *
+ */
+public class OperationStatistic {
+ /** */
+ private long startTime;
+
+ /** */
+ private long endTime;
+
+ /** */
+ private final long[] time;
+
+ OperationStatistic(int ops) {
+ time = new long[ops];
+ }
+
+ public final long[] time() {
+ return time;
+ }
+
+ public final long startTime() {
+ return startTime;
+ }
+
+ public final long endTime() {
+ return endTime;
+ }
+
+ public String opName(int op) {
+ return "N/A";
+ }
+
+ public final void start() {
+ startTime = System.nanoTime();
+
+ Arrays.fill(time, -1L);
+ }
+
+ public final void end() {
+ endTime = System.nanoTime();
+ }
+
+ public final void startOp(int op) {
+ assert time[op] == -1L : time[op];
+
+ time[op] = System.nanoTime();
+ }
+
+ public final void endOp(int op) {
+ long start = time[op];
+
+ assert start > 0 : start;
+
+ time[op] = System.nanoTime() - start;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java b/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
new file mode 100644
index 0000000..fbd72b0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/PutStatistic.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.util;
+
+/**
+ *
+ */
+public class PutStatistic extends OperationStatistic {
+ /** */
+ private static final Ops VALS[] = Ops.values();
+
+ PutStatistic() {
+ super(VALS.length);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String opName(int op) {
+ return VALS[op].name();
+ }
+
+ /**
+ *
+ */
+ public enum Ops {
+ /** */
+ UPDATE_INTERNAL,
+
+ /** */
+ FIND_ONE,
+
+ /** */
+ LOCK,
+
+ /** */
+ UNLOCK,
+
+ /** */
+ STORE_ADD,
+
+ /** */
+ STORE_RMV,
+
+ /** */
+ TREE_PUT;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/658d2075/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
index cec9e30..71d4886 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
@@ -91,7 +91,8 @@ public class GridCacheTestContext<K, V> extends GridCacheContext<K, V> {
null,
new CacheOsConflictResolutionManager<K, V>(),
new CachePluginManager(ctx, new CacheConfiguration()),
- new GridCacheAffinityManager()
+ new GridCacheAffinityManager(),
+ null
);
store().initialize(null, new IdentityHashMap<CacheStore, ThreadLocal>());