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(); } /**
