[ 
https://issues.apache.org/jira/browse/GEODE-8035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17094888#comment-17094888
 ] 

ASF GitHub Bot commented on GEODE-8035:
---------------------------------------

DonalEvans commented on a change in pull request #5014:
URL: https://github.com/apache/geode/pull/5014#discussion_r416930455



##########
File path: 
geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
##########
@@ -521,12 +521,12 @@ void create(InternalCache cache)
 
     cache.initializePdxRegistry();
 
-    for (DiskStore diskStore : diskStores.values()) {
+    diskStores.values().parallelStream().forEach(diskStore -> {

Review comment:
       Would it be possible to put a bound on the number of threads used here? 
In cases with large numbers of disk stores this might cause resource issues if 
unbounded, but maybe we never have so many disk stores that it will matter.

##########
File path: 
geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
##########
@@ -1086,6 +1088,32 @@ public static GemFireCacheImpl getForPdx(String reason) {
     clientMetadataService = clientMetadataServiceFactory.apply(this);
   }
 
+  public void lockDiskStore(String diskStoreName) {
+    CountDownLatch countDownLatch = diskStoreLatches.get(diskStoreName);
+    if (countDownLatch == null) {
+      countDownLatch = diskStoreLatches.putIfAbsent(diskStoreName, new 
CountDownLatch(1));
+      if (countDownLatch != null) {
+        try {
+          countDownLatch.await();
+        } catch (InterruptedException e) {
+          throw new InternalGemFireError(e);
+        }
+      }
+    } else {
+      try {
+        countDownLatch.await();
+      } catch (InterruptedException e) {
+        throw new InternalGemFireError(e);
+      }
+    }
+  }
+
+  public void unlockDiskStore(String diskStoreName) {
+    if (diskStoreLatches.get(diskStoreName) != null) {
+      diskStoreLatches.get(diskStoreName).countDown();
+    }

Review comment:
       I think there is a small possibility of a race condition causing an NPE 
here if the latch associated with `diskStoreName` is removed after the first 
`get()` call. Would it be possible to change this method to use only one 
`get()` call?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


> Parallel Disk Store Recovery when Cluster Restarts
> --------------------------------------------------
>
>                 Key: GEODE-8035
>                 URL: https://issues.apache.org/jira/browse/GEODE-8035
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Jianxia Chen
>            Assignee: Jianxia Chen
>            Priority: Major
>              Labels: GeodeCommons
>
> Currently, when Geode cluster restarts, the disk store recovery is 
> serialized. When all regions share the same disk store, the restart process 
> is time consuming. To improve the performance, different regions can use 
> different disk stores with different disk controllers. And adding parallel 
> disk store recovery. This is expected to significantly reduce the time to 
> restart Geode cluster.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to