[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);