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 b42c7eae14ae22d0317f0ebdfa1558d1b5079fbd Author: Michael Blow <[email protected]> AuthorDate: Thu May 16 19:23:06 2024 -0400 [NO ISSUE][*DB] Prevent metadata node from receiving metadata replicas Change-Id: I879195e84328d86fad439ea825201ad052a30699 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18296 Reviewed-by: Michael Blow <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> Tested-by: Michael Blow <[email protected]> --- .../main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java | 8 ++++++++ .../java/org/apache/asterix/common/api/INcApplicationContext.java | 3 +++ .../asterix/replication/messaging/PartitionResourcesListTask.java | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java index 4d32967cbb..61656b7540 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/NCAppRuntimeContext.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Collection; +import java.util.OptionalInt; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -160,6 +161,7 @@ public class NCAppRuntimeContext implements INcApplicationContext { private ICacheManager cacheManager; private IConfigValidator configValidator; private IDiskWriteRateLimiterProvider diskWriteRateLimiterProvider; + private Integer metadataPartitionId; public NCAppRuntimeContext(INCServiceContext ncServiceContext, NCExtensionManager extensionManager, IPropertiesFactory propertiesFactory) { @@ -443,6 +445,7 @@ public class NCAppRuntimeContext implements INcApplicationContext { @Override public void initializeMetadata(boolean newUniverse, int partitionId) throws Exception { LOGGER.info("Bootstrapping metadata"); + metadataPartitionId = partitionId; MetadataNode.INSTANCE.initialize(this, ncExtensionManager.getMetadataTupleTranslatorProvider(), ncExtensionManager.getMetadataExtensions(), partitionId); @@ -636,4 +639,9 @@ public class NCAppRuntimeContext implements INcApplicationContext { public IDiskWriteRateLimiterProvider getDiskWriteRateLimiterProvider() { return diskWriteRateLimiterProvider; } + + @Override + public OptionalInt getMetadataPartitionId() { + return metadataPartitionId == null ? OptionalInt.empty() : OptionalInt.of(metadataPartitionId); + } } diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INcApplicationContext.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INcApplicationContext.java index 5475b97632..a5ae0996f8 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INcApplicationContext.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/INcApplicationContext.java @@ -20,6 +20,7 @@ package org.apache.asterix.common.api; import java.io.IOException; import java.rmi.RemoteException; +import java.util.OptionalInt; import java.util.concurrent.Executor; import org.apache.asterix.common.context.IStorageComponentProvider; @@ -147,4 +148,6 @@ public interface INcApplicationContext extends IApplicationContext { * @return the disk write rate limiter provider */ IDiskWriteRateLimiterProvider getDiskWriteRateLimiterProvider(); + + OptionalInt getMetadataPartitionId(); } diff --git a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/PartitionResourcesListTask.java b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/PartitionResourcesListTask.java index 0f5949e61b..97d03e6228 100644 --- a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/PartitionResourcesListTask.java +++ b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/PartitionResourcesListTask.java @@ -51,6 +51,11 @@ public class PartitionResourcesListTask implements IReplicaTask { @Override public void perform(INcApplicationContext appCtx, IReplicationWorker worker) throws HyracksDataException { LOGGER.debug("processing {}", this); + if (appCtx.getMetadataPartitionId().isPresent() && appCtx.getMetadataPartitionId().getAsInt() == partition + && appCtx.getReplicaManager().getPartitions().contains(partition)) { + LOGGER.warn("received request to get metadata files from non-master {}", worker.getRemoteAddress()); + throw new IllegalStateException(); + } final PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) appCtx.getLocalResourceRepository(); localResourceRepository.cleanup(partition);
