This is an automated email from the ASF dual-hosted git repository. ilyak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new cd5e6e0 IGNITE-12508 Improve GridCacheProcessor#cacheDescriptor's time complexity - Fixes #8802. cd5e6e0 is described below commit cd5e6e0f3c5d42884f172155e7d00ea8d33dac58 Author: Atri Sharma <atri.j...@gmail.com> AuthorDate: Fri Feb 19 15:16:53 2021 +0300 IGNITE-12508 Improve GridCacheProcessor#cacheDescriptor's time complexity - Fixes #8802. Signed-off-by: Ilya Kasnacheev <ilya.kasnach...@gmail.com> --- .../internal/processors/cache/ClusterCachesInfo.java | 19 ++++++++++++++++++- .../internal/processors/cache/GridCacheProcessor.java | 11 +---------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java index 0a6bc21..7cb72ef 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java @@ -127,6 +127,9 @@ public class ClusterCachesInfo { /** Dynamic caches. */ private final ConcurrentMap<String, DynamicCacheDescriptor> registeredCaches = new ConcurrentHashMap<>(); + /** Mapping of caches by cache ID */ + private final ConcurrentMap<Integer, DynamicCacheDescriptor> registeredCachesById = new ConcurrentHashMap<>(); + /** */ private final ConcurrentMap<Integer, CacheGroupDescriptor> registeredCacheGrps = new ConcurrentHashMap<>(); @@ -813,7 +816,8 @@ public class ClusterCachesInfo { markedForDeletionCaches.put(cacheName, old); - registeredCaches.remove(cacheName); + DynamicCacheDescriptor removedCacheDescriptor = registeredCaches.remove(cacheName); + registeredCachesById.remove(removedCacheDescriptor.cacheId()); if (req.restart()) { IgniteUuid restartId = req.restartId(); @@ -1040,6 +1044,8 @@ public class ClusterCachesInfo { DynamicCacheDescriptor old = registeredCaches.put(ccfg.getName(), startDesc); + registeredCachesById.put(startDesc.cacheId(), startDesc); + restartingCaches.remove(ccfg.getName()); assert old == null; @@ -1473,6 +1479,7 @@ public class ClusterCachesInfo { desc.receivedOnDiscovery(true); registeredCaches.put(cacheData.cacheConfiguration().getName(), desc); + registeredCachesById.put(desc.cacheId(), desc); ctx.discovery().setCacheFilter( desc.cacheId(), @@ -1585,6 +1592,7 @@ public class ClusterCachesInfo { */ private void cleanCachesAndGroups() { registeredCaches.clear(); + registeredCachesById.clear(); registeredCacheGrps.clear(); ctx.discovery().cleanCachesAndGroups(); } @@ -2113,6 +2121,7 @@ public class ClusterCachesInfo { ); DynamicCacheDescriptor old = registeredCaches.put(cfg.getName(), desc); + registeredCachesById.put(desc.cacheId(), desc); assert old == null : old; } @@ -2414,6 +2423,13 @@ public class ClusterCachesInfo { } /** + * @return Registered caches by Id + */ + ConcurrentMap<Integer, DynamicCacheDescriptor> registeredCachesById() { + return registeredCachesById; + } + + /** * @return Registered cache templates. */ ConcurrentMap<String, DynamicCacheDescriptor> registeredTemplates() { @@ -2452,6 +2468,7 @@ public class ClusterCachesInfo { registeredCacheGrps.clear(); registeredCaches.clear(); + registeredCachesById.clear(); registeredTemplates.clear(); clientReconnectReqs = null; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java index 0fbeba6..d82ef97 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java @@ -4616,16 +4616,7 @@ public class GridCacheProcessor extends GridProcessorAdapter { * @return Cache descriptor. */ public @Nullable DynamicCacheDescriptor cacheDescriptor(int cacheId) { - for (DynamicCacheDescriptor cacheDesc : cacheDescriptors().values()) { - CacheConfiguration ccfg = cacheDesc.cacheConfiguration(); - - assert ccfg != null : cacheDesc; - - if (CU.cacheId(ccfg.getName()) == cacheId) - return cacheDesc; - } - - return null; + return cachesInfo.registeredCachesById().get(cacheId); } /**