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/05 14:42:05 UTC
[43/50] [abbrv] ignite git commit: debugging TC hangs
debugging TC hangs
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/65fc89f3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/65fc89f3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/65fc89f3
Branch: refs/heads/ignite-comm-balance-master
Commit: 65fc89f3a8f951b8568e6585affd8274976d4248
Parents: 6414b3f
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Thu Dec 1 19:12:31 2016 +0700
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Thu Dec 1 19:12:31 2016 +0700
----------------------------------------------------------------------
.../ignite/internal/util/IgniteUtils.java | 2 +-
.../ignite/internal/util/StripedExecutor.java | 52 ++++++++++++++++----
2 files changed, 44 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/65fc89f3/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index aefcbb5..e95fa18 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -1302,7 +1302,7 @@ public abstract class IgniteUtils {
public static void printStackTrace(long threadId, GridStringBuilder sb) {
ThreadMXBean mxBean = ManagementFactory.getThreadMXBean();
- ThreadInfo threadInfo = mxBean.getThreadInfo(threadId);
+ ThreadInfo threadInfo = mxBean.getThreadInfo(threadId, Integer.MAX_VALUE);
printThreadInfo(threadInfo, sb, Collections.<Long>emptySet());
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/65fc89f3/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 189d64e..7db75bd 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
@@ -67,9 +67,11 @@ public class StripedExecutor implements ExecutorService {
stripes[i].start();
}
- // TODO
+ // 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);
@@ -78,8 +80,13 @@ public class StripedExecutor implements ExecutorService {
return;
}
- for (Stripe stripe : stripes) {
- if (stripe.queueSize() > 0) {
+ 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();
@@ -87,15 +94,24 @@ public class StripedExecutor implements ExecutorService {
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("deadlock: ").a(deadlockPresent).a(U.nl())
+ .a("completed: ").a(completedCnt).a(U.nl());
- U.printStackTrace(stripe.thread.getId(), sb);
+ U.printStackTrace(
+ stripe.thread.getId(),
+ sb);
String msg = sb.toString();
- U.warn(log, msg);
- U.warn(null, msg);
+ U.warn(
+ log,
+ msg);
+ U.warn(
+ null,
+ msg);
}
+ else
+ cntrs[i] = completedCnt;
}
}
}
@@ -337,6 +353,12 @@ public class StripedExecutor implements ExecutorService {
/** Stopping flag. */
private volatile boolean stopping;
+ /** */
+ private volatile long completedCnt;
+
+ /** */
+ private volatile boolean active;
+
/** Thread executing the loop. */
protected Thread thread;
@@ -399,8 +421,17 @@ public class StripedExecutor implements ExecutorService {
try {
cmd = take();
- if (cmd != null)
- cmd.run();
+ if (cmd != null) {
+ active = true;
+
+ try {
+ cmd.run();
+ }
+ finally {
+ active = false;
+ completedCnt++;
+ }
+ }
}
catch (InterruptedException e) {
stopping = true;
@@ -433,6 +464,9 @@ public class StripedExecutor implements ExecutorService {
*/
abstract int queueSize();
+ /**
+ * @return Stripe's queue to string presentation.
+ */
abstract String queueToString();
/** {@inheritDoc} */