commit | 36d6b7366ba44b0a86b767e2b8698f4ff34b1e51 | [log] [tgz] |
---|---|---|
author | Murtadha Hubail <mhubail@apache.org> | Thu Oct 19 20:33:09 2023 +0300 |
committer | Murtadha Hubail <mhubail@apache.org> | Fri Oct 20 18:56:39 2023 +0000 |
tree | 930b17531e729450aef78d0259fe38258f69d791 | |
parent | ce631f32848dc1af6f859016e92187c583841606 [diff] |
[ASTERIXDB-3282][STO] Exclude invalid indexes from replication checkpoint - user model changes: no - storage format changes: no - interface changes: yes Details: - When attempting to checkpoint replicated indexes, exclude invalid indexes since they might be in the process of being replciated for the first time. Change-Id: I589b8934d5ab297a0a1507130857929469e8510d Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17869 Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu> Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java index 290734f..34f0cb1 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/IndexCheckpointManager.java
@@ -128,6 +128,11 @@ } @Override + public synchronized boolean isValidIndex() throws HyracksDataException { + return getCheckpointCount() > 0; + } + + @Override public long getValidComponentSequence() throws HyracksDataException { if (getCheckpointCount() > 0) { return getLatest().getValidComponentSequence();
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/IIndexCheckpointManager.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/IIndexCheckpointManager.java index beb8e07..9777879 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/IIndexCheckpointManager.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/IIndexCheckpointManager.java
@@ -140,4 +140,12 @@ * @throws HyracksDataException */ void setLastComponentId(long componentId) throws HyracksDataException; + + /** + * Indicates that the index has at least one valid checkpoint + * + * @return true if the index has at least one valid checkpoint. Otherwise false + * @throws HyracksDataException + */ + boolean isValidIndex() throws HyracksDataException; }
diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsNotifier.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsNotifier.java index 80bb3c8..42a3c0b 100644 --- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsNotifier.java +++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/logging/RemoteLogsNotifier.java
@@ -96,7 +96,9 @@ for (DatasetResourceReference replicaIndexRef : replicaIndexesRef) { final IIndexCheckpointManager indexCheckpointManager = indexCheckpointManagerProvider.get(replicaIndexRef); synchronized (indexCheckpointManager) { - indexCheckpointManager.masterFlush(remoteLogMapping.getMasterLsn(), remoteLogMapping.getLSN()); + if (indexCheckpointManager.isValidIndex()) { + indexCheckpointManager.masterFlush(remoteLogMapping.getMasterLsn(), remoteLogMapping.getLSN()); + } } } }