Fixed race condition in continuous processor
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/433fd031 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/433fd031 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/433fd031 Branch: refs/heads/gridgain-7.5.11-vk Commit: 433fd031abbaf8d11ab55cc75eb1ef061dc450bd Parents: 19b4af1 Author: Valentin Kulichenko <[email protected]> Authored: Tue Apr 5 13:16:33 2016 -0700 Committer: Valentin Kulichenko <[email protected]> Committed: Tue Apr 5 13:16:33 2016 -0700 ---------------------------------------------------------------------- .../processors/continuous/GridContinuousProcessor.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/433fd031/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java index 99e0bb5..c6503e0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java @@ -394,7 +394,18 @@ public class GridContinuousProcessor extends GridProcessorAdapter { /** {@inheritDoc} */ @Override @Nullable public Serializable collectDiscoveryData(UUID nodeId) { if (!nodeId.equals(ctx.localNodeId()) || !locInfos.isEmpty()) { - DiscoveryData data = new DiscoveryData(ctx.localNodeId(), clientInfos); + Map<UUID, Map<UUID, LocalRoutineInfo>> clientInfos0 = U.newHashMap(clientInfos.size()); + + for (Map.Entry<UUID, Map<UUID, LocalRoutineInfo>> e : clientInfos.entrySet()) { + Map<UUID, LocalRoutineInfo> copy = U.newHashMap(e.getValue().size()); + + for (Map.Entry<UUID, LocalRoutineInfo> e0 : e.getValue().entrySet()) + copy.put(e0.getKey(), e0.getValue()); + + clientInfos0.put(e.getKey(), copy); + } + + DiscoveryData data = new DiscoveryData(ctx.localNodeId(), clientInfos0); // Collect listeners information (will be sent to joining node during discovery process). for (Map.Entry<UUID, LocalRoutineInfo> e : locInfos.entrySet()) {
