This is an automated email from the ASF dual-hosted git repository.

nanda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 787c9d3e13 HDDS-10924. TestSCMHAManagerImpl#testAddSCM fails on ratis 
master (#6753)
787c9d3e13 is described below

commit 787c9d3e135f6f17a18938f141b874c239eb2f76
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri May 31 11:00:31 2024 +0200

    HDDS-10924. TestSCMHAManagerImpl#testAddSCM fails on ratis master (#6753)
---
 .../hadoop/hdds/scm/ha/SCMHAManagerImpl.java       | 19 ++++---
 .../apache/hadoop/hdds/scm/ha/SCMStateMachine.java |  4 +-
 .../hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java   | 63 ++++++++++++++++------
 3 files changed, 63 insertions(+), 23 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
index 54de06efb9..fc3c1548ba 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMHAManagerImpl.java
@@ -96,9 +96,7 @@ public class SCMHAManagerImpl implements SCMHAManager {
       this.transactionBuffer = new SCMHADBTransactionBufferImpl(scm);
       this.ratisServer = new SCMRatisServerImpl(conf, scm,
           (SCMHADBTransactionBuffer) transactionBuffer);
-      this.scmSnapshotProvider = new SCMSnapshotProvider(conf,
-          scm.getSCMHANodeDetails().getPeerNodeDetails(),
-          scm.getScmCertificateClient());
+      this.scmSnapshotProvider = newScmSnapshotProvider(scm);
       grpcServer = new InterSCMGrpcProtocolService(conf, scm);
     } else {
       this.transactionBuffer = new SCMDBTransactionBufferImpl();
@@ -109,6 +107,13 @@ public class SCMHAManagerImpl implements SCMHAManager {
 
   }
 
+  @VisibleForTesting
+  protected SCMSnapshotProvider newScmSnapshotProvider(StorageContainerManager 
storageContainerManager) {
+    return new SCMSnapshotProvider(storageContainerManager.getConfiguration(),
+        storageContainerManager.getSCMHANodeDetails().getPeerNodeDetails(),
+        storageContainerManager.getScmCertificateClient());
+  }
+
   /**
    * {@inheritDoc}
    */
@@ -194,8 +199,10 @@ public class SCMHAManagerImpl implements SCMHAManager {
     }
 
     DBCheckpoint dBCheckpoint = getDBCheckpointFromLeader(leaderId);
-    LOG.info("Downloaded checkpoint from Leader {} to the location {}",
-        leaderId, dBCheckpoint.getCheckpointLocation());
+    if (dBCheckpoint != null) {
+      LOG.info("Downloaded checkpoint from Leader {} to the location {}",
+          leaderId, dBCheckpoint.getCheckpointLocation());
+    }
     return dBCheckpoint;
   }
 
@@ -262,7 +269,7 @@ public class SCMHAManagerImpl implements SCMHAManager {
 
     try {
       return scmSnapshotProvider.getSCMDBSnapshot(leaderId);
-    } catch (IOException e) {
+    } catch (Exception e) {
       LOG.error("Failed to download checkpoint from SCM leader {}", leaderId,
           e);
     }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
index 7eab815446..1128accd2f 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
@@ -233,8 +233,8 @@ public class SCMStateMachine extends BaseStateMachine {
     String leaderAddress = roleInfoProto.getFollowerInfo()
         .getLeaderInfo().getId().getAddress();
     Optional<SCMNodeDetails> leaderDetails =
-        scm.getSCMHANodeDetails().getPeerNodeDetails().stream().filter(
-            p -> p.getRatisHostPortStr().equals(leaderAddress))
+        scm.getSCMHANodeDetails().getPeerNodeDetails().stream()
+            .filter(p -> p.getRatisHostPortStr().equals(leaderAddress))
             .findFirst();
     Preconditions.checkState(leaderDetails.isPresent());
     final String leaderNodeId = leaderDetails.get().getNodeId();
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
index f33eedf969..294663ba75 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/ha/TestSCMHAManagerImpl.java
@@ -17,6 +17,7 @@
 
 package org.apache.hadoop.hdds.scm.ha;
 
+import java.net.InetSocketAddress;
 import java.nio.file.Path;
 import java.time.Clock;
 import java.time.ZoneOffset;
@@ -40,8 +41,10 @@ import org.apache.hadoop.hdds.security.SecurityConfig;
 import 
org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
 import org.apache.hadoop.hdds.utils.TransactionInfo;
 import org.apache.hadoop.hdds.utils.db.BatchOperation;
+import org.apache.hadoop.hdds.utils.db.DBCheckpoint;
 import org.apache.hadoop.hdds.utils.db.DBStore;
 import org.apache.hadoop.hdds.utils.db.Table;
+import org.apache.hadoop.net.NetUtils;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
 import org.apache.ozone.test.GenericTestUtils;
 import org.apache.ratis.server.DivisionInfo;
@@ -55,9 +58,11 @@ import org.junit.jupiter.api.TestMethodOrder;
 import org.junit.jupiter.api.io.TempDir;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.TimeoutException;
 
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assumptions.assumeThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -73,6 +78,8 @@ import static org.mockito.Mockito.when;
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 class TestSCMHAManagerImpl {
 
+  private static final String LEADER_SCM_ID = "leader";
+  private static final int LEADER_PORT = 9894;
   private static final String FOLLOWER_SCM_ID = "follower";
 
   private Path storageBaseDir;
@@ -85,18 +92,17 @@ class TestSCMHAManagerImpl {
       TimeoutException {
     storageBaseDir = tempDir;
     clusterID = UUID.randomUUID().toString();
-    OzoneConfiguration conf = getConfig("scm1", 9894);
-    final StorageContainerManager scm = getMockStorageContainerManager(conf);
-    SCMRatisServerImpl.initialize(clusterID, scm.getScmId(),
-        scm.getScmNodeDetails(), conf);
+    final StorageContainerManager scm = 
getMockStorageContainerManager(LEADER_SCM_ID, LEADER_PORT);
+    SCMRatisServerImpl.initialize(clusterID, LEADER_SCM_ID, 
scm.getScmNodeDetails(), scm.getConfiguration());
     primarySCMHAManager = scm.getScmHAManager();
     primarySCMHAManager.start();
     final DivisionInfo ratisDivision = primarySCMHAManager.getRatisServer()
         .getDivision().getInfo();
     // Wait for Ratis Server to be ready
     waitForSCMToBeReady(ratisDivision);
-    follower = getMockStorageContainerManager(getConfig(FOLLOWER_SCM_ID, 9898))
-        .getScmHAManager().getRatisServer();
+    StorageContainerManager followerSCM = 
getMockStorageContainerManager(FOLLOWER_SCM_ID, 9898);
+    follower = followerSCM.getScmHAManager()
+        .getRatisServer();
   }
 
   private OzoneConfiguration getConfig(String scmId, int ratisPort) {
@@ -150,10 +156,16 @@ class TestSCMHAManagerImpl {
         .getDivision().getGroup().getPeers().size();
   }
 
+  private String getRaftServerAddress(SCMRatisServer ratisServer) {
+    return "localhost:" + ratisServer.getDivision()
+        .getRaftServer()
+        .getServerRpc()
+        .getInetSocketAddress()
+        .getPort();
+  }
+
   private String getFollowerAddress() {
-    return "localhost:" +
-        follower.getDivision()
-            .getRaftServer().getServerRpc().getInetSocketAddress().getPort();
+    return getRaftServerAddress(follower);
   }
 
   @Test
@@ -186,9 +198,8 @@ class TestSCMHAManagerImpl {
     }
   }
 
-  private StorageContainerManager getMockStorageContainerManager(
-      OzoneConfiguration conf) throws IOException {
-    final String scmID =  UUID.randomUUID().toString();
+  private StorageContainerManager getMockStorageContainerManager(String scmID, 
int port) throws IOException {
+    OzoneConfiguration conf = getConfig(scmID, port);
 
     final DBStore dbStore = mock(DBStore.class);
     final SCMContext scmContext = mock(SCMContext.class);
@@ -213,6 +224,7 @@ class TestSCMHAManagerImpl {
         mock(SCMDatanodeProtocolServer.class);
 
     when(scm.getClusterId()).thenReturn(clusterID);
+    when(scm.getConfiguration()).thenReturn(conf);
     when(scm.getScmId()).thenReturn(scmID);
     when(scm.getScmMetadataStore()).thenReturn(metadataStore);
     when(scm.getScmNodeDetails()).thenReturn(nodeDetails);
@@ -231,12 +243,33 @@ class TestSCMHAManagerImpl {
     when(scmHANodeDetails.getLocalNodeDetails()).thenReturn(nodeDetails);
     when(blockManager.getDeletedBlockLog()).thenReturn(deletedBlockLog);
     when(dbStore.initBatchOperation()).thenReturn(batchOperation);
-    when(nodeDetails.getRatisHostPortStr()).thenReturn("localhost:" +
-        conf.get(ScmConfigKeys.OZONE_SCM_RATIS_PORT_KEY));
+    when(nodeDetails.getRatisHostPortStr()).thenReturn("localhost:" + port);
     when(scm.getSystemClock()).thenReturn(Clock.system(ZoneOffset.UTC));
 
+    if (FOLLOWER_SCM_ID.equals(scmID)) {
+      final SCMNodeDetails leaderNodeDetails = mock(SCMNodeDetails.class);
+      final List<SCMNodeDetails> peerNodeDetails = 
singletonList(leaderNodeDetails);
+      when(scmHANodeDetails.getPeerNodeDetails()).thenReturn(peerNodeDetails);
+      when(leaderNodeDetails.getNodeId()).thenReturn(LEADER_SCM_ID);
+      when(leaderNodeDetails.getGrpcPort()).thenReturn(LEADER_PORT);
+      when(leaderNodeDetails.getRatisHostPortStr()).thenReturn("localhost:" + 
LEADER_PORT);
+      InetSocketAddress rpcAddress = NetUtils.createSocketAddr("localhost", 
LEADER_PORT);
+      when(leaderNodeDetails.getRpcAddress()).thenReturn(rpcAddress);
+      
when(leaderNodeDetails.getInetAddress()).thenReturn(rpcAddress.getAddress());
+    }
+
+    DBCheckpoint checkpoint = mock(DBCheckpoint.class);
+    SCMSnapshotProvider scmSnapshotProvider = mock(SCMSnapshotProvider.class);
+    when(scmSnapshotProvider.getSCMDBSnapshot(LEADER_SCM_ID))
+        .thenReturn(checkpoint);
+
     final SCMHAManager manager = new SCMHAManagerImpl(conf,
-        new SecurityConfig(conf), scm);
+        new SecurityConfig(conf), scm) {
+      @Override
+      protected SCMSnapshotProvider 
newScmSnapshotProvider(StorageContainerManager storageContainerManager) {
+        return scmSnapshotProvider;
+      }
+    };
     when(scm.getScmHAManager()).thenReturn(manager);
     return scm;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to