[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 <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
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 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 @@
             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.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 @@
             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 @@
                         relativePath);
             }
         } finally {
-            resourceCache.invalidate(relativePath);
+            invalidateResource(relativePath);
         }
     }
 
@@ -296,6 +296,10 @@
         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);