diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java index a90ee336b001..342d7eda5d45 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java @@ -54,6 +54,7 @@ import java.util.stream.Stream; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.io.FileUtils; @@ -133,6 +134,25 @@ public void init() throws ServletException { lock = new Lock(om); } + @Override + public void processMetadataSnapshotRequest(HttpServletRequest request, HttpServletResponse response, + boolean isFormData, boolean flush) { + OzoneManager om = (OzoneManager) getServletContext().getAttribute(OzoneConsts.OM_CONTEXT_ATTRIBUTE); + boolean isOmLeader = om.isLeaderReady(); + if (!isOmLeader) { + String msg = "Unable to process metadata snapshot request as this OM is not the leader"; + LOG.warn(msg); + try { + response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, msg); + } catch (IOException e) { + LOG.warn("Failed to send error response, falling back to status only", e); + response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); + } + return; + } + super.processMetadataSnapshotRequest(request, response, isFormData, flush); + } + @Override public void writeDbDataToStream(DBCheckpoint checkpoint, HttpServletRequest request, diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java index 817dfc30b449..2c4a423db2c3 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java @@ -142,6 +142,19 @@ public BootstrapStateHandler.Lock getBootstrapStateLock() { @Override public void processMetadataSnapshotRequest(HttpServletRequest request, HttpServletResponse response, boolean isFormData, boolean flush) { + OzoneManager om = (OzoneManager) getServletContext().getAttribute(OzoneConsts.OM_CONTEXT_ATTRIBUTE); + boolean isOmLeader = om.isLeaderReady(); + if (!isOmLeader) { + String msg = "Unable to process metadata snapshot request as this OM is not the leader"; + LOG.warn(msg); + try { + response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, msg); + } catch (IOException e) { + LOG.warn("Failed to send error response, falling back to status only", e); + response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); + } + return; + } String[] sstParam = isFormData ? parseFormDataParameters(request) : request.getParameterValues( OZONE_DB_CHECKPOINT_REQUEST_TO_EXCLUDE_SST);