You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sh...@apache.org on 2016/11/01 02:38:01 UTC
[42/50] [abbrv] ignite git commit: IGNITE-3027 -
TcpDiscoveryImpl.registerLocalNodeAddress() has an infinite loop (cherry
picked from commit 1f8b394)
IGNITE-3027 - TcpDiscoveryImpl.registerLocalNodeAddress() has an infinite loop
(cherry picked from commit 1f8b394)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/90df322d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/90df322d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/90df322d
Branch: refs/heads/ignite-2788
Commit: 90df322d534c086230f9baa1608853ed7db25750
Parents: 8873d43
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Thu Apr 28 14:32:30 2016 +0300
Committer: shtykh_roman <rs...@yahoo.com>
Committed: Fri May 13 16:11:16 2016 +0900
----------------------------------------------------------------------
.../ignite/spi/discovery/tcp/ServerImpl.java | 5 ++-
.../spi/discovery/tcp/TcpDiscoveryImpl.java | 10 ++++++
.../spi/discovery/tcp/TcpDiscoverySelfTest.java | 34 ++++++++++++++++++++
3 files changed, 46 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/90df322d/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index d7dd8c8..05bb1e6 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -160,7 +160,6 @@ import static org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusChe
/**
*
*/
-@SuppressWarnings("All")
class ServerImpl extends TcpDiscoveryImpl {
/** */
private static final int ENSURED_MSG_HIST_SIZE = getInteger(IGNITE_DISCOVERY_HISTORY_SIZE, 1024 * 10);
@@ -1643,7 +1642,7 @@ class ServerImpl extends TcpDiscoveryImpl {
* @return {@code True} if given parameters contain the same permissions, {@code False} otherwise.
*/
private boolean permissionsEqual(SecurityPermissionSet locPerms, SecurityPermissionSet rmtPerms) {
- boolean dfltAllowMatch = !(locPerms.defaultAllowAll() ^ rmtPerms.defaultAllowAll());
+ boolean dfltAllowMatch = locPerms.defaultAllowAll() == rmtPerms.defaultAllowAll();
boolean bothHaveSamePerms = F.eqNotOrdered(rmtPerms.systemPermissions(), locPerms.systemPermissions()) &&
F.eqNotOrdered(rmtPerms.cachePermissions(), locPerms.cachePermissions()) &&
@@ -1964,7 +1963,7 @@ class ServerImpl extends TcpDiscoveryImpl {
private final Queue<TcpDiscoveryAbstractMessage> msgs = new ArrayDeque<>(MAX * 2);
/** Processed custom message IDs. */
- private Set<IgniteUuid> procCustomMsgs = new GridBoundedLinkedHashSet<IgniteUuid>(MAX * 2);
+ private Set<IgniteUuid> procCustomMsgs = new GridBoundedLinkedHashSet<>(MAX * 2);
/** Discarded message ID. */
private IgniteUuid discardId;
http://git-wip-us.apache.org/repos/asf/ignite/blob/90df322d/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
index 1aef728..41086d1 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryImpl.java
@@ -260,6 +260,9 @@ abstract class TcpDiscoveryImpl {
@SuppressWarnings("BusyWait")
protected final void registerLocalNodeAddress() throws IgniteSpiException {
// Make sure address registration succeeded.
+ // ... but limit it if join timeout is configured.
+ long start = spi.getJoinTimeout() > 0 ? U.currentTimeMillis() : 0;
+
while (true) {
try {
spi.ipFinder.initializeLocalAddresses(locNode.socketAddresses());
@@ -276,6 +279,13 @@ abstract class TcpDiscoveryImpl {
"(retrying every 2000 ms).");
}
+ if (start > 0 && (U.currentTimeMillis() - start) > spi.getJoinTimeout())
+ throw new IgniteSpiException(
+ "Failed to register local addresses with IP finder within join timeout " +
+ "(make sure IP finder configuration is correct, and operating system firewalls are disabled " +
+ "on all host machines, or consider increasing 'joinTimeout' configuration property) " +
+ "[joinTimeout=" + spi.getJoinTimeout() + ']');
+
try {
U.sleep(2000);
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/90df322d/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
index 45cd276..96c0e66 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySelfTest.java
@@ -1058,6 +1058,40 @@ public class TcpDiscoverySelfTest extends GridCommonAbstractTest {
}
/**
+ * @throws Exception If any error occurs.
+ */
+ public void testJoinTimeoutForIpFinder() throws Exception {
+ try {
+ // This start will fail as expected.
+ Throwable t = GridTestUtils.assertThrows(log, new Callable<Object>() {
+ @Override public Object call() throws Exception {
+ IgniteConfiguration c = getConfiguration("test-grid");
+
+ TcpDiscoverySpi disco = (TcpDiscoverySpi)c.getDiscoverySpi();
+
+ disco.setJoinTimeout(3000);
+ disco.setIpFinder(
+ new TcpDiscoveryVmIpFinder(true) {
+ @Override public void initializeLocalAddresses(Collection<InetSocketAddress> addrs)
+ throws IgniteSpiException {
+ throw new IgniteSpiException("Test exception.");
+ }
+ });
+
+ startGrid("test-grid", c);
+
+ return null;
+ }
+ }, IgniteException.class, null);
+
+ assert X.hasCause(t, IgniteSpiException.class) : "Unexpected exception: " + t;
+ }
+ finally {
+ stopAllGrids();
+ }
+ }
+
+ /**
* @throws Exception If failed.
*/
public void testDirtyIpFinder() throws Exception {