This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git

commit b50d4add90acb7e8cf13e7b4168f92bcf35348dc
Author: Murtadha Hubail <[email protected]>
AuthorDate: Thu Mar 10 04:01:06 2022 +0300

    [NO ISSUE][REP] Invalidate resources cache for replicated resources
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    
    - Invalidate the resources cache when a replicate index is
      created or dropped.
    
    Change-Id: I89013addda4e8e1aeafbe1782c7eb12226ba60b7
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/15623
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
---
 .../org/apache/asterix/replication/messaging/DropIndexTask.java     | 4 ++++
 .../org/apache/asterix/replication/messaging/ReplicateFileTask.java | 3 +++
 .../management/resource/PersistentLocalResourceRepository.java      | 6 +++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/DropIndexTask.java
 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/DropIndexTask.java
index 04f9766..483561b 100644
--- 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/DropIndexTask.java
+++ 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/DropIndexTask.java
@@ -26,8 +26,10 @@ import java.io.OutputStream;
 
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.exceptions.ReplicationException;
+import org.apache.asterix.common.storage.ResourceReference;
 import org.apache.asterix.replication.api.IReplicaTask;
 import org.apache.asterix.replication.api.IReplicationWorker;
+import 
org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.IIOManager;
 import org.apache.hyracks.api.util.IoUtil;
@@ -54,6 +56,8 @@ public class DropIndexTask implements IReplicaTask {
             if (indexFile.exists()) {
                 File indexDir = indexFile.getParentFile();
                 IoUtil.delete(indexDir);
+                ((PersistentLocalResourceRepository) 
appCtx.getLocalResourceRepository())
+                        
.invalidateResource(ResourceReference.of(file).getRelativePath().toString());
                 LOGGER.info(() -> "Deleted index: " + 
indexFile.getAbsolutePath());
             } else {
                 LOGGER.warn(() -> "Requested to delete a non-existing index: " 
+ indexFile.getAbsolutePath());
diff --git 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
index 5bec257..500a5de 100644
--- 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
+++ 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/ReplicateFileTask.java
@@ -39,6 +39,7 @@ import org.apache.asterix.common.utils.StorageConstants;
 import org.apache.asterix.replication.api.IReplicaTask;
 import org.apache.asterix.replication.api.IReplicationWorker;
 import org.apache.asterix.replication.management.NetworkingUtil;
+import 
org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
 import org.apache.commons.io.FileUtils;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.io.FileReference;
@@ -76,6 +77,8 @@ public class ReplicateFileTask implements IReplicaTask {
             if (indexMetadata) {
                 // ensure clean index directory
                 FileUtils.cleanDirectory(resourceDir.toFile());
+                ((PersistentLocalResourceRepository) 
appCtx.getLocalResourceRepository())
+                        
.invalidateResource(ResourceReference.of(file).getRelativePath().toString());
             }
             // create mask
             final Path maskPath = Paths.get(resourceDir.toString(),
diff --git 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
index 6577367..cc396ad 100644
--- 
a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
+++ 
b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
@@ -221,7 +221,7 @@ public class PersistentLocalResourceRepository implements 
ILocalResourceReposito
                         relativePath);
             }
         } finally {
-            resourceCache.invalidate(relativePath);
+            invalidateResource(relativePath);
         }
     }
 
@@ -296,6 +296,10 @@ public class PersistentLocalResourceRepository implements 
ILocalResourceReposito
         return max.isPresent() ? max.get() : 0;
     }
 
+    public void invalidateResource(String relativePath) {
+        resourceCache.invalidate(relativePath);
+    }
+
     private static String getFileName(String path) {
         return path.endsWith(File.separator) ? (path + 
StorageConstants.METADATA_FILE_NAME)
                 : (path + File.separator + 
StorageConstants.METADATA_FILE_NAME);

Reply via email to