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);

Reply via email to