[
https://issues.apache.org/jira/browse/IGNITE-12425?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mirza Aliev updated IGNITE-12425:
-
Description:
Yes, we do have a deadlock in CacheStore.loadAll, as demonstrated by this
reproducer.
The obvious embarassing fix is to replace HashMap with TreeMap, which will of
course not work if keys are not comparable
{code:java}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 3156d6d662d..3947800a908 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -34,6 +34,7 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
+import java.util.TreeMap;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
@@ -2054,7 +2055,7 @@ public abstract class GridCacheAdapter implements
IgniteInternalCache();
+misses = new TreeMap<>();
misses.put(key, res);
{code}
was:
Yes, we do have a deadlock in CacheStore.loadAll, as demonstrated by this
reproducer.
The obvious embarassing fix is to replace HashMap with TreeMap, which will of
course not work if keys are not compabable
{code}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 3156d6d662d..3947800a908 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -34,6 +34,7 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
+import java.util.TreeMap;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
@@ -2054,7 +2055,7 @@ public abstract class GridCacheAdapter implements
IgniteInternalCache();
+misses = new TreeMap<>();
misses.put(key, res);
{code}
> Deadlock on CacheStore.loadAll
> --
>
> Key: IGNITE-12425
> URL: https://issues.apache.org/jira/browse/IGNITE-12425
> Project: Ignite
> Issue Type: Bug
> Components: cache
>Affects Versions: 2.7.6
>Reporter: Ilya Kasnacheev
>Priority: Critical
> Labels: stupid
> Attachments: ignite-dataload-deadlock.zip
>
>
> Yes, we do have a deadlock in CacheStore.loadAll, as demonstrated by this
> reproducer.
> The obvious embarassing fix is to replace HashMap with TreeMap, which will of
> course not work if keys are not comparable
> {code:java}
> diff --git
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
>
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
> index 3156d6d662d..3947800a908 100644
> ---
> a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
> +++
> b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
> @@ -34,6 +34,7 @@ import java.util.List;
> import java.util.Map;
> import java.util.NoSuchElementException;
> import java.util.Set;
> +import java.util.TreeMap;
> import java.util.UUID;
> import java.util.concurrent.Callable;
> import java.util.concurrent.ExecutorService;
> @@ -2054,7 +2055,7 @@ public abstract class GridCacheAdapter implements
> IgniteInternalCache
> if (res.value() == null) {
> if (misses == null)
> -misses = new HashMap<>();
> +misses = new TreeMap<>();
>
> misses.put(key, res);
>
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)