diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMUpgradeFinalization.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMUpgradeFinalization.java index ccf94bef3c80..047b8e553b5e 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMUpgradeFinalization.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMUpgradeFinalization.java @@ -36,12 +36,17 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.MiniOzoneCluster; import org.apache.hadoop.ozone.MiniOzoneHAClusterImpl; +import org.apache.hadoop.ozone.audit.AuditEventStatus; +import org.apache.hadoop.ozone.audit.AuditLogTestUtils; +import org.apache.hadoop.ozone.audit.OMAction; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol; import org.apache.hadoop.ozone.om.ratis.OzoneManagerStateMachine; import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer.StatusAndMessages; import org.apache.ratis.util.LifeCycle; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** @@ -49,7 +54,18 @@ * TODO: can be merged into class with other OM tests with per-method cluster */ class TestOMUpgradeFinalization { + static { + AuditLogTestUtils.enableAuditLog(); + } + @BeforeEach + public void setup() throws Exception { + AuditLogTestUtils.truncateAuditLogFile(); + } + @AfterAll + public static void shutdown() { + AuditLogTestUtils.deleteAuditLogFile(); + } @Test void testOMUpgradeFinalizationWithOneOMDown() throws Exception { OzoneConfiguration conf = new OzoneConfiguration(); @@ -70,11 +86,14 @@ void testOMUpgradeFinalizationWithOneOMDown() throws Exception { // OMs. long prepareIndex = omClient.prepareOzoneManager(120L, 5L); assertClusterPrepared(prepareIndex, runningOms); + AuditLogTestUtils.verifyAuditLog(OMAction.UPGRADE_PREPARE, AuditEventStatus.SUCCESS); omClient.cancelOzoneManagerPrepare(); + AuditLogTestUtils.verifyAuditLog(OMAction.UPGRADE_CANCEL, AuditEventStatus.SUCCESS); StatusAndMessages response = omClient.finalizeUpgrade("finalize-test"); System.out.println("Finalization Messages : " + response.msgs()); + AuditLogTestUtils.verifyAuditLog(OMAction.UPGRADE_FINALIZE, AuditEventStatus.SUCCESS); waitForFinalization(omClient); cluster.restartOzoneManager(downedOM, true); diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/audit/OMAction.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/audit/OMAction.java index 4804b317bc7d..aa8e47d1745b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/audit/OMAction.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/audit/OMAction.java @@ -103,7 +103,10 @@ public enum OMAction implements AuditAction { SNAPSHOT_INFO, SET_TIMES, - ABORT_EXPIRED_MULTIPART_UPLOAD; + ABORT_EXPIRED_MULTIPART_UPLOAD, + UPGRADE_PREPARE, + UPGRADE_CANCEL, + UPGRADE_FINALIZE; @Override public String getAction() { diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java index 507b41f76873..ea3a4127d4e4 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMCancelPrepareRequest.java @@ -17,6 +17,10 @@ package org.apache.hadoop.ozone.om.request.upgrade; +import java.util.HashMap; +import org.apache.hadoop.ozone.audit.AuditLogger; +import org.apache.hadoop.ozone.audit.OMAction; +import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import org.apache.ratis.server.protocol.TermIndex; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.exceptions.OMException; @@ -54,10 +58,13 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn LOG.info("OM {} Received cancel prepare request with log {}", ozoneManager.getOMNodeId(), termIndex); OMRequest omRequest = getOmRequest(); + AuditLogger auditLogger = ozoneManager.getAuditLogger(); + OzoneManagerProtocolProtos.UserInfo userInfo = omRequest.getUserInfo(); OMResponse.Builder responseBuilder = OmResponseUtil.getOMResponseBuilder(omRequest); responseBuilder.setCmdType(Type.CancelPrepare); OMClientResponse response = null; + Exception exception = null; try { UserGroupInformation ugi = createUGIForApi(); @@ -82,12 +89,15 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn LOG.info("OM {} prepare state cancelled at log {}. Returning response {}", ozoneManager.getOMNodeId(), termIndex, omResponse); } catch (IOException e) { + exception = e; LOG.error("Cancel Prepare Request apply failed in {}. ", ozoneManager.getOMNodeId(), e); response = new OMPrepareResponse( createErrorOMResponse(responseBuilder, e)); } + auditLog(auditLogger, buildAuditMessage(OMAction.UPGRADE_CANCEL, + new HashMap<>(), exception, userInfo)); return response; } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java index 8ebf53706cbc..42cc2dc08759 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMFinalizeUpgradeRequest.java @@ -20,8 +20,12 @@ import static org.apache.hadoop.ozone.OzoneConsts.LAYOUT_VERSION_KEY; import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type.FinalizeUpgrade; +import java.util.HashMap; import org.apache.hadoop.hdds.protocol.proto.HddsProtos .UpgradeFinalizationStatus; +import org.apache.hadoop.ozone.audit.AuditLogger; +import org.apache.hadoop.ozone.audit.OMAction; +import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import org.apache.ratis.server.protocol.TermIndex; import org.apache.hadoop.hdds.utils.db.cache.CacheKey; import org.apache.hadoop.hdds.utils.db.cache.CacheValue; @@ -58,10 +62,13 @@ public OMFinalizeUpgradeRequest(OMRequest omRequest) { @Override public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIndex termIndex) { LOG.trace("Request: {}", getOmRequest()); + AuditLogger auditLogger = ozoneManager.getAuditLogger(); + OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo(); OMResponse.Builder responseBuilder = OmResponseUtil.getOMResponseBuilder(getOmRequest()); responseBuilder.setCmdType(FinalizeUpgrade); OMClientResponse response = null; + Exception exception = null; try { if (ozoneManager.getAclsEnabled()) { @@ -103,10 +110,13 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn ozoneManager.getVersionManager().getMetadataLayoutVersion()); LOG.trace("Returning response: {}", response); } catch (IOException e) { + exception = e; response = new OMFinalizeUpgradeResponse( createErrorOMResponse(responseBuilder, e), -1); } + auditLog(auditLogger, buildAuditMessage(OMAction.UPGRADE_FINALIZE, + new HashMap<>(), exception, userInfo)); return response; } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMPrepareRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMPrepareRequest.java index a814459050bf..505f52860b18 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMPrepareRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/upgrade/OMPrepareRequest.java @@ -17,6 +17,9 @@ package org.apache.hadoop.ozone.om.request.upgrade; +import java.util.HashMap; +import org.apache.hadoop.ozone.audit.AuditLogger; +import org.apache.hadoop.ozone.audit.OMAction; import org.apache.ratis.server.protocol.TermIndex; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.exceptions.OMException; @@ -69,12 +72,15 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn LOG.info("OM {} Received prepare request with log {}", ozoneManager.getOMNodeId(), termIndex); OMRequest omRequest = getOmRequest(); + AuditLogger auditLogger = ozoneManager.getAuditLogger(); + OzoneManagerProtocolProtos.UserInfo userInfo = omRequest.getUserInfo(); OzoneManagerProtocolProtos.PrepareRequestArgs args = omRequest.getPrepareRequest().getArgs(); OMResponse.Builder responseBuilder = OmResponseUtil.getOMResponseBuilder(omRequest); responseBuilder.setCmdType(Type.Prepare); OMClientResponse response = null; + Exception exception = null; // Allow double buffer this many seconds to flush all transactions before // returning an error to the caller. @@ -123,6 +129,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn "log index {}", ozoneManager.getOMNodeId(), transactionLogIndex, omResponse, omResponse.getTxnID()); } catch (OMException e) { + exception = e; LOG.error("Prepare Request Apply failed in {}. ", ozoneManager.getOMNodeId(), e); response = new OMPrepareResponse( @@ -130,6 +137,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn } catch (InterruptedException | IOException e) { // Set error code so that prepare failure does not cause the OM to // terminate. + exception = e; LOG.error("Prepare Request Apply failed in {}. ", ozoneManager.getOMNodeId(), e); response = new OMPrepareResponse( @@ -149,6 +157,8 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, TermIn } } + auditLog(auditLogger, buildAuditMessage(OMAction.UPGRADE_PREPARE, + new HashMap<>(), exception, userInfo)); return response; }