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 406b304d8f837062bd88dc7e27e4304a6cafb3ce
Author: Murtadha Hubail <[email protected]>
AuthorDate: Wed Aug 19 19:13:51 2020 +0300

    [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 <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Murtadha Hubail <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
    Reviewed-by: Luo Chen <[email protected]>
---
 .../asterix/common/storage/DatasetResourceReference.java      |  2 ++
 .../replication/management/IndexReplicationManager.java       | 11 ++++++++---
 .../resource/PersistentLocalResourceRepository.java           |  5 +++--
 3 files changed, 13 insertions(+), 5 deletions(-)

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 class DatasetResourceReference extends 
ResourceReference {
     }
 
     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 @@ public class IndexReplicationManager {
 
     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 @@ public class PersistentLocalResourceRepository implements 
ILocalResourceReposito
                 .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();
     }
 
     /**

Reply via email to