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()) {

Reply via email to