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 2016/12/06 08:09:08 UTC
[1/7] ignite git commit: ignite-4332 Usage of cache.getEntry inside
GridCacheQueryManager.runQuery causes to remote operations
Repository: ignite
Updated Branches:
refs/heads/ignite-comm-balance-master 2f1828e25 -> f11bb6bcd
ignite-4332 Usage of cache.getEntry inside GridCacheQueryManager.runQuery causes to remote operations
(cherry picked from commit c06e401)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a0371d80
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a0371d80
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a0371d80
Branch: refs/heads/ignite-comm-balance-master
Commit: a0371d80030b4ff6523f5141792e7765e8540e77
Parents: 979ecb4
Author: Eduard Shangareev <es...@gridgain.com>
Authored: Wed Nov 30 17:34:47 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Tue Dec 6 11:22:28 2016 +0700
----------------------------------------------------------------------
.../cache/query/GridCacheQueryManager.java | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a0371d80/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index 00a9181..01b7b34 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -55,6 +55,7 @@ import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteKernal;
import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
+import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
import org.apache.ignite.internal.processors.cache.CacheMetricsImpl;
import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
@@ -1515,9 +1516,12 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
metrics.addGetTimeNanos(System.nanoTime() - start);
}
+ K key0 = null;
+ V val0 = null;
+
if (readEvt) {
- K key0 = (K)cctx.unwrapBinaryIfNeeded(key, qry.keepBinary());
- V val0 = (V)cctx.unwrapBinaryIfNeeded(val, qry.keepBinary());
+ key0 = (K)cctx.unwrapBinaryIfNeeded(key, qry.keepBinary());
+ val0 = (V)cctx.unwrapBinaryIfNeeded(val, qry.keepBinary());
switch (type) {
case SQL:
@@ -1586,12 +1590,12 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
}
if (rdc != null || trans != null) {
- Cache.Entry<K, V> entry;
+ if (key0 == null)
+ key0 = (K)cctx.unwrapBinaryIfNeeded(key, qry.keepBinary());
+ if (val0 == null)
+ val0 = (V)cctx.unwrapBinaryIfNeeded(val, qry.keepBinary());
- if (qry.keepBinary())
- entry = cache.<K, V>keepBinary().getEntry(key);
- else
- entry = cache.<K, V>getEntry(key);
+ Cache.Entry<K, V> entry = new CacheEntryImpl(key0, val0);
// Reduce.
if (rdc != null) {
[3/7] ignite git commit: minor
Posted by sb...@apache.org.
minor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5076c478
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5076c478
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5076c478
Branch: refs/heads/ignite-comm-balance-master
Commit: 5076c478bc10876dd2f4e1d20dc2d334b4afa7a7
Parents: f7057eb
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Tue Dec 6 11:27:49 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Tue Dec 6 11:27:49 2016 +0700
----------------------------------------------------------------------
.../internal/processors/cache/query/GridCacheQueryRequest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/5076c478/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
index dbd5fbd..9f965d8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryRequest.java
@@ -121,7 +121,7 @@ public class GridCacheQueryRequest extends GridCacheMessage implements GridCache
private int taskHash;
/** Partition. */
- private int part;
+ private int part = -1;
/** */
private AffinityTopologyVersion topVer;
[7/7] ignite git commit: Merge remote-tracking branch
'remotes/community/ignite-comm-balance' into ignite-comm-balance-master
Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/community/ignite-comm-balance' into ignite-comm-balance-master
# Conflicts:
# modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f11bb6bc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f11bb6bc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f11bb6bc
Branch: refs/heads/ignite-comm-balance-master
Commit: f11bb6bcd274f2f33f410c4e9be78ca4a5bbac1c
Parents: 3d28a65 21ea0b8
Author: sboikov <sb...@gridgain.com>
Authored: Tue Dec 6 11:08:58 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Dec 6 11:08:58 2016 +0300
----------------------------------------------------------------------
.../configuration/IgniteConfiguration.java | 50 ++++---
.../apache/ignite/internal/IgniteKernal.java | 43 ++++--
.../org/apache/ignite/internal/IgnitionEx.java | 4 +-
.../managers/communication/GridIoManager.java | 5 +-
.../GridCachePartitionExchangeManager.java | 2 +-
.../GridDistributedTxFinishResponse.java | 32 +----
.../cache/query/GridCacheQueryRequest.java | 2 +-
.../ignite/internal/util/StripedExecutor.java | 132 +++++++++----------
.../ignite/tools/classgen/ClassesGenerator.java | 7 +-
9 files changed, 143 insertions(+), 134 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f11bb6bc/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index 1648c44,e229141..4972d1f
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@@ -1007,10 -1031,13 +1032,12 @@@ public class IgniteKernal implements Ig
// at least one waiting request, then it is possible starvation.
if (exec.getPoolSize() == exec.getActiveCount() && completedCnt == lastCompletedCnt &&
!exec.getQueue().isEmpty())
- LT.warn(log, "Possible thread pool starvation detected (no task completed in last " +
- interval + "ms, is executorService pool size large enough?)");
+ LT.warn(
+ log,
- null,
+ "Possible thread pool starvation detected (no task completed in last " +
+ interval + "ms, is " + pool + " thread pool size large enough?)");
- lastCompletedCnt = completedCnt;
+ return completedCnt;
}
}, interval, interval);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/f11bb6bc/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f11bb6bc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
[6/7] ignite git commit: Correct partition() method for new 'single'
requests.
Posted by sb...@apache.org.
Correct partition() method for new 'single' requests.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3d28a656
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3d28a656
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3d28a656
Branch: refs/heads/ignite-comm-balance-master
Commit: 3d28a65649bab42239339e2202731ae780909ead
Parents: 2f1828e
Author: sboikov <sb...@gridgain.com>
Authored: Tue Dec 6 10:51:39 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Dec 6 10:51:39 2016 +0300
----------------------------------------------------------------------
.../dht/atomic/GridDhtAtomicSingleUpdateRequest.java | 5 +++++
.../dht/atomic/GridNearAtomicSingleUpdateRequest.java | 5 +++++
2 files changed, 10 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/3d28a656/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
index a03d948..0af7cf5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateRequest.java
@@ -235,6 +235,11 @@ public class GridDhtAtomicSingleUpdateRequest extends GridDhtAtomicAbstractUpdat
}
/** {@inheritDoc} */
+ @Override public int partition() {
+ return partId;
+ }
+
+ /** {@inheritDoc} */
@Override public int partitionId(int idx) {
assert idx == 0 : idx;
http://git-wip-us.apache.org/repos/asf/ignite/blob/3d28a656/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java
index 1c1addd..c3e9fbe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateRequest.java
@@ -125,6 +125,11 @@ public class GridNearAtomicSingleUpdateRequest extends GridNearAtomicAbstractSin
);
}
+ /** {@inheritDoc} */
+ @Override public int partition() {
+ return partId;
+ }
+
/**
* @param key Key to add.
* @param val Optional update value.
[4/7] ignite git commit: finalizing
Posted by sb...@apache.org.
finalizing
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ff7f0b29
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ff7f0b29
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ff7f0b29
Branch: refs/heads/ignite-comm-balance-master
Commit: ff7f0b294a9592e6901c018fd0d0caddc41ed4ba
Parents: 5076c47
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Tue Dec 6 12:59:26 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Tue Dec 6 12:59:26 2016 +0700
----------------------------------------------------------------------
.../configuration/IgniteConfiguration.java | 50 ++++++++++++--------
.../org/apache/ignite/internal/IgnitionEx.java | 4 +-
.../managers/communication/GridIoManager.java | 2 +-
.../GridCachePartitionExchangeManager.java | 2 +-
.../GridDistributedTxFinishResponse.java | 32 +------------
.../ignite/internal/util/StripedExecutor.java | 3 ++
.../ignite/tools/classgen/ClassesGenerator.java | 7 +--
7 files changed, 43 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 4c1544d..ba31c35 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -74,7 +74,6 @@ import org.apache.ignite.spi.loadbalancing.roundrobin.RoundRobinLoadBalancingSpi
import org.apache.ignite.spi.swapspace.SwapSpaceSpi;
import org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi;
import org.apache.ignite.ssl.SslContextFactory;
-import org.apache.ignite.thread.IgniteThreadPoolExecutor;
import static org.apache.ignite.plugin.segmentation.SegmentationPolicy.STOP;
@@ -231,15 +230,18 @@ public class IgniteConfiguration {
/** Logger. */
private IgniteLogger log;
- /** Use striped pool for internal requests processing when possible (e.g. cache requests). */
- private boolean useStripedPool = true;
-
/** Public pool size. */
private int pubPoolSize = DFLT_PUBLIC_THREAD_CNT;
/** Async Callback pool size. */
private int callbackPoolSize = DFLT_PUBLIC_THREAD_CNT;
+ /**
+ * Use striped pool for internal requests processing when possible
+ * (e.g. cache requests per-partition striping).
+ */
+ private int stripedPoolSize = DFLT_PUBLIC_THREAD_CNT;
+
/** System pool size. */
private int sysPoolSize = DFLT_SYSTEM_CORE_THREAD_CNT;
@@ -557,13 +559,13 @@ public class IgniteConfiguration {
sndRetryDelay = cfg.getNetworkSendRetryDelay();
sslCtxFactory = cfg.getSslContextFactory();
storeSesLsnrs = cfg.getCacheStoreSessionListenerFactories();
+ stripedPoolSize = cfg.getStripedPoolSize();
svcCfgs = cfg.getServiceConfiguration();
sysPoolSize = cfg.getSystemThreadPoolSize();
timeSrvPortBase = cfg.getTimeServerPortBase();
timeSrvPortRange = cfg.getTimeServerPortRange();
txCfg = cfg.getTransactionConfiguration();
userAttrs = cfg.getUserAttributes();
- useStripedPool = cfg.isUseStripedPool();
utilityCacheKeepAliveTime = cfg.getUtilityCacheKeepAliveTime();
utilityCachePoolSize = cfg.getUtilityCacheThreadPoolSize();
waitForSegOnStart = cfg.isWaitForSegmentOnStart();
@@ -717,31 +719,41 @@ public class IgniteConfiguration {
}
/**
- * Returns {@code true} if striped pool should be used for public
- * pool and system pools. Default is {@code true}. If {@code false} then,
- * {@link IgniteThreadPoolExecutor} is used.
+ * Returns striped pool size that should be used for cache requests
+ * processing.
+ * <p>
+ * If set to non-positive value then requests get processed in system pool.
* <p>
- * Striped pool is better for typical cache operations and short-term
- * compute jobs.
+ * Striped pool is better for typical cache operations.
*
- * @return {@code True} if striped pool should be used for public
- * pool and system pools.
+ * @return Positive value if striped pool should be initialized
+ * with configured number of threads (stripes) and used for requests processing
+ * or non-positive value to process requests in system pool.
*
* @see #getPublicThreadPoolSize()
* @see #getSystemThreadPoolSize()
*/
- public boolean isUseStripedPool() {
- return useStripedPool;
+ public int getStripedPoolSize() {
+ return stripedPoolSize;
}
/**
- * Enables/disables use of striped pools for public and system pools.
+ * Sets striped pool size that should be used for cache requests
+ * processing.
+ * <p>
+ * If set to non-positive value then requests get processed in system pool.
+ * <p>
+ * Striped pool is better for typical cache operations.
+ *
+ * @param stripedPoolSize Positive value if striped pool should be initialized
+ * with passed in number of threads (stripes) and used for requests processing
+ * or non-positive value to process requests in system pool.
*
- * @param useStripedPool {@code True} if striped pool should be used for public
- * pool and system pools.
+ * @see #getPublicThreadPoolSize()
+ * @see #getSystemThreadPoolSize()
*/
- public void setUseStripedPool(boolean useStripedPool) {
- this.useStripedPool = useStripedPool;
+ public void setStripedPoolSize(int stripedPoolSize) {
+ this.stripedPoolSize = stripedPoolSize;
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 54ca6d0..3858d87 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -1664,8 +1664,8 @@ public class IgnitionEx {
sysExecSvc.allowCoreThreadTimeOut(true);
- if (cfg.isUseStripedPool())
- stripedExecSvc = new StripedExecutor(cfg.getPublicThreadPoolSize(), cfg.getGridName(), "sys", log);
+ if (cfg.getStripedPoolSize() > 0)
+ stripedExecSvc = new StripedExecutor(cfg.getStripedPoolSize(), cfg.getGridName(), "sys", log);
// Note that since we use 'LinkedBlockingQueue', number of
// maximum threads has no effect.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index 345460c..7ef7bc0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -804,7 +804,7 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
}
}
- if (ctx.config().isUseStripedPool() &&
+ if (ctx.config().getStripedPoolSize() > 0 &&
plc == GridIoPolicy.SYSTEM_POOL &&
msg.partition() != Integer.MIN_VALUE
) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 521a322..f922465 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -1645,7 +1645,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
fut.onDone();
}
}
- }, /*system pool*/false); //Todo: fix to not no use system pool properly.
+ }, /*system pool*/false); //TODO https://issues.apache.org/jira/browse/IGNITE-4242
}
else {
U.log(log, "Skipping rebalancing (obsolete exchange ID) " +
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxFinishResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxFinishResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxFinishResponse.java
index b922628..c5cf332 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxFinishResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/GridDistributedTxFinishResponse.java
@@ -87,37 +87,7 @@ public class GridDistributedTxFinishResponse extends GridCacheMessage {
/** {@inheritDoc} */
@Override public int partition() {
- /*
- TODO possible starvation - need to fix sync waits in internal threads.
- Thread [name="sys-stripe-1-#30%dht.GridCacheColocatedTxExceptionSelfTest1%", id=46, state=WAITING, blockCnt=0, waitCnt=7]
- Lock [object=o.a.i.i.processors.cache.distributed.dht.GridDhtTxFinishFuture@212874c9, ownerName=null, ownerId=-1]
- at sun.misc.Unsafe.park(Native Method)
- at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
- at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
- at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
- at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
- at o.a.i.i.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:159)
- at o.a.i.i.util.future.GridFutureAdapter.get(GridFutureAdapter.java:117)
- at o.a.i.i.processors.cache.distributed.dht.GridDhtTxFinishFuture.onError(GridDhtTxFinishFuture.java:183)
- at o.a.i.i.processors.cache.distributed.dht.GridDhtTxLocal.finishCommit(GridDhtTxLocal.java:543)
- at o.a.i.i.processors.cache.distributed.dht.GridDhtTxLocal.commitAsync(GridDhtTxLocal.java:580)
- at o.a.i.i.processors.cache.transactions.IgniteTxHandler.finishDhtLocal(IgniteTxHandler.java:849)
- at o.a.i.i.processors.cache.transactions.IgniteTxHandler.finish(IgniteTxHandler.java:728)
- at o.a.i.i.processors.cache.transactions.IgniteTxHandler.processNearTxFinishRequest(IgniteTxHandler.java:687)
- at o.a.i.i.processors.cache.transactions.IgniteTxHandler$3.apply(IgniteTxHandler.java:157)
- at o.a.i.i.processors.cache.transactions.IgniteTxHandler$3.apply(IgniteTxHandler.java:155)
- at o.a.i.i.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:758)
- at o.a.i.i.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:363)
- at o.a.i.i.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:287)
- at o.a.i.i.processors.cache.GridCacheIoManager.access$000(GridCacheIoManager.java:89)
- at o.a.i.i.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:232)
- at o.a.i.i.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1212)
- at o.a.i.i.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:840)
- at o.a.i.i.managers.communication.GridIoManager.access$2100(GridIoManager.java:110)
- at o.a.i.i.managers.communication.GridIoManager$6.run(GridIoManager.java:785)
- at o.a.i.i.util.StripedExecutor$Stripe.run(StripedExecutor.java:362)
- at java.lang.Thread.run(Thread.java:724)
- */
+ // TODO https://issues.apache.org/jira/browse/IGNITE-4371
return Integer.MIN_VALUE;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
index 7db75bd..69f6b67 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
@@ -34,6 +34,7 @@ import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.LockSupport;
import org.apache.ignite.IgniteInterruptedException;
import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.util.typedef.internal.A;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.thread.IgniteThread;
@@ -52,6 +53,8 @@ public class StripedExecutor implements ExecutorService {
* @param cnt Count.
*/
public StripedExecutor(int cnt, String gridName, String poolName, final IgniteLogger log) {
+ A.ensure(cnt > 0, "cnt > 0");
+
boolean success = false;
stripes = new Stripe[cnt];
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff7f0b29/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java
----------------------------------------------------------------------
diff --git a/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java b/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java
index c0a71a2..369e318 100644
--- a/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java
+++ b/modules/tools/src/main/java/org/apache/ignite/tools/classgen/ClassesGenerator.java
@@ -122,10 +122,11 @@ public class ClassesGenerator {
for (String err : errs)
sb.append(" ").append(err).append('\n');
- System.out.println(sb.toString().trim());
+ String msg = sb.toString().trim();
- // TODO
- // throw new Exception(sb.toString().trim());
+ System.out.println(msg);
+
+ throw new Exception(msg);
}
PrintStream out = new PrintStream(new File(basePath,
[2/7] ignite git commit: minor
Posted by sb...@apache.org.
minor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f7057eb9
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f7057eb9
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f7057eb9
Branch: refs/heads/ignite-comm-balance-master
Commit: f7057eb948cef92c794fd702df29ecfd0637af1a
Parents: a0371d8
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Tue Dec 6 11:23:27 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Tue Dec 6 11:23:27 2016 +0700
----------------------------------------------------------------------
.../ignite/internal/managers/communication/GridIoManager.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f7057eb9/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index ce53e6e..345460c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -806,8 +806,7 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
if (ctx.config().isUseStripedPool() &&
plc == GridIoPolicy.SYSTEM_POOL &&
- msg.partition() != Integer.MIN_VALUE &&
- msg.message().directType() != 58 // TODO Query request should go to former pool.
+ msg.partition() != Integer.MIN_VALUE
) {
ctx.getStripedExecutorService().execute(msg.partition(), c);
[5/7] ignite git commit: minor
Posted by sb...@apache.org.
minor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/21ea0b8b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/21ea0b8b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/21ea0b8b
Branch: refs/heads/ignite-comm-balance-master
Commit: 21ea0b8b497b6c0c35f894ed5a5ee920c2437d09
Parents: ff7f0b2
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Tue Dec 6 13:36:15 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Tue Dec 6 13:36:15 2016 +0700
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 44 +++++--
.../ignite/internal/util/StripedExecutor.java | 129 +++++++++----------
2 files changed, 99 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/21ea0b8b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index fdd1bda..e229141 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -680,7 +680,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
ExecutorService marshCachePool,
final ExecutorService execSvc,
final ExecutorService sysExecSvc,
- StripedExecutor stripedExecSvc,
+ final StripedExecutor stripedExecSvc,
ExecutorService p2pExecSvc,
ExecutorService mgmtExecSvc,
ExecutorService igfsExecSvc,
@@ -992,24 +992,52 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
starveTask = ctx.timeout().schedule(new Runnable() {
/** Last completed task count. */
- private long lastCompletedCnt;
+ private long lastCompletedCntPub;
+
+ /** Last completed task count. */
+ private long lastCompletedCntSys;
@Override public void run() {
- if (!(execSvc instanceof ThreadPoolExecutor))
- return;
+ if (execSvc instanceof ThreadPoolExecutor) {
+ ThreadPoolExecutor exec = (ThreadPoolExecutor)execSvc;
+
+ lastCompletedCntPub = checkPoolStarvation(exec, lastCompletedCntPub, "public");
+ }
- ThreadPoolExecutor exec = (ThreadPoolExecutor)execSvc;
+ if (sysExecSvc instanceof ThreadPoolExecutor) {
+ ThreadPoolExecutor exec = (ThreadPoolExecutor)sysExecSvc;
+
+ lastCompletedCntSys = checkPoolStarvation(exec, lastCompletedCntSys, "system");
+ }
+
+ if (stripedExecSvc != null)
+ stripedExecSvc.checkStarvation();
+ }
+ /**
+ * @param exec Thread pool executor to check.
+ * @param lastCompletedCnt Last completed tasks count.
+ * @param pool Pool name for message.
+ * @return Current completed tasks count.
+ */
+ private long checkPoolStarvation(
+ ThreadPoolExecutor exec,
+ long lastCompletedCnt,
+ String pool
+ ) {
long completedCnt = exec.getCompletedTaskCount();
// If all threads are active and no task has completed since last time and there is
// at least one waiting request, then it is possible starvation.
if (exec.getPoolSize() == exec.getActiveCount() && completedCnt == lastCompletedCnt &&
!exec.getQueue().isEmpty())
- LT.warn(log, null, "Possible thread pool starvation detected (no task completed in last " +
- interval + "ms, is executorService pool size large enough?)");
+ LT.warn(
+ log,
+ null,
+ "Possible thread pool starvation detected (no task completed in last " +
+ interval + "ms, is " + pool + " thread pool size large enough?)");
- lastCompletedCnt = completedCnt;
+ return completedCnt;
}
}, interval, interval);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/21ea0b8b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
index 69f6b67..e9ec74b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedExecutor.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.util;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -47,6 +48,12 @@ public class StripedExecutor implements ExecutorService {
/** Stripes. */
private final Stripe[] stripes;
+ /** For starvation checks. */
+ private final long[] completedCntrs;
+
+ /** */
+ private final IgniteLogger log;
+
/**
* Constructor.
*
@@ -59,6 +66,12 @@ public class StripedExecutor implements ExecutorService {
stripes = new Stripe[cnt];
+ completedCntrs = new long[cnt];
+
+ Arrays.fill(completedCntrs, -1);
+
+ this.log = log;
+
try {
for (int i = 0; i < cnt; i++) {
stripes[i] = new StripeConcurrentQueue(
@@ -70,60 +83,6 @@ public class StripedExecutor implements ExecutorService {
stripes[i].start();
}
- // TODO - move to starvation checker
- Thread t = new Thread(new Runnable() {
- @Override public void run() {
- long[] cntrs = new long[stripes.length];
-
- for (; !isShutdown();) {
- try {
- Thread.sleep(10_000);
- }
- catch (InterruptedException e) {
- return;
- }
-
- for (int i = 0; i < stripes.length; i++) {
- Stripe stripe = stripes[i];
-
- long completedCnt = stripe.completedCnt;
-
- if (cntrs[i] == completedCnt &&
- stripe.active) {
- boolean deadlockPresent = U.deadlockPresent();
-
- GridStringBuilder sb = new GridStringBuilder();
-
- sb.a(">>> Possible starvation in striped pool: ")
- .a(stripe.thread.getName()).a(U.nl())
- .a(stripe.queueToString()).a(U.nl())
- .a("deadlock: ").a(deadlockPresent).a(U.nl())
- .a("completed: ").a(completedCnt).a(U.nl());
-
- U.printStackTrace(
- stripe.thread.getId(),
- sb);
-
- String msg = sb.toString();
-
- U.warn(
- log,
- msg);
- U.warn(
- null,
- msg);
- }
- else
- cntrs[i] = completedCnt;
- }
- }
- }
- });
-
- t.setDaemon(true);
-
- t.start();
-
success = true;
}
catch (Error | RuntimeException e) {
@@ -147,6 +106,45 @@ public class StripedExecutor implements ExecutorService {
}
/**
+ * Checks starvation in striped pool. Maybe too verbose
+ * but this is needed to faster debug possible issues.
+ */
+ public void checkStarvation() {
+ for (int i = 0; i < stripes.length; i++) {
+ Stripe stripe = stripes[i];
+
+ long completedCnt = stripe.completedCnt;
+
+ boolean active = stripe.active;
+
+ if (completedCntrs[i] != -1 &&
+ completedCntrs[i] == completedCnt &&
+ active) {
+ boolean deadlockPresent = U.deadlockPresent();
+
+ GridStringBuilder sb = new GridStringBuilder();
+
+ sb.a(">>> Possible starvation in striped pool: ")
+ .a(stripe.thread.getName()).a(U.nl())
+ .a(stripe.queueToString()).a(U.nl())
+ .a("deadlock: ").a(deadlockPresent).a(U.nl())
+ .a("completed: ").a(completedCnt).a(U.nl());
+
+ U.printStackTrace(
+ stripe.thread.getId(),
+ sb);
+
+ String msg = sb.toString();
+
+ U.warn(log, msg);
+ }
+
+ if (active || completedCnt > 0)
+ completedCntrs[i] = completedCnt;
+ }
+ }
+
+ /**
* @return Stripes count.
*/
public int stripes() {
@@ -246,28 +244,27 @@ public class StripedExecutor implements ExecutorService {
}
/**
- * @param log Logger to dump to.
+ * @return Return total queue size of all stripes.
*/
- public void dumpStats(IgniteLogger log) {
- StringBuilder sb = new StringBuilder("Stats ");
+ public int queueSize() {
+ int size = 0;
- for (int i = 0; i < stripes.length; i++)
- sb.append(i).append(" [qSize=").append(stripes[i].queueSize()).append("]; ");
+ for (Stripe stripe : stripes)
+ size += stripe.queueSize();
- if (log.isInfoEnabled())
- log.info(sb.toString());
+ return size;
}
/**
- * @return Return total queue size of all stripes.
+ * @return Completed tasks count.
*/
- public int queueSize() {
- int size = 0;
+ public long completedTasks() {
+ long cnt = 0;
for (Stripe stripe : stripes)
- size += stripe.queueSize();
+ cnt += stripe.completedCnt;
- return size;
+ return cnt;
}
/**