From d1cfe9d2a144ae0aec439b1809f03582c298fad8 Mon Sep 17 00:00:00 2001 From: Sadanand Shenoy Date: Mon, 20 May 2024 17:34:51 +0530 Subject: [PATCH] HDDS-10883. Improve logging in Recon for finalising DN logic. --- .../hadoop/hdds/scm/node/SCMNodeManager.java | 5 ++++ .../ozone/recon/scm/ReconNodeManager.java | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java index d3559a7d9747..3790214f5268 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java @@ -691,6 +691,11 @@ public void processLayoutVersionReport(DatanodeDetails datanodeDetails, return; } + sendFinalizeToDatanodeIfNeeded(datanodeDetails, layoutVersionReport); + } + + protected void sendFinalizeToDatanodeIfNeeded(DatanodeDetails datanodeDetails, + LayoutVersionProto layoutVersionReport) { // Software layout version is hardcoded to the SCM. int scmSlv = scmLayoutVersionManager.getSoftwareLayoutVersion(); int dnSlv = layoutVersionReport.getSoftwareLayoutVersion(); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconNodeManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconNodeManager.java index 6232fb49070f..bd555422830f 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconNodeManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconNodeManager.java @@ -344,4 +344,33 @@ public void removeNode(DatanodeDetails datanodeDetails) throws NodeNotFoundExcep datanodeDetails.getUuid()); } + @Override + protected void sendFinalizeToDatanodeIfNeeded(DatanodeDetails datanodeDetails, + LayoutVersionProto layoutVersionReport) { + // Recon should do nothing here. + int scmSlv = getLayoutVersionManager().getSoftwareLayoutVersion(); + int scmMlv = getLayoutVersionManager().getMetadataLayoutVersion(); + int dnSlv = layoutVersionReport.getSoftwareLayoutVersion(); + int dnMlv = layoutVersionReport.getMetadataLayoutVersion(); + + if (dnSlv > scmSlv) { + LOG.error("Invalid data node reporting to Recon : {}. " + + "DataNode SoftwareLayoutVersion = {}, Recon/SCM " + + "SoftwareLayoutVersion = {}", + datanodeDetails.getHostName(), dnSlv, scmSlv); + } + + if (scmMlv == scmSlv) { + // Recon metadata is finalised. + if (dnMlv < scmMlv) { + if (LOG.isDebugEnabled()) { + LOG.debug("Data node {} reports a lower MLV than Recon " + + "DataNode MetadataLayoutVersion = {}, Recon/SCM " + + "MetadataLayoutVersion = {}. SCM needs to finalize this DN", + datanodeDetails.getHostName(), dnMlv, scmMlv); + } + } + } + + } }