You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/12/12 22:36:11 UTC
[08/46] geode git commit: GEODE-2107: fix the threadleak when a
secondary sender is closed
GEODE-2107: fix the threadleak when a secondary sender is closed
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/c4ae846a
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/c4ae846a
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/c4ae846a
Branch: refs/heads/feature/GEODE-1930
Commit: c4ae846aa1689e2c5659b6ecc17e38689dd93976
Parents: 30bcdf8
Author: zhouxh <gz...@pivotal.io>
Authored: Wed Nov 16 17:10:18 2016 -0800
Committer: zhouxh <gz...@pivotal.io>
Committed: Wed Nov 16 17:10:18 2016 -0800
----------------------------------------------------------------------
.../AbstractGatewaySenderEventProcessor.java | 2 ++
.../cache/wan/GatewaySenderAdvisor.java | 29 ++++++++++++++------
2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/c4ae846a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
index b41ace4..820cd99 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/AbstractGatewaySenderEventProcessor.java
@@ -1130,6 +1130,8 @@ public abstract class AbstractGatewaySenderEventProcessor extends Thread {
// interrupted
}
}
+ } else {
+ this.sender.getSenderAdvisor().notifyPrimaryLock();
}
setIsStopped(true);
http://git-wip-us.apache.org/repos/asf/geode/blob/c4ae846a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
index 97cfac7..ace780e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
@@ -398,13 +398,23 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
eventProcessor.removeCacheListener();
}
+ logger.info(LocalizedMessage.create(
+ LocalizedStrings.SerialGatewaySenderImpl_0__BECOMING_PRIMARY_GATEWAYSENDER, this.sender));
+ notifyAndBecomePrimary();
+ new UpdateAttributesProcessor(this.sender).distribute(false);
+ }
+
+ public void notifyAndBecomePrimary() {
+ synchronized (this.primaryLock) {
+ setIsPrimary(true);
+ notifyPrimaryLock();
+ }
+ }
+
+ public void notifyPrimaryLock() {
synchronized (this.primaryLock) {
- this.isPrimary = true;
- logger.info(LocalizedMessage.create(
- LocalizedStrings.SerialGatewaySenderImpl_0__BECOMING_PRIMARY_GATEWAYSENDER, this.sender));
this.primaryLock.notifyAll();
}
- new UpdateAttributesProcessor(this.sender).distribute(false);
}
public void makeSecondary() {
@@ -470,11 +480,14 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
return;
}
synchronized (this.primaryLock) {
+ logger.info(LocalizedMessage.create(
+ LocalizedStrings.GatewayImpl_0__WAITING_TO_BECOME_PRIMARY_GATEWAY, this.sender.getId()));
while (!isPrimary()) {
- logger.info(LocalizedMessage.create(
- LocalizedStrings.GatewayImpl_0__WAITING_TO_BECOME_PRIMARY_GATEWAY,
- this.sender.getId()));
- this.primaryLock.wait();
+ this.primaryLock.wait(1000);
+ if (sender.getEventProcessor() != null && sender.getEventProcessor().isStopped()) {
+ logger.info("The event processor is stopped, not to wait for being primary any more.");
+ return;
+ }
}
}
}