IGNITE-5552: ServiceProcessor recalculates all service assignments even if there is a pending topology change. This closes #2182.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1cf402f3 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1cf402f3 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1cf402f3 Branch: refs/heads/ignite-2.1 Commit: 1cf402f379516b01ef7317a50c820bf0dec25d81 Parents: c396b0b Author: Andrey V. Mashenkov <[email protected]> Authored: Wed Jun 21 19:30:27 2017 +0300 Committer: Andrey V. Mashenkov <[email protected]> Committed: Thu Jul 6 14:26:31 2017 +0300 ---------------------------------------------------------------------- .../processors/service/GridServiceProcessor.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/1cf402f3/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java index 87db72a..d67f2d1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java @@ -1530,6 +1530,9 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite * Topology listener. */ private class TopologyListener implements DiscoveryEventListener { + /** */ + private volatile AffinityTopologyVersion currTopVer = null; + /** {@inheritDoc} */ @Override public void onEvent(DiscoveryEvent evt, final DiscoCache discoCache) { GridSpinBusyLock busyLock = GridServiceProcessor.this.busyLock; @@ -1562,6 +1565,8 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite else topVer = new AffinityTopologyVersion((evt).topologyVersion(), 0); + currTopVer = topVer; + depExe.execute(new DepRunnable() { @Override public void run0() { // In case the cache instance isn't tracked by DiscoveryManager anymore. @@ -1582,6 +1587,19 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite boolean firstTime = true; while (it.hasNext()) { + // If topology changed again, let next event handle it. + AffinityTopologyVersion currTopVer0 = currTopVer; + + if (currTopVer0 != topVer) { + if (log.isInfoEnabled()) + log.info("Service processor detected a topology change during " + + "assignments calculation (will abort current iteration and " + + "re-calculate on the newer version): " + + "[topVer=" + topVer + ", newTopVer=" + currTopVer + ']'); + + return; + } + Cache.Entry<Object, Object> e = it.next(); if (firstTime) {
