You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by av...@apache.org on 2016/06/22 10:02:15 UTC
[1/5] ignite git commit: IGNITE-3341: Hadoop: Added ability to link
user-define native libraries to HadoopClassLoader.
Repository: ignite
Updated Branches:
refs/heads/master 5b4ac3743 -> 41f81da8f
IGNITE-3341: Hadoop: Added ability to link user-define native libraries to HadoopClassLoader.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/68b25df3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/68b25df3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/68b25df3
Branch: refs/heads/master
Commit: 68b25df3b3e1979c0972d75675f2c9aa2b48d9a7
Parents: a527bf8
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Jun 21 16:57:28 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Jun 21 17:11:22 2016 +0300
----------------------------------------------------------------------
.../configuration/HadoopConfiguration.java | 35 ++++++++++++++++++++
.../processors/hadoop/HadoopJobInfo.java | 3 +-
.../processors/hadoop/HadoopClassLoader.java | 26 +++++++++++++--
.../processors/hadoop/HadoopDefaultJobInfo.java | 8 ++---
.../hadoop/jobtracker/HadoopJobTracker.java | 14 ++++++--
.../child/HadoopChildProcessRunner.java | 2 +-
.../processors/hadoop/v2/HadoopV2Job.java | 14 ++++++--
.../hadoop/HadoopClassLoaderTest.java | 2 +-
.../processors/hadoop/HadoopSnappyTest.java | 2 +-
.../processors/hadoop/HadoopTasksV1Test.java | 2 +-
.../processors/hadoop/HadoopTasksV2Test.java | 2 +-
.../processors/hadoop/HadoopV2JobSelfTest.java | 2 +-
.../collections/HadoopAbstractMapTest.java | 6 ++--
13 files changed, 96 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
index 95ce9d3..5f68c84 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/HadoopConfiguration.java
@@ -17,8 +17,10 @@
package org.apache.ignite.configuration;
+import org.apache.ignite.lifecycle.LifecycleBean;
import org.apache.ignite.internal.processors.hadoop.HadoopMapReducePlanner;
import org.apache.ignite.internal.util.typedef.internal.S;
+import org.jetbrains.annotations.Nullable;
/**
* Ignite Hadoop Accelerator configuration.
@@ -51,6 +53,9 @@ public class HadoopConfiguration {
/** */
private int maxTaskQueueSize = DFLT_MAX_TASK_QUEUE_SIZE;
+ /** Library names. */
+ private String[] libNames;
+
/**
* Default constructor.
*/
@@ -71,6 +76,7 @@ public class HadoopConfiguration {
planner = cfg.getMapReducePlanner();
maxParallelTasks = cfg.getMaxParallelTasks();
maxTaskQueueSize = cfg.getMaxTaskQueueSize();
+ libNames = cfg.getNativeLibraryNames();
}
/**
@@ -169,6 +175,35 @@ public class HadoopConfiguration {
this.planner = planner;
}
+ /**
+ * Get native library names.
+ * <p>
+ * Ignite Hadoop Accelerator executes all Hadoop jobs and tasks in the same process, isolating them with help
+ * of classloaders. If Hadoop job or task loads a native library, it might lead to exception, because Java do
+ * not allow to load the same library multiple times from different classloaders. To overcome the problem,
+ * you should to the following:
+ * <ul>
+ * <li>Load necessary libraries in advance from base classloader; {@link LifecycleBean} is a good candidate
+ * for this;</li>
+ * <li>Add names of loaded libraries to this property, so that Hadoop engine is able to link them;</li>
+ * <li>Remove {@link System#load(String)} and {@link System#loadLibrary(String)} calls from your job/task.</li> *
+ * </ul>
+ *
+ * @return Native library names.
+ */
+ @Nullable public String[] getNativeLibraryNames() {
+ return libNames;
+ }
+
+ /**
+ * Set native library names. See {@link #getNativeLibraryNames()} for more information.
+ *
+ * @param libNames Native library names.
+ */
+ public void setNativeLibraryNames(@Nullable String... libNames) {
+ this.libNames = libNames;
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(HadoopConfiguration.class, this, super.toString());
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobInfo.java
index eda8e97..a3b1bb6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopJobInfo.java
@@ -58,11 +58,12 @@ public interface HadoopJobInfo extends Serializable {
* @param jobCls The job class.
* @param jobId Job ID.
* @param log Logger.
+ * @param libNames Optional additional native library names.
* @return Job.
* @throws IgniteCheckedException If failed.
*/
public HadoopJob createJob(Class<? extends HadoopJob> jobCls,
- HadoopJobId jobId, IgniteLogger log) throws IgniteCheckedException;
+ HadoopJobId jobId, IgniteLogger log, @Nullable String[] libNames) throws IgniteCheckedException;
/**
* @return Number of reducers configured for job.
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java
index 4448b2d..340b35b 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoader.java
@@ -99,6 +99,9 @@ public class HadoopClassLoader extends URLClassLoader implements ClassCache {
@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
private final String name;
+ /** Native library names. */
+ private final String[] libNames;
+
/**
* Gets name for Job class loader. The name is specific for local node id.
* @param locNodeId The local node id.
@@ -122,14 +125,19 @@ public class HadoopClassLoader extends URLClassLoader implements ClassCache {
}
/**
+ * Constructor.
+ *
* @param urls Urls.
+ * @param name Classloader name.
+ * @param libNames Optional additional native library names to be linked from parent classloader.
*/
- public HadoopClassLoader(URL[] urls, String name) {
+ public HadoopClassLoader(URL[] urls, String name, @Nullable String[] libNames) {
super(addHadoopUrls(urls), APP_CLS_LDR);
assert !(getParent() instanceof HadoopClassLoader);
this.name = name;
+ this.libNames = libNames;
initializeNativeLibraries();
}
@@ -159,9 +167,21 @@ public class HadoopClassLoader extends URLClassLoader implements ClassCache {
Vector vector = U.field(ldr, "nativeLibraries");
for (Object lib : vector) {
- String libName = U.field(lib, "name");
+ String name = U.field(lib, "name");
+
+ boolean add = name.contains(LIBHADOOP);
+
+ if (!add && libNames != null) {
+ for (String libName : libNames) {
+ if (libName != null && name.contains(libName)) {
+ add = true;
+
+ break;
+ }
+ }
+ }
- if (libName.contains(LIBHADOOP)) {
+ if (add) {
curVector.add(lib);
return;
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopDefaultJobInfo.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopDefaultJobInfo.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopDefaultJobInfo.java
index fe125fe..be2d9ca 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopDefaultJobInfo.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/HadoopDefaultJobInfo.java
@@ -82,15 +82,15 @@ public class HadoopDefaultJobInfo implements HadoopJobInfo, Externalizable {
}
/** {@inheritDoc} */
- @Override public HadoopJob createJob(Class<? extends HadoopJob> jobCls,
- HadoopJobId jobId, IgniteLogger log) throws IgniteCheckedException {
+ @Override public HadoopJob createJob(Class<? extends HadoopJob> jobCls, HadoopJobId jobId, IgniteLogger log,
+ @Nullable String[] libNames) throws IgniteCheckedException {
assert jobCls != null;
try {
Constructor<? extends HadoopJob> constructor = jobCls.getConstructor(HadoopJobId.class,
- HadoopDefaultJobInfo.class, IgniteLogger.class);
+ HadoopDefaultJobInfo.class, IgniteLogger.class, String[].class);
- return constructor.newInstance(jobId, this, log);
+ return constructor.newInstance(jobId, this, log, libNames);
}
// NB: java.lang.NoClassDefFoundError may be thrown from Class#getConstructor() call.
catch (Throwable t) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/jobtracker/HadoopJobTracker.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/jobtracker/HadoopJobTracker.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/jobtracker/HadoopJobTracker.java
index cdd8103..f3e17f3 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/jobtracker/HadoopJobTracker.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/jobtracker/HadoopJobTracker.java
@@ -157,7 +157,12 @@ public class HadoopJobTracker extends HadoopComponent {
assert jobCls == null;
- HadoopClassLoader ldr = new HadoopClassLoader(null, HadoopClassLoader.nameForJob(nodeId));
+ String[] libNames = null;
+
+ if (ctx.configuration() != null)
+ libNames = ctx.configuration().getNativeLibraryNames();
+
+ HadoopClassLoader ldr = new HadoopClassLoader(null, HadoopClassLoader.nameForJob(nodeId), libNames);
try {
jobCls = (Class<HadoopV2Job>)ldr.loadClass(HadoopV2Job.class.getName());
@@ -727,6 +732,7 @@ public class HadoopJobTracker extends HadoopComponent {
* @param jobId Job ID.
* @param plan Map-reduce plan.
*/
+ @SuppressWarnings({"unused", "ConstantConditions" })
private void printPlan(HadoopJobId jobId, HadoopMapReducePlan plan) {
log.info("Plan for " + jobId);
@@ -886,6 +892,8 @@ public class HadoopJobTracker extends HadoopComponent {
finishFut.onDone(jobId, meta.failCause());
}
+ assert job != null;
+
if (ctx.jobUpdateLeader())
job.cleanupStagingDirectory();
@@ -1052,7 +1060,7 @@ public class HadoopJobTracker extends HadoopComponent {
jobInfo = meta.jobInfo();
}
- job = jobInfo.createJob(jobCls, jobId, log);
+ job = jobInfo.createJob(jobCls, jobId, log, ctx.configuration().getNativeLibraryNames());
job.initialize(false, ctx.localNodeId());
@@ -1667,7 +1675,7 @@ public class HadoopJobTracker extends HadoopComponent {
if (val != null)
e.setValue(val);
else
- e.remove();;
+ e.remove();
return null;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
index a949141..4a946e9 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/taskexecutor/external/child/HadoopChildProcessRunner.java
@@ -134,7 +134,7 @@ public class HadoopChildProcessRunner {
assert job == null;
- job = req.jobInfo().createJob(HadoopV2Job.class, req.jobId(), log);
+ job = req.jobInfo().createJob(HadoopV2Job.class, req.jobId(), log, null);
job.initialize(true, nodeDesc.processId());
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/v2/HadoopV2Job.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/v2/HadoopV2Job.java b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/v2/HadoopV2Job.java
index b69447d..8804e29 100644
--- a/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/v2/HadoopV2Job.java
+++ b/modules/hadoop/src/main/java/org/apache/ignite/internal/processors/hadoop/v2/HadoopV2Job.java
@@ -93,6 +93,9 @@ public class HadoopV2Job implements HadoopJob {
/** Job info. */
protected final HadoopJobInfo jobInfo;
+ /** Native library names. */
+ private final String[] libNames;
+
/** */
private final JobID hadoopJobID;
@@ -119,16 +122,21 @@ public class HadoopV2Job implements HadoopJob {
private volatile byte[] jobConfData;
/**
+ * Constructor.
+ *
* @param jobId Job ID.
* @param jobInfo Job info.
* @param log Logger.
+ * @param libNames Optional additional native library names.
*/
- public HadoopV2Job(HadoopJobId jobId, final HadoopDefaultJobInfo jobInfo, IgniteLogger log) {
+ public HadoopV2Job(HadoopJobId jobId, final HadoopDefaultJobInfo jobInfo, IgniteLogger log,
+ @Nullable String[] libNames) {
assert jobId != null;
assert jobInfo != null;
this.jobId = jobId;
this.jobInfo = jobInfo;
+ this.libNames = libNames;
hadoopJobID = new JobID(jobId.globalId().toString(), jobId.localId());
@@ -220,7 +228,7 @@ public class HadoopV2Job implements HadoopJob {
}
/** {@inheritDoc} */
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "MismatchedQueryAndUpdateOfCollection" })
@Override public HadoopTaskContext getTaskContext(HadoopTaskInfo info) throws IgniteCheckedException {
T2<HadoopTaskType, Integer> locTaskId = new T2<>(info.type(), info.taskNumber());
@@ -242,7 +250,7 @@ public class HadoopV2Job implements HadoopJob {
// Note that the classloader identified by the task it was initially created for,
// but later it may be reused for other tasks.
HadoopClassLoader ldr = new HadoopClassLoader(rsrcMgr.classPath(),
- HadoopClassLoader.nameForTask(info, false));
+ HadoopClassLoader.nameForTask(info, false), libNames);
cls = (Class<? extends HadoopTaskContext>)ldr.loadClass(HadoopV2TaskContext.class.getName());
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoaderTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoaderTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoaderTest.java
index 55fac2c..02d98d0 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoaderTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopClassLoaderTest.java
@@ -49,7 +49,7 @@ import org.apache.ignite.internal.processors.hadoop.deps.Without;
*/
public class HadoopClassLoaderTest extends TestCase {
/** */
- final HadoopClassLoader ldr = new HadoopClassLoader(null, "test");
+ final HadoopClassLoader ldr = new HadoopClassLoader(null, "test", null);
/**
* @throws Exception If failed.
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopSnappyTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopSnappyTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopSnappyTest.java
index 014ff1e..b4e3dc2 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopSnappyTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopSnappyTest.java
@@ -49,7 +49,7 @@ public class HadoopSnappyTest extends GridCommonAbstractTest {
// Run the same in several more class loaders simulating jobs and tasks:
for (int i = 0; i < 2; i++) {
- ClassLoader hadoopClsLdr = new HadoopClassLoader(null, "cl-" + i);
+ ClassLoader hadoopClsLdr = new HadoopClassLoader(null, "cl-" + i, null);
Class<?> cls = (Class)Class.forName(HadoopSnappyTest.class.getName(), true, hadoopClsLdr);
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV1Test.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV1Test.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV1Test.java
index 6ba9686..27d7fc2 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV1Test.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV1Test.java
@@ -48,7 +48,7 @@ public class HadoopTasksV1Test extends HadoopTasksAllVersionsTest {
HadoopJobId jobId = new HadoopJobId(uuid, 0);
- return jobInfo.createJob(HadoopV2Job.class, jobId, log);
+ return jobInfo.createJob(HadoopV2Job.class, jobId, log, null);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV2Test.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV2Test.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV2Test.java
index d125deb..30cf50c 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV2Test.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopTasksV2Test.java
@@ -67,7 +67,7 @@ public class HadoopTasksV2Test extends HadoopTasksAllVersionsTest {
HadoopJobId jobId = new HadoopJobId(uuid, 0);
- return jobInfo.createJob(HadoopV2Job.class, jobId, log);
+ return jobInfo.createJob(HadoopV2Job.class, jobId, log, null);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopV2JobSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopV2JobSelfTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopV2JobSelfTest.java
index 1e9ffbc..ae2c00d 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopV2JobSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/HadoopV2JobSelfTest.java
@@ -78,7 +78,7 @@ public class HadoopV2JobSelfTest extends HadoopAbstractSelfTest {
HadoopJobId id = new HadoopJobId(uuid, 1);
- HadoopJob job = info.createJob(HadoopV2Job.class, id, log);
+ HadoopJob job = info.createJob(HadoopV2Job.class, id, log, null);
HadoopTaskContext taskCtx = job.getTaskContext(new HadoopTaskInfo(HadoopTaskType.MAP, null, 0, 0,
null));
http://git-wip-us.apache.org/repos/asf/ignite/blob/68b25df3/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopAbstractMapTest.java
----------------------------------------------------------------------
diff --git a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopAbstractMapTest.java b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopAbstractMapTest.java
index 493098f..5266875 100644
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopAbstractMapTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/shuffle/collections/HadoopAbstractMapTest.java
@@ -77,11 +77,13 @@ public abstract class HadoopAbstractMapTest extends GridCommonAbstractTest {
}
/** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
@Override public Comparator<Object> sortComparator() {
return ComparableComparator.getInstance();
}
/** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
@Override public Comparator<Object> groupComparator() {
return ComparableComparator.getInstance();
}
@@ -141,8 +143,8 @@ public abstract class HadoopAbstractMapTest extends GridCommonAbstractTest {
}
/** {@inheritDoc} */
- @Override public HadoopJob createJob(Class<? extends HadoopJob> jobCls,
- HadoopJobId jobId, IgniteLogger log) throws IgniteCheckedException {
+ @Override public HadoopJob createJob(Class<? extends HadoopJob> jobCls, HadoopJobId jobId, IgniteLogger log,
+ @Nullable String[] libNames) throws IgniteCheckedException {
assert false;
return null;
[5/5] ignite git commit: Merge remote-tracking branch
'remotes/upstream/gridgain-7.6.1'
Posted by av...@apache.org.
Merge remote-tracking branch 'remotes/upstream/gridgain-7.6.1'
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/41f81da8
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/41f81da8
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/41f81da8
Branch: refs/heads/master
Commit: 41f81da8f7efe629affc1cfae52ed1d8820a1043
Parents: 5b4ac37 8ce29a9
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Jun 22 13:01:23 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Jun 22 13:01:23 2016 +0300
----------------------------------------------------------------------
.../configuration/HadoopConfiguration.java | 35 +++++++
.../processors/hadoop/HadoopJobInfo.java | 3 +-
.../ignite/internal/util/IgniteUtils.java | 45 +++++++--
.../ignite/spi/discovery/tcp/ServerImpl.java | 7 +-
.../spi/discovery/tcp/TcpDiscoveryImpl.java | 3 +-
.../cluster/GridAddressResolverSelfTest.java | 97 ++++++++++++++++++++
.../vm/TcpDiscoveryVmIpFinderSelfTest.java | 75 +++++++++++++++
.../testsuites/IgniteKernalSelfTestSuite.java | 2 +
.../processors/hadoop/HadoopClassLoader.java | 26 +++++-
.../processors/hadoop/HadoopDefaultJobInfo.java | 8 +-
.../hadoop/jobtracker/HadoopJobTracker.java | 14 ++-
.../child/HadoopChildProcessRunner.java | 2 +-
.../processors/hadoop/v2/HadoopV2Job.java | 14 ++-
.../hadoop/HadoopClassLoaderTest.java | 2 +-
.../processors/hadoop/HadoopSnappyTest.java | 2 +-
.../processors/hadoop/HadoopTasksV1Test.java | 2 +-
.../processors/hadoop/HadoopTasksV2Test.java | 2 +-
.../processors/hadoop/HadoopV2JobSelfTest.java | 2 +-
.../collections/HadoopAbstractMapTest.java | 6 +-
19 files changed, 312 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
[2/5] ignite git commit: Merge remote-tracking branch
'upstream/gridgain-7.6.1' into gridgain-7.6.1
Posted by av...@apache.org.
Merge remote-tracking branch 'upstream/gridgain-7.6.1' into gridgain-7.6.1
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3ca0bc87
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3ca0bc87
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3ca0bc87
Branch: refs/heads/master
Commit: 3ca0bc877bf356eca93c9c9a5e225362c2b58769
Parents: 68b25df 482015e
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Jun 21 17:11:37 2016 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Jun 21 17:11:37 2016 +0300
----------------------------------------------------------------------
modules/clients/pom.xml | 8 -
.../client/ClientDefaultCacheSelfTest.java | 119 +-
.../ignite/internal/client/ClientHttpTask.java | 33 +-
.../ignite/internal/client/ClientTcpTask.java | 10 +-
.../integration/ClientAbstractSelfTest.java | 92 +-
.../JettyRestProcessorAbstractSelfTest.java | 1018 ++++++++----------
.../internal/processors/rest/SimplePerson.java | 74 ++
modules/core/pom.xml | 15 +-
.../apache/ignite/internal/LessNamingBean.java | 28 +
.../ignite/internal/MarshallerContextImpl.java | 29 +-
.../cache/query/GridCacheSqlIndexMetadata.java | 3 +-
.../cache/query/GridCacheSqlMetadata.java | 3 +-
.../internal/util/IgniteExceptionRegistry.java | 5 +-
.../ignite/internal/visor/cache/VisorCache.java | 4 +-
.../cache/VisorCacheAffinityConfiguration.java | 5 +-
.../cache/VisorCacheAggregatedMetrics.java | 3 +-
.../visor/cache/VisorCacheConfiguration.java | 3 +-
.../cache/VisorCacheDefaultConfiguration.java | 5 +-
.../cache/VisorCacheEvictionConfiguration.java | 5 +-
.../internal/visor/cache/VisorCacheMetrics.java | 3 +-
.../cache/VisorCacheNearConfiguration.java | 5 +-
.../visor/cache/VisorCachePartition.java | 3 +-
.../visor/cache/VisorCachePartitions.java | 3 +-
.../cache/VisorCacheQueryConfiguration.java | 3 +-
.../visor/cache/VisorCacheQueryMetrics.java | 5 +-
.../cache/VisorCacheRebalanceConfiguration.java | 5 +-
.../cache/VisorCacheStoreConfiguration.java | 3 +-
.../cache/VisorCacheTypeFieldMetadata.java | 3 +-
.../visor/cache/VisorCacheTypeMetadata.java | 3 +-
.../internal/visor/cache/VisorCacheV4.java | 124 +++
.../internal/visor/debug/VisorThreadInfo.java | 5 +-
.../visor/debug/VisorThreadLockInfo.java | 5 +-
.../internal/visor/event/VisorGridEvent.java | 5 +-
.../internal/visor/file/VisorFileBlock.java | 5 +-
.../ignite/internal/visor/igfs/VisorIgfs.java | 5 +-
.../internal/visor/igfs/VisorIgfsEndpoint.java | 5 +-
.../internal/visor/igfs/VisorIgfsMetrics.java | 5 +-
.../visor/igfs/VisorIgfsProfilerEntry.java | 5 +-
.../VisorIgfsProfilerUniformityCounters.java | 5 +-
.../visor/log/VisorLogSearchResult.java | 5 +-
.../visor/node/VisorAtomicConfiguration.java | 5 +-
.../visor/node/VisorBasicConfiguration.java | 5 +-
.../node/VisorExecutorServiceConfiguration.java | 5 +-
.../visor/node/VisorGridConfiguration.java | 5 +-
.../visor/node/VisorIgfsConfiguration.java | 3 +-
.../visor/node/VisorLifecycleConfiguration.java | 5 +-
.../visor/node/VisorMetricsConfiguration.java | 5 +-
.../visor/node/VisorNodeDataCollectorJob.java | 26 +-
.../node/VisorNodeDataCollectorTaskResult.java | 5 +-
.../node/VisorPeerToPeerConfiguration.java | 5 +-
.../visor/node/VisorRestConfiguration.java | 5 +-
.../node/VisorSegmentationConfiguration.java | 5 +-
.../visor/node/VisorSpisConfiguration.java | 5 +-
.../node/VisorTransactionConfiguration.java | 5 +-
.../internal/visor/query/VisorQueryField.java | 5 +-
.../internal/visor/query/VisorQueryResult.java | 5 +-
.../plugin/security/SecurityPermissionSet.java | 5 +-
.../ignite/plugin/security/SecuritySubject.java | 5 +-
modules/rest-http/pom.xml | 25 +-
.../http/jetty/GridJettyJsonConfig.java | 317 ------
.../http/jetty/GridJettyObjectMapper.java | 274 +++++
.../http/jetty/GridJettyRestHandler.java | 127 +--
.../IgniteCacheRandomOperationBenchmark.java | 539 +++++-----
.../cache/load/model/key/Identifier.java | 6 +
.../yardstick/cache/load/model/key/Mark.java | 7 +
.../yardstick/cache/load/model/value/Car.java | 6 +
.../yardstick/cache/load/model/value/Truck.java | 12 +-
.../ignite/yardstick/cache/model/Account.java | 6 +
.../ignite/yardstick/cache/model/Person1.java | 2 +-
.../ignite/yardstick/cache/model/Person2.java | 2 +-
.../ignite/yardstick/cache/model/SampleKey.java | 2 +-
.../yardstick/cache/model/SampleValue.java | 2 +-
.../zk/TcpDiscoveryZookeeperIpFinder.java | 19 +-
parent/pom.xml | 1 +
74 files changed, 1673 insertions(+), 1455 deletions(-)
----------------------------------------------------------------------
[4/5] ignite git commit: IGNITE-3152 Client node's addresses are
registered in IP finder
Posted by av...@apache.org.
IGNITE-3152 Client node's addresses are registered in IP finder
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8ce29a92
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8ce29a92
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8ce29a92
Branch: refs/heads/master
Commit: 8ce29a92d5e06d5a3d68aae0f6a2865ffd21a28c
Parents: 5177c33
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Jun 22 12:43:05 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Jun 22 12:58:10 2016 +0300
----------------------------------------------------------------------
.../ignite/spi/discovery/tcp/ServerImpl.java | 2 +-
.../vm/TcpDiscoveryVmIpFinderSelfTest.java | 75 ++++++++++++++++++++
2 files changed, 76 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/8ce29a92/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 38ed671..b1c56c0 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
@@ -4035,7 +4035,7 @@ class ServerImpl extends TcpDiscoveryImpl {
notifyDiscovery(EVT_NODE_JOINED, topVer, node);
try {
- if (spi.ipFinder.isShared() && locNodeCoord)
+ if (spi.ipFinder.isShared() && locNodeCoord && !node.isClient())
spi.ipFinder.registerAddresses(node.socketAddresses());
}
catch (IgniteSpiException e) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/8ce29a92/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
index 86587ba..aa00007 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
@@ -19,8 +19,16 @@ package org.apache.ignite.spi.discovery.tcp.ipfinder.vm;
import java.util.Arrays;
import java.util.Collections;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
+import org.apache.ignite.internal.util.typedef.G;
import org.apache.ignite.spi.IgniteSpiException;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAbstractSelfTest;
+import org.apache.ignite.testframework.GridTestUtils;
+
+import static org.apache.ignite.internal.processors.cache.binary.GridCacheBinaryObjectsAbstractSelfTest.IP_FINDER;
/**
* GridTcpDiscoveryVmIpFinder test.
@@ -190,4 +198,71 @@ public class TcpDiscoveryVmIpFinderSelfTest
assertEquals("Registered addresses: " + finder.getRegisteredAddresses().toString(),
10, finder.getRegisteredAddresses().size());
}
+
+ /**
+ *
+ */
+ public void testUnregistration() throws Exception {
+ Ignition.start(config("server1", false, false));
+
+ int srvSize = IP_FINDER.getRegisteredAddresses().size();
+
+ Ignition.start(config("server2", false, false));
+ Ignition.start(config("client1", true, false));
+
+ assertEquals(2 * srvSize, IP_FINDER.getRegisteredAddresses().size());
+
+ Ignition.start(config("client2", true, false));
+ Ignition.start(config("client3", true, false));
+
+ assertEquals(2 * srvSize, IP_FINDER.getRegisteredAddresses().size());
+
+ Ignition.start(config("client4", true, true));
+
+ assertEquals(3 * srvSize, IP_FINDER.getRegisteredAddresses().size());
+
+ Ignition.stop("client1", true);
+ Ignition.stop("client2", true);
+
+ assertEquals(3 * srvSize, IP_FINDER.getRegisteredAddresses().size());
+
+ Ignition.stop("client4", true);
+
+ GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ return 2 == G.allGrids().size();
+ }
+ }, 10000);
+
+ Ignition.stop("server1", true);
+ Ignition.stop("server2", true);
+
+ GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ return 0 == G.allGrids().size();
+ }
+ }, 10000);
+
+ assertTrue(3 * srvSize >= IP_FINDER.getRegisteredAddresses().size());
+ }
+
+ /**
+ * @param name Name.
+ * @param client Client.
+ */
+ private static IgniteConfiguration config(String name, boolean client, boolean forceServerMode) {
+ IgniteConfiguration cfg = new IgniteConfiguration();
+
+ cfg.setGridName(name);
+ cfg.setClientMode(client);
+
+ TcpDiscoverySpi disco = new TcpDiscoverySpi();
+
+ disco.setForceServerMode(forceServerMode);
+ disco.setIpFinder(IP_FINDER);
+
+ cfg.setDiscoverySpi(disco);
+
+ return cfg;
+ }
}
\ No newline at end of file
[3/5] ignite git commit: IGNITE-3230 External addresses are not
registered in IP finder
Posted by av...@apache.org.
IGNITE-3230 External addresses are not registered in IP finder
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5177c33e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5177c33e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5177c33e
Branch: refs/heads/master
Commit: 5177c33ec66d98ae379f2908dc056f58ee3cbb40
Parents: 3ca0bc8
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Jun 22 12:13:30 2016 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Jun 22 12:56:16 2016 +0300
----------------------------------------------------------------------
.../ignite/internal/util/IgniteUtils.java | 45 +++++++--
.../ignite/spi/discovery/tcp/ServerImpl.java | 5 +-
.../spi/discovery/tcp/TcpDiscoveryImpl.java | 3 +-
.../cluster/GridAddressResolverSelfTest.java | 97 ++++++++++++++++++++
.../testsuites/IgniteKernalSelfTestSuite.java | 2 +
5 files changed, 140 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/5177c33e/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 2a83ad4..fee4f378 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
@@ -8686,16 +8686,10 @@ public abstract class IgniteUtils {
InetSocketAddress sockAddr = new InetSocketAddress(addr, port);
if (!sockAddr.isUnresolved()) {
- try {
- Collection<InetSocketAddress> extAddrs0 = addrRslvr.getExternalAddresses(sockAddr);
+ Collection<InetSocketAddress> extAddrs0 = resolveAddress(addrRslvr, sockAddr);
- if (extAddrs0 != null)
- extAddrs.addAll(extAddrs0);
- }
- catch (IgniteCheckedException e) {
- throw new IgniteSpiException("Failed to get mapped external addresses " +
- "[addrRslvr=" + addrRslvr + ", addr=" + addr + ']', e);
- }
+ if (extAddrs0 != null)
+ extAddrs.addAll(extAddrs0);
}
}
@@ -8703,6 +8697,39 @@ public abstract class IgniteUtils {
}
/**
+ * @param addrRslvr Address resolver.
+ * @param sockAddr Addresses.
+ * @return Resolved addresses.
+ */
+ public static Collection<InetSocketAddress> resolveAddresses(AddressResolver addrRslvr,
+ Collection<InetSocketAddress> sockAddr) {
+ if (addrRslvr == null)
+ return sockAddr;
+
+ Collection<InetSocketAddress> resolved = new HashSet<>();
+
+ for (InetSocketAddress address :sockAddr)
+ resolved.addAll(resolveAddress(addrRslvr, address));
+
+ return resolved;
+ }
+
+ /**
+ * @param addrRslvr Address resolver.
+ * @param sockAddr Addresses.
+ * @return Resolved addresses.
+ */
+ private static Collection<InetSocketAddress> resolveAddress(AddressResolver addrRslvr, InetSocketAddress sockAddr) {
+ try {
+ return addrRslvr.getExternalAddresses(sockAddr);
+ }
+ catch (IgniteCheckedException e) {
+ throw new IgniteSpiException("Failed to get mapped external addresses " +
+ "[addrRslvr=" + addrRslvr + ", addr=" + sockAddr + ']', e);
+ }
+ }
+
+ /**
* Returns string representation of node addresses.
*
* @param node Grid node.
http://git-wip-us.apache.org/repos/asf/ignite/blob/5177c33e/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 37a1539..38ed671 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
@@ -132,10 +132,10 @@ import org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryStatusCheckMessa
import org.jetbrains.annotations.Nullable;
import org.jsr166.ConcurrentHashMap8;
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISCOVERY_HISTORY_SIZE;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_SERVICES_COMPATIBILITY_MODE;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
import static org.apache.ignite.IgniteSystemProperties.getInteger;
import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
@@ -4100,7 +4100,8 @@ class ServerImpl extends TcpDiscoveryImpl {
if (msg.verified() || !ring.hasRemoteNodes() || msg.senderNodeId() != null) {
if (spi.ipFinder.isShared() && !ring.hasRemoteNodes()) {
try {
- spi.ipFinder.unregisterAddresses(locNode.socketAddresses());
+ spi.ipFinder.unregisterAddresses(
+ U.resolveAddresses(spi.getAddressResolver(), locNode.socketAddresses()));
}
catch (IgniteSpiException e) {
U.error(log, "Failed to unregister local node address from IP finder.", e);
http://git-wip-us.apache.org/repos/asf/ignite/blob/5177c33e/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 41086d1..30b83e5 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
@@ -265,7 +265,8 @@ abstract class TcpDiscoveryImpl {
while (true) {
try {
- spi.ipFinder.initializeLocalAddresses(locNode.socketAddresses());
+ spi.ipFinder.initializeLocalAddresses(
+ U.resolveAddresses(spi.getAddressResolver(), locNode.socketAddresses()));
// Success.
break;
http://git-wip-us.apache.org/repos/asf/ignite/blob/5177c33e/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
new file mode 100644
index 0000000..d8fd767
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/GridAddressResolverSelfTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.processors.cluster;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.configuration.AddressResolver;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.apache.ignite.testframework.junits.common.GridCommonTest;
+
+/**
+ * Address Resolver test.
+ */
+@GridCommonTest(group = "Kernal Self")
+public class GridAddressResolverSelfTest extends GridCommonAbstractTest {
+ /** */
+ private final InetSocketAddress addr0 = new InetSocketAddress("test0.com", 5000);
+
+ /** */
+ private final InetSocketAddress addr1 = new InetSocketAddress("test1.com", 5000);
+
+ /** Ip finder. */
+ private static final TcpDiscoveryVmIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(final String gridName) throws Exception {
+ IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+ TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
+ discoSpi.setIpFinder(IP_FINDER);
+ cfg.setDiscoverySpi(discoSpi);
+
+ cfg.setAddressResolver(new AddressResolver() {
+ @Override public Collection<InetSocketAddress> getExternalAddresses(
+ InetSocketAddress addr) throws IgniteCheckedException {
+ Set<InetSocketAddress> set = new HashSet<>();
+
+ set.add(addr);
+ set.add(gridName.contains("0") ? addr0 : addr1);
+
+ return set;
+ }
+ });
+
+ return cfg;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ super.afterTest();
+
+ stopAllGrids();
+ }
+
+ /** */
+ public void test() throws Exception {
+ startGrid(0);
+
+ assertFalse(IP_FINDER.getRegisteredAddresses().contains(addr1));
+
+ startGrid(1);
+
+ assertTrue(IP_FINDER.getRegisteredAddresses().contains(addr0));
+ assertTrue(IP_FINDER.getRegisteredAddresses().contains(addr1));
+
+ stopGrid(0, true);
+
+ assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ return !IP_FINDER.getRegisteredAddresses().contains(addr0);
+ }
+ }, 70000));
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/5177c33e/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
index 620c298..c9cb531 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
@@ -46,6 +46,7 @@ import org.apache.ignite.internal.managers.discovery.GridDiscoveryManagerSelfTes
import org.apache.ignite.internal.managers.discovery.IgniteTopologyPrintFormatSelfTest;
import org.apache.ignite.internal.managers.events.GridEventStorageManagerSelfTest;
import org.apache.ignite.internal.managers.swapspace.GridSwapSpaceManagerSelfTest;
+import org.apache.ignite.internal.processors.cluster.GridAddressResolverSelfTest;
import org.apache.ignite.internal.processors.cluster.GridUpdateNotifierSelfTest;
import org.apache.ignite.internal.processors.port.GridPortProcessorSelfTest;
import org.apache.ignite.internal.processors.service.GridServiceClientNodeTest;
@@ -121,6 +122,7 @@ public class IgniteKernalSelfTestSuite extends TestSuite {
suite.addTestSuite(GridKernalConcurrentAccessStopSelfTest.class);
suite.addTestSuite(IgniteConcurrentEntryProcessorAccessStopTest.class);
suite.addTestSuite(GridUpdateNotifierSelfTest.class);
+ suite.addTestSuite(GridAddressResolverSelfTest.class);
suite.addTestSuite(IgniteUpdateNotifierPerClusterSettingSelfTest.class);
suite.addTestSuite(GridLocalEventListenerSelfTest.class);
suite.addTestSuite(IgniteTopologyPrintFormatSelfTest.class);