From 4dec6bf44af34d5f80e527023bb4b884f0ffbd2a Mon Sep 17 00:00:00 2001 From: Sammi Chen Date: Fri, 7 Feb 2025 23:28:31 +0800 Subject: [PATCH 1/3] HDDS-12238. Improve OM DELETE_KEY audit log to include key size --- .../ozone/client/rpc/OzoneRpcClientTests.java | 83 ++++++++++++++++++- .../ozone/om/request/RequestAuditor.java | 18 +++- .../om/request/key/OMKeyDeleteRequest.java | 6 +- .../key/OMKeyDeleteRequestWithFSO.java | 7 +- .../om/request/key/OMKeysDeleteRequest.java | 22 ++++- 5 files changed, 127 insertions(+), 9 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java index 7e518687beaf..6f41b4fddcda 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java @@ -17,11 +17,14 @@ package org.apache.hadoop.ozone.client.rpc; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.PrintStream; import java.io.RandomAccessFile; +import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Path; @@ -228,10 +231,17 @@ abstract class OzoneRpcClientTests extends OzoneTestBase { remoteGroupName, ACCESS, READ); private static MessageDigest eTagProvider; private static Set ozoneClients = new HashSet<>(); + private static PrintStream old; + private static ByteArrayOutputStream baos; @BeforeAll - public static void initialize() throws NoSuchAlgorithmException { + public static void initialize() throws NoSuchAlgorithmException, UnsupportedEncodingException { eTagProvider = MessageDigest.getInstance(MD5_HASH); + System.setProperty("log4j.configurationFile", "auditlog.properties"); + old = System.out; + baos = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(baos, true, UTF_8.toString()); + System.setOut(ps); } /** @@ -278,6 +288,7 @@ static void shutdownCluster() { if (cluster != null) { cluster.shutdown(); } + System.setOut(old); } private static void setOzClient(OzoneClient ozClient) { @@ -1076,6 +1087,76 @@ public void testDeleteLinkedBucket() throws Exception { store.deleteVolume(volumeName); } + @Test + public void testDeleteAuditLog() throws Exception { + String volumeName = UUID.randomUUID().toString(); + String bucketName = UUID.randomUUID().toString(); + + String value = "sample value"; + store.createVolume(volumeName); + OzoneVolume volume = store.getVolume(volumeName); + volume.createBucket(bucketName); + OzoneBucket bucket = volume.getBucket(bucketName); + + // create a three replica file + String keyName1 = "key1"; + try (OzoneOutputStream out = bucket.createKey(keyName1, + value.getBytes(UTF_8).length, RATIS, THREE, new HashMap<>())) { + out.write(value.getBytes(UTF_8)); + } + + // create a EC replica file + String keyName2 = "key2"; + ReplicationConfig replicationConfig = new ECReplicationConfig("rs-3-2-1024k"); + try (OzoneOutputStream out = bucket.createKey(keyName2, + value.getBytes(UTF_8).length, replicationConfig, new HashMap<>())) { + out.write(value.getBytes(UTF_8)); + } + + // create a directory and a file + String dirName = "dir1"; + bucket.createDirectory(dirName); + String keyName3 = "key3"; + try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName3, + value.getBytes(UTF_8).length, RATIS, THREE, true, true)) { + out.write(value.getBytes(UTF_8)); + } + + // delete files and directory + bucket.deleteKey(keyName1); + bucket.deleteKey(keyName2); + bucket.deleteDirectory(dirName, true); + + // create keys for deleteKeys case + String keyName4 = "key4"; + try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName4, + value.getBytes(UTF_8).length, RATIS, THREE, true, true)) { + out.write(value.getBytes(UTF_8)); + } + String keyName5 = "key5"; + try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName5, + value.getBytes(UTF_8).length, replicationConfig, true, true)) { + out.write(value.getBytes(UTF_8)); + } + List keysToDelete = new ArrayList<>(); + keysToDelete.add(dirName + "/" + keyName4); + keysToDelete.add(dirName + "/" + keyName5); + bucket.deleteKeys(keysToDelete); + + String consoleOutput = baos.toString(UTF_8.toString()); + assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=key1, dataSize=" + value.getBytes(UTF_8).length + ", replicationConfig=RATIS/THREE")); + assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=key2, dataSize=" + value.getBytes(UTF_8).length + ", replicationConfig=EC{rs-3-2-1024k}")); + assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=dir1, Transaction")); + assertTrue(consoleOutput.contains("op=DELETE_KEYS {volume=" + volumeName + ", bucket=" + bucketName + + ", deletedKeysList={key=dir1/key4, dataSize=" + value.getBytes(UTF_8).length + + ", replicationConfig=RATIS/THREE}, {key=dir1/key5, dataSize=" + value.getBytes(UTF_8).length + + ", replicationConfig=EC{rs-3-2-1024k}}, unDeletedKeysList=")); + System.setOut(old); + } + protected void verifyReplication(String volumeName, String bucketName, String keyName, ReplicationConfig replication) throws IOException { diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/RequestAuditor.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/RequestAuditor.java index f73255da1173..57838d2e08d7 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/RequestAuditor.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/RequestAuditor.java @@ -60,15 +60,27 @@ OMAuditLogger.Builder buildAuditMessage( * Build auditMap for KeyArgs. * @param keyArgs */ - default Map buildKeyArgsAuditMap(KeyArgs keyArgs) { - + default Map buildLightKeyArgsAuditMap(KeyArgs keyArgs) { if (keyArgs == null) { return new HashMap<>(0); } else { - Map< String, String > auditMap = new LinkedHashMap<>(); + Map auditMap = new LinkedHashMap<>(); auditMap.put(OzoneConsts.VOLUME, keyArgs.getVolumeName()); auditMap.put(OzoneConsts.BUCKET, keyArgs.getBucketName()); auditMap.put(OzoneConsts.KEY, keyArgs.getKeyName()); + return auditMap; + } + } + + /** + * Build auditMap for KeyArgs. + * @param keyArgs + */ + default Map buildKeyArgsAuditMap(KeyArgs keyArgs) { + if (keyArgs == null) { + return new HashMap<>(0); + } else { + Map< String, String > auditMap = buildLightKeyArgsAuditMap(keyArgs); auditMap.put(OzoneConsts.DATA_SIZE, String.valueOf(keyArgs.getDataSize())); if (keyArgs.hasType()) { diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java index 3885c18aff3c..495f9bbd7e1d 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java @@ -113,7 +113,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut DeleteKeyRequest deleteKeyRequest = getOmRequest().getDeleteKeyRequest(); OzoneManagerProtocolProtos.KeyArgs keyArgs = deleteKeyRequest.getKeyArgs(); - Map auditMap = buildKeyArgsAuditMap(keyArgs); + Map auditMap = buildLightKeyArgsAuditMap(keyArgs); String volumeName = keyArgs.getVolumeName(); String bucketName = keyArgs.getBucketName(); @@ -187,6 +187,10 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut omResponse.setDeleteKeyResponse(DeleteKeyResponse.newBuilder()) .build(), omKeyInfo, ozoneManager.isRatisEnabled(), omBucketInfo.copyObject(), deletedOpenKeyInfo); + if (omKeyInfo.isFile()) { + auditMap.put(OzoneConsts.DATA_SIZE, String.valueOf(omKeyInfo.getDataSize())); + auditMap.put(OzoneConsts.REPLICATION_CONFIG, omKeyInfo.getReplicationConfig().toString()); + } result = Result.SUCCESS; long endNanosDeleteKeySuccessLatencyNs = Time.monotonicNowNanos(); diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java index 19fed5d85db4..4fe26242934c 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequestWithFSO.java @@ -77,7 +77,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut OzoneManagerProtocolProtos.KeyArgs keyArgs = deleteKeyRequest.getKeyArgs(); - Map auditMap = buildKeyArgsAuditMap(keyArgs); + Map auditMap = buildLightKeyArgsAuditMap(keyArgs); String volumeName = keyArgs.getVolumeName(); String bucketName = keyArgs.getBucketName(); @@ -175,6 +175,11 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut } } + if (keyStatus.isFile()) { + auditMap.put(OzoneConsts.DATA_SIZE, String.valueOf(omKeyInfo.getDataSize())); + auditMap.put(OzoneConsts.REPLICATION_CONFIG, omKeyInfo.getReplicationConfig().toString()); + } + omClientResponse = new OMKeyDeleteResponseWithFSO(omResponse .setDeleteKeyResponse(DeleteKeyResponse.newBuilder()).build(), keyName, omKeyInfo, ozoneManager.isRatisEnabled(), diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java index 27fcf55ef908..bbaca7604f90 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java @@ -66,8 +66,11 @@ import java.util.Map; import static org.apache.hadoop.ozone.OzoneConsts.BUCKET; +import static org.apache.hadoop.ozone.OzoneConsts.DATA_SIZE; import static org.apache.hadoop.ozone.OzoneConsts.DELETED_HSYNC_KEY; import static org.apache.hadoop.ozone.OzoneConsts.DELETED_KEYS_LIST; +import static org.apache.hadoop.ozone.OzoneConsts.KEY; +import static org.apache.hadoop.ozone.OzoneConsts.REPLICATION_CONFIG; import static org.apache.hadoop.ozone.OzoneConsts.UNDELETED_KEYS_LIST; import static org.apache.hadoop.ozone.OzoneConsts.VOLUME; import static org.apache.hadoop.ozone.audit.OMAction.DELETE_KEYS; @@ -96,6 +99,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut deleteKeyRequest.getDeleteKeys(); List deleteKeys = new ArrayList<>(deleteKeyArgs.getKeysList()); + List deleteKeysInfo = new ArrayList<>(); Exception exception = null; OMClientResponse omClientResponse = null; @@ -175,6 +179,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut ozoneManager, omMetadataManager, volumeName, bucketName, keyName); addKeyToAppropriateList(omKeyInfoList, omKeyInfo, dirList, fileStatus); + deleteKeysInfo.add(omKeyInfo); } catch (Exception ex) { deleteStatus = false; LOG.error("Acl check failed for Key: {}", objectKey, ex); @@ -211,6 +216,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut // reset deleteKeys as request failed. deleteKeys = new ArrayList<>(); + deleteKeysInfo.clear(); // Add all keys which are failed due to any other exception . for (int i = indexFailed; i < length; i++) { unDeletedKeys.addKeys(deleteKeyArgs.getKeys(i)); @@ -235,7 +241,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut } } - addDeletedKeys(auditMap, deleteKeys, unDeletedKeys.getKeysList()); + addDeletedKeys(auditMap, deleteKeysInfo, unDeletedKeys.getKeysList()); markForAudit(auditLogger, buildAuditMessage(DELETE_KEYS, auditMap, exception, userInfo)); @@ -346,8 +352,18 @@ protected OmKeyInfo getOmKeyInfo( * Add key info to audit map for DeleteKeys request. */ protected static void addDeletedKeys(Map auditMap, - List deletedKeys, List unDeletedKeys) { - auditMap.put(DELETED_KEYS_LIST, String.join(",", deletedKeys)); + List deletedKeyInfos, List unDeletedKeys) { + StringBuffer keys = new StringBuffer(); + for (int i = 0; i < deletedKeyInfos.size(); i++) { + OmKeyInfo key = deletedKeyInfos.get(i); + keys.append("{").append(KEY).append("=").append(key.getKeyName()).append(", "); + keys.append(DATA_SIZE).append("=").append(key.getDataSize()).append(", "); + keys.append(REPLICATION_CONFIG).append("=").append(key.getReplicationConfig()).append("}"); + if (i < deletedKeyInfos.size() - 1) { + keys.append(", "); + } + } + auditMap.put(DELETED_KEYS_LIST, keys.toString()); auditMap.put(UNDELETED_KEYS_LIST, String.join(",", unDeletedKeys)); } From ae3014f9a9b8310b53c70f27526ba44b1aad4d95 Mon Sep 17 00:00:00 2001 From: Sammi Chen Date: Mon, 10 Feb 2025 21:31:33 +0800 Subject: [PATCH 2/3] address comments --- .../ozone/client/rpc/OzoneRpcClientTests.java | 68 +++++++------------ .../om/request/key/OMKeysDeleteRequest.java | 2 +- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java index 6f41b4fddcda..174de920192b 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java @@ -17,12 +17,10 @@ package org.apache.hadoop.ozone.client.rpc; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.PrintStream; import java.io.RandomAccessFile; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; @@ -90,6 +88,8 @@ import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.OzoneTestUtils; +import org.apache.hadoop.ozone.TestDataUtil; +import org.apache.hadoop.ozone.audit.AuditLogTestUtils; import org.apache.hadoop.ozone.client.BucketArgs; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneBucket; @@ -231,17 +231,13 @@ abstract class OzoneRpcClientTests extends OzoneTestBase { remoteGroupName, ACCESS, READ); private static MessageDigest eTagProvider; private static Set ozoneClients = new HashSet<>(); - private static PrintStream old; - private static ByteArrayOutputStream baos; + private static GenericTestUtils.PrintStreamCapturer out; @BeforeAll public static void initialize() throws NoSuchAlgorithmException, UnsupportedEncodingException { eTagProvider = MessageDigest.getInstance(MD5_HASH); - System.setProperty("log4j.configurationFile", "auditlog.properties"); - old = System.out; - baos = new ByteArrayOutputStream(); - PrintStream ps = new PrintStream(baos, true, UTF_8.toString()); - System.setOut(ps); + AuditLogTestUtils.enableAuditLog(); + out = GenericTestUtils.captureOut(); } /** @@ -280,6 +276,7 @@ static void startCluster(OzoneConfiguration conf, MiniOzoneCluster.Builder build static void shutdownCluster() { org.apache.hadoop.hdds.utils.IOUtils.closeQuietly(ozoneClients); ozoneClients.clear(); + org.apache.hadoop.hdds.utils.IOUtils.closeQuietly(out); if (storageContainerLocationClient != null) { storageContainerLocationClient.close(); @@ -288,7 +285,6 @@ static void shutdownCluster() { if (cluster != null) { cluster.shutdown(); } - System.setOut(old); } private static void setOzClient(OzoneClient ozClient) { @@ -1093,6 +1089,7 @@ public void testDeleteAuditLog() throws Exception { String bucketName = UUID.randomUUID().toString(); String value = "sample value"; + int valueLength = value.getBytes(UTF_8).length; store.createVolume(volumeName); OzoneVolume volume = store.getVolume(volumeName); volume.createBucket(bucketName); @@ -1100,61 +1097,48 @@ public void testDeleteAuditLog() throws Exception { // create a three replica file String keyName1 = "key1"; - try (OzoneOutputStream out = bucket.createKey(keyName1, - value.getBytes(UTF_8).length, RATIS, THREE, new HashMap<>())) { - out.write(value.getBytes(UTF_8)); - } + TestDataUtil.createKey(bucket, keyName1, THREE, RATIS, value); // create a EC replica file String keyName2 = "key2"; ReplicationConfig replicationConfig = new ECReplicationConfig("rs-3-2-1024k"); - try (OzoneOutputStream out = bucket.createKey(keyName2, - value.getBytes(UTF_8).length, replicationConfig, new HashMap<>())) { - out.write(value.getBytes(UTF_8)); - } + TestDataUtil.createKey(bucket, keyName2, replicationConfig, value); // create a directory and a file String dirName = "dir1"; bucket.createDirectory(dirName); String keyName3 = "key3"; - try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName3, - value.getBytes(UTF_8).length, RATIS, THREE, true, true)) { - out.write(value.getBytes(UTF_8)); - } + TestDataUtil.createKey(bucket, keyName3, THREE, RATIS, value); // delete files and directory + out.reset(); bucket.deleteKey(keyName1); bucket.deleteKey(keyName2); bucket.deleteDirectory(dirName, true); // create keys for deleteKeys case String keyName4 = "key4"; - try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName4, - value.getBytes(UTF_8).length, RATIS, THREE, true, true)) { - out.write(value.getBytes(UTF_8)); - } + TestDataUtil.createKey(bucket, dirName + "/" + keyName4, THREE, RATIS, value); + String keyName5 = "key5"; - try (OzoneOutputStream out = bucket.createFile(dirName + "/" + keyName5, - value.getBytes(UTF_8).length, replicationConfig, true, true)) { - out.write(value.getBytes(UTF_8)); - } + TestDataUtil.createKey(bucket, dirName + "/" + keyName5, replicationConfig, value); + List keysToDelete = new ArrayList<>(); keysToDelete.add(dirName + "/" + keyName4); keysToDelete.add(dirName + "/" + keyName5); bucket.deleteKeys(keysToDelete); - String consoleOutput = baos.toString(UTF_8.toString()); - assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + - ", key=key1, dataSize=" + value.getBytes(UTF_8).length + ", replicationConfig=RATIS/THREE")); - assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + - ", key=key2, dataSize=" + value.getBytes(UTF_8).length + ", replicationConfig=EC{rs-3-2-1024k}")); - assertTrue(consoleOutput.contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + - ", key=dir1, Transaction")); - assertTrue(consoleOutput.contains("op=DELETE_KEYS {volume=" + volumeName + ", bucket=" + bucketName + - ", deletedKeysList={key=dir1/key4, dataSize=" + value.getBytes(UTF_8).length + - ", replicationConfig=RATIS/THREE}, {key=dir1/key5, dataSize=" + value.getBytes(UTF_8).length + - ", replicationConfig=EC{rs-3-2-1024k}}, unDeletedKeysList=")); - System.setOut(old); + String consoleOutput = out.get(); + assertThat(consoleOutput).contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=key1, dataSize=" + valueLength + ", replicationConfig=RATIS/THREE"); + assertThat(consoleOutput).contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=key2, dataSize=" + valueLength + ", replicationConfig=EC{rs-3-2-1024k}"); + assertThat(consoleOutput).contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + + ", key=dir1, Transaction"); + assertThat(consoleOutput).contains("op=DELETE_KEYS {volume=" + volumeName + ", bucket=" + bucketName + + ", deletedKeysList={key=dir1/key4, dataSize=" + valueLength + + ", replicationConfig=RATIS/THREE}, {key=dir1/key5, dataSize=" + valueLength + + ", replicationConfig=EC{rs-3-2-1024k}}, unDeletedKeysList="); } protected void verifyReplication(String volumeName, String bucketName, diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java index bbaca7604f90..128ed20abaf4 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java @@ -353,7 +353,7 @@ protected OmKeyInfo getOmKeyInfo( */ protected static void addDeletedKeys(Map auditMap, List deletedKeyInfos, List unDeletedKeys) { - StringBuffer keys = new StringBuffer(); + StringBuilder keys = new StringBuilder(); for (int i = 0; i < deletedKeyInfos.size(); i++) { OmKeyInfo key = deletedKeyInfos.get(i); keys.append("{").append(KEY).append("=").append(key.getKeyName()).append(", "); From c717165fe4ec49abfbd1a1b42f7dc3269e3b4cd2 Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Mon, 10 Feb 2025 19:16:29 +0100 Subject: [PATCH 3/3] fix checkstyle --- .../hadoop/ozone/client/rpc/OzoneRpcClientTests.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java index 174de920192b..cafd37423533 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java @@ -231,13 +231,13 @@ abstract class OzoneRpcClientTests extends OzoneTestBase { remoteGroupName, ACCESS, READ); private static MessageDigest eTagProvider; private static Set ozoneClients = new HashSet<>(); - private static GenericTestUtils.PrintStreamCapturer out; + private static GenericTestUtils.PrintStreamCapturer output; @BeforeAll public static void initialize() throws NoSuchAlgorithmException, UnsupportedEncodingException { eTagProvider = MessageDigest.getInstance(MD5_HASH); AuditLogTestUtils.enableAuditLog(); - out = GenericTestUtils.captureOut(); + output = GenericTestUtils.captureOut(); } /** @@ -276,7 +276,7 @@ static void startCluster(OzoneConfiguration conf, MiniOzoneCluster.Builder build static void shutdownCluster() { org.apache.hadoop.hdds.utils.IOUtils.closeQuietly(ozoneClients); ozoneClients.clear(); - org.apache.hadoop.hdds.utils.IOUtils.closeQuietly(out); + org.apache.hadoop.hdds.utils.IOUtils.closeQuietly(output); if (storageContainerLocationClient != null) { storageContainerLocationClient.close(); @@ -1111,7 +1111,7 @@ public void testDeleteAuditLog() throws Exception { TestDataUtil.createKey(bucket, keyName3, THREE, RATIS, value); // delete files and directory - out.reset(); + output.reset(); bucket.deleteKey(keyName1); bucket.deleteKey(keyName2); bucket.deleteDirectory(dirName, true); @@ -1128,7 +1128,7 @@ public void testDeleteAuditLog() throws Exception { keysToDelete.add(dirName + "/" + keyName5); bucket.deleteKeys(keysToDelete); - String consoleOutput = out.get(); + String consoleOutput = output.get(); assertThat(consoleOutput).contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName + ", key=key1, dataSize=" + valueLength + ", replicationConfig=RATIS/THREE"); assertThat(consoleOutput).contains("op=DELETE_KEY {volume=" + volumeName + ", bucket=" + bucketName +