[ASTERIXDB-2756][REP] Skip Replication of Dropped Indexes
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- When attempting to asynchronously replicate an LSM
component whose index was dropped, skip replication.
Change-Id: Ifdbf61cdfb6099af43ba2d9353dde9e8e31a4701
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/7623
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>
Reviewed-by: Luo Chen <cluo8@uci.edu>
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
index dc37fc2..6fd1c6a 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
@@ -19,6 +19,7 @@
package org.apache.asterix.common.storage;
import java.nio.file.Paths;
+import java.util.Objects;
import org.apache.asterix.common.dataflow.DatasetLocalResource;
import org.apache.asterix.common.utils.StorageConstants;
@@ -35,6 +36,7 @@
}
public static DatasetResourceReference of(LocalResource localResource) {
+ Objects.requireNonNull(localResource);
return parse(localResource);
}
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/IndexReplicationManager.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/IndexReplicationManager.java
index 4d660d2..dd953c4 100644
--- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/IndexReplicationManager.java
+++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/management/IndexReplicationManager.java
@@ -131,9 +131,14 @@
private boolean skip(IReplicationJob job) {
try {
- final DatasetResourceReference indexFileRef =
- resourceRepository.getLocalResourceReference(job.getAnyFile());
- return !replicationStrategy.isMatch(indexFileRef.getDatasetId());
+ final String fileToReplicate = job.getAnyFile();
+ final Optional<DatasetResourceReference> indexFileRefOpt =
+ resourceRepository.getLocalResourceReference(fileToReplicate);
+ if (!indexFileRefOpt.isPresent()) {
+ LOGGER.warn("skipping replication of {} due to missing dataset resource reference", fileToReplicate);
+ return true;
+ }
+ return !replicationStrategy.isMatch(indexFileRefOpt.get().getDatasetId());
} catch (HyracksDataException e) {
throw new IllegalStateException("Couldn't find resource for " + job.getAnyFile(), e);
}
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 145be86..508eb76 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
@@ -346,10 +346,11 @@
.collect(Collectors.toSet());
}
- public DatasetResourceReference getLocalResourceReference(String absoluteFilePath) throws HyracksDataException {
+ public Optional<DatasetResourceReference> getLocalResourceReference(String absoluteFilePath)
+ throws HyracksDataException {
final String localResourcePath = StoragePathUtil.getIndexFileRelativePath(absoluteFilePath);
final LocalResource lr = get(localResourcePath);
- return DatasetResourceReference.of(lr);
+ return lr != null ? Optional.of(DatasetResourceReference.of(lr)) : Optional.empty();
}
/**