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

adoroszlai 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 f399f1ba5c HDDS-10539. Replace GSON with Jackson in multitenancy code. 
(#6399)
f399f1ba5c is described below

commit f399f1ba5c0ebf0189e05891a1492b74781ac654
Author: Arafat2198 <[email protected]>
AuthorDate: Thu Mar 21 01:42:16 2024 +0530

    HDDS-10539. Replace GSON with Jackson in multitenancy code. (#6399)
---
 .../org/apache/hadoop/hdds/server/JsonUtils.java   |  8 +++
 .../smoketest/security/ozone-secure-tenant.robot   |  2 +-
 .../ozone/om/multitenant/RangerUserRequest.java    | 28 ++++-----
 .../hadoop/ozone/shell/TestOzoneTenantShell.java   | 68 +++++++++++++---------
 .../ozone/shell/tenant/GetUserInfoHandler.java     | 44 ++++++--------
 .../shell/tenant/TenantAssignAdminHandler.java     | 21 ++++---
 .../ozone/shell/tenant/TenantCreateHandler.java    | 15 +++--
 .../ozone/shell/tenant/TenantDeleteHandler.java    | 17 +++---
 .../ozone/shell/tenant/TenantListHandler.java      | 31 +++++-----
 .../ozone/shell/tenant/TenantListUsersHandler.java | 19 +++---
 .../shell/tenant/TenantRevokeAdminHandler.java     | 21 ++++---
 11 files changed, 142 insertions(+), 132 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java
index d14129972c..538dd522d0 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java
@@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.MappingIterator;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.databind.ObjectWriter;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.SequenceWriter;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -70,9 +71,16 @@ public final class JsonUtils {
   }
 
   public static ObjectNode createObjectNode(Object next) {
+    if (next == null) {
+      return MAPPER.createObjectNode();
+    }
     return MAPPER.valueToTree(next);
   }
 
+  public static JsonNode readTree(String content) throws IOException {
+    return MAPPER.readTree(content);
+  }
+
   /**
    * Utility to sequentially write a large collection of items to a file.
    */
diff --git 
a/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-tenant.robot 
b/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-tenant.robot
index 6ac38ccc32..789d43dc66 100644
--- a/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-tenant.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/security/ozone-secure-tenant.robot
@@ -30,7 +30,7 @@ ${S3G_ENDPOINT_URL}     http://s3g:9878
 Create Tenant Success with Cluster Admin
     Run Keyword         Kinit test user     testuser     testuser.keytab
     ${output} =         Execute          ozone tenant --verbose create 
tenantone
-                        Should contain   ${output}         "tenantId": 
"tenantone"
+                        Should contain   ${output}         "tenantId" : 
"tenantone"
 
 Assign User Success with Cluster Admin
     ${output} =         Execute          ozone tenant --verbose user assign 
testuser --tenant=tenantone
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/RangerUserRequest.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/RangerUserRequest.java
index 07bb3cf962..cde89599fb 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/RangerUserRequest.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/RangerUserRequest.java
@@ -17,10 +17,9 @@
  */
 package org.apache.hadoop.ozone.om.multitenant;
 
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonParser;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.apache.hadoop.hdds.server.JsonUtils;
 import org.apache.kerby.util.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -191,7 +190,7 @@ public class RangerUserRequest {
   }
 
   private HttpURLConnection makeHttpGetCall(String urlString,
-      String method, boolean isSpnego) throws IOException {
+                                            String method, boolean isSpnego) 
throws IOException {
 
     URL url = new URL(urlString);
     final HttpURLConnection urlConnection = openURLConnection(url);
@@ -215,14 +214,16 @@ public class RangerUserRequest {
     String response = getResponseData(conn);
     String userIDCreated = null;
     try {
-      JsonObject jResonse = JsonParser.parseString(response).getAsJsonObject();
-      JsonArray userinfo = jResonse.get("vXUsers").getAsJsonArray();
+      JsonNode jResponse =
+          JsonUtils.readTree(response);
+      JsonNode userinfo = jResponse.path("vXUsers");
       int numIndex = userinfo.size();
+
       for (int i = 0; i < numIndex; ++i) {
-        if (userinfo.get(i).getAsJsonObject().get("name").getAsString()
-            .equals(userPrincipal)) {
-          userIDCreated =
-              userinfo.get(i).getAsJsonObject().get("id").getAsString();
+        JsonNode userNode = userinfo.get(i);
+        String name = userNode.path("name").asText();
+        if (name.equals(userPrincipal)) {
+          userIDCreated = userNode.path("id").asText();
           break;
         }
       }
@@ -231,6 +232,7 @@ public class RangerUserRequest {
       e.printStackTrace();
       throw e;
     }
+
     return userIDCreated;
   }
 
@@ -253,8 +255,8 @@ public class RangerUserRequest {
     String userId;
     try {
       assert userInfo != null;
-      JsonObject jObject = JsonParser.parseString(userInfo).getAsJsonObject();
-      userId = jObject.get("id").getAsString();
+      JsonNode jNode = JsonUtils.readTree(userInfo);
+      userId = jNode.get("id").asText();
       LOG.debug("Ranger returned userId: {}", userId);
     } catch (JsonParseException e) {
       e.printStackTrace();
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneTenantShell.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneTenantShell.java
index 703848130f..5d64750714 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneTenantShell.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneTenantShell.java
@@ -375,17 +375,17 @@ public class TestOzoneTenantShell {
       executeHA(tenantShell, new String[] {"--verbose", "user", "assign-admin",
           tenantName + "$" + userName, "--tenant=" + tenantName,
           "--delegated=true"});
-      checkOutput(out, "{\n" + "  \"accessId\": \"devaa$alice\",\n"
-          + "  \"tenantId\": \"devaa\",\n" + "  \"isAdmin\": true,\n"
-          + "  \"isDelegatedAdmin\": true\n" + "}\n", true, true);
+      checkOutput(out, "{\n" + "  \"accessId\" : \"devaa$alice\",\n"
+          + "  \"tenantId\" : \"devaa\",\n" + "  \"isAdmin\" : true,\n"
+          + "  \"isDelegatedAdmin\" : true\n" + "}\n", true, true);
       checkOutput(err, "", true);
 
       // Clean up
       executeHA(tenantShell, new String[] {"--verbose", "user", "revoke-admin",
           tenantName + "$" + userName, "--tenant=" + tenantName});
-      checkOutput(out, "{\n" + "  \"accessId\": \"devaa$alice\",\n"
-          + "  \"tenantId\": \"devaa\",\n" + "  \"isAdmin\": false,\n"
-          + "  \"isDelegatedAdmin\": false\n" + "}\n", true, true);
+      checkOutput(out, "{\n" + "  \"accessId\" : \"devaa$alice\",\n"
+          + "  \"tenantId\" : \"devaa\",\n" + "  \"isAdmin\" : false,\n"
+          + "  \"isDelegatedAdmin\" : false\n" + "}\n", true, true);
       checkOutput(err, "", true);
 
       executeHA(tenantShell, new String[] {
@@ -458,7 +458,7 @@ public class TestOzoneTenantShell {
 
     executeHA(tenantShell, new String[] {"list", "--json"});
     // Not checking the full output here
-    checkOutput(out, "\"tenantId\": \"dev\",", false);
+    checkOutput(out, "\"tenantId\" : \"dev\",", false);
     checkOutput(err, "", true);
 
     // Attempt user getsecret before assignment, should fail
@@ -527,16 +527,26 @@ public class TestOzoneTenantShell {
 
     executeHA(tenantShell, new String[] {
         "user", "info", "--json", "bob"});
-    checkOutput(out, "{\n" + "  \"user\": \"bob\",\n" + "  \"tenants\": [\n"
-        + "    {\n" + "      \"accessId\": \"research$bob\",\n"
-        + "      \"tenantId\": \"research\",\n" + "      \"isAdmin\": false,\n"
-        + "      \"isDelegatedAdmin\": false\n" + "    },\n" + "    {\n"
-        + "      \"accessId\": \"finance$bob\",\n"
-        + "      \"tenantId\": \"finance\",\n" + "      \"isAdmin\": false,\n"
-        + "      \"isDelegatedAdmin\": false\n" + "    },\n" + "    {\n"
-        + "      \"accessId\": \"dev$bob\",\n"
-        + "      \"tenantId\": \"dev\",\n" + "      \"isAdmin\": true,\n"
-        + "      \"isDelegatedAdmin\": true\n" + "    }\n" + "  ]\n" + "}\n",
+    checkOutput(out,
+        "{\n" +
+            "  \"user\" : \"bob\",\n" +
+            "  \"tenants\" : [ {\n" +
+            "    \"accessId\" : \"research$bob\",\n" +
+            "    \"tenantId\" : \"research\",\n" +
+            "    \"isAdmin\" : false,\n" +
+            "    \"isDelegatedAdmin\" : false\n" +
+            "  }, {\n" +
+            "    \"accessId\" : \"finance$bob\",\n" +
+            "    \"tenantId\" : \"finance\",\n" +
+            "    \"isAdmin\" : false,\n" +
+            "    \"isDelegatedAdmin\" : false\n" +
+            "  }, {\n" +
+            "    \"accessId\" : \"dev$bob\",\n" +
+            "    \"tenantId\" : \"dev\",\n" +
+            "    \"isAdmin\" : true,\n" +
+            "    \"isDelegatedAdmin\" : true\n" +
+            "  } ]\n" +
+            "}\n",
         true, true);
     checkOutput(err, "", true);
 
@@ -662,8 +672,8 @@ public class TestOzoneTenantShell {
 
     // Then delete tenant, should succeed
     executeHA(tenantShell, new String[] {"--verbose", "delete", "dev"});
-    checkOutput(out, "{\n" + "  \"tenantId\": \"dev\",\n"
-        + "  \"volumeName\": \"dev\",\n" + "  \"volumeRefCount\": 0\n" + "}\n",
+    checkOutput(out, "{\n" + "  \"tenantId\" : \"dev\",\n"
+            + "  \"volumeName\" : \"dev\",\n" + "  \"volumeRefCount\" : 0\n" + 
"}\n",
         true, true);
     checkOutput(err, "Deleted tenant 'dev'.\n", false);
     deleteVolume("dev");
@@ -678,7 +688,7 @@ public class TestOzoneTenantShell {
   public void testListTenantUsers() throws IOException {
     executeHA(tenantShell, new String[] {"--verbose", "create", "tenant1"});
     checkOutput(out, "{\n" +
-        "  \"tenantId\": \"tenant1\"\n" + "}\n", true, true);
+        "  \"tenantId\" : \"tenant1\"\n" + "}\n", true, true);
     checkOutput(err, "", true);
 
     executeHA(tenantShell, new String[] {
@@ -702,10 +712,14 @@ public class TestOzoneTenantShell {
 
     executeHA(tenantShell, new String[] {
         "user", "list", "tenant1", "--json"});
-    checkOutput(out, "[\n" + "  {\n" + "    \"user\": \"bob\",\n"
-        + "    \"accessId\": \"tenant1$bob\"\n" + "  },\n" + "  {\n"
-        + "    \"user\": \"alice\",\n" + "    \"accessId\": 
\"tenant1$alice\"\n"
-        + "  }\n" + "]\n", true);
+    checkOutput(out,
+        "[ {\n" +
+            "  \"user\" : \"bob\",\n" +
+            "  \"accessId\" : \"tenant1$bob\"\n" +
+            "}, {\n" +
+            "  \"user\" : \"alice\",\n" +
+            "  \"accessId\" : \"tenant1$alice\"\n" +
+            "} ]\n", true);
     checkOutput(err, "", true);
 
     executeHA(tenantShell, new String[] {
@@ -716,8 +730,10 @@ public class TestOzoneTenantShell {
 
     executeHA(tenantShell, new String[] {
         "user", "list", "tenant1", "--prefix=b", "--json"});
-    checkOutput(out, "[\n" + "  {\n" + "    \"user\": \"bob\",\n"
-        + "    \"accessId\": \"tenant1$bob\"\n" + "  }\n" + "]\n", true);
+    checkOutput(out, "[ {\n" +
+        "  \"user\" : \"bob\",\n" +
+        "  \"accessId\" : \"tenant1$bob\"\n" +
+        "} ]\n", true);
     checkOutput(err, "", true);
 
     int exitCode = executeHA(tenantShell, new String[] {
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/GetUserInfoHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/GetUserInfoHandler.java
index c9b58064fb..be8b4ceed1 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/GetUserInfoHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/GetUserInfoHandler.java
@@ -17,11 +17,10 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.hadoop.hdds.cli.GenericCli;
+import org.apache.hadoop.hdds.server.JsonUtils;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.om.helpers.TenantUserInfoValue;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ExtendedUserAccessIdInfo;
@@ -71,39 +70,32 @@ public class GetUserInfoHandler extends TenantHandler {
     if (!printJson) {
       out().println("User '" + userPrincipal + "' is assigned to:");
       accessIdInfoList.forEach(accessIdInfo -> {
-        // Get admin info
-        final String adminInfoString;
-        if (accessIdInfo.getIsAdmin()) {
-          adminInfoString = accessIdInfo.getIsDelegatedAdmin() ?
-              " delegated admin" : " admin";
-        } else {
-          adminInfoString = "";
-        }
+        final String adminInfoString = accessIdInfo.getIsAdmin() ?
+            (accessIdInfo.getIsDelegatedAdmin() ? " delegated admin" :
+                " admin") : "";
         out().format("- Tenant '%s'%s with accessId '%s'%n",
             accessIdInfo.getTenantId(),
             adminInfoString,
             accessIdInfo.getAccessId());
       });
     } else {
+      ObjectNode resObj = JsonUtils.createObjectNode(null);
+      resObj.put("user", userPrincipal);
 
-      final JsonObject resObj = new JsonObject();
-      resObj.addProperty("user", userPrincipal);
-
-      final JsonArray arr = new JsonArray();
+      ArrayNode arr = JsonUtils.createArrayNode();
       accessIdInfoList.forEach(accessIdInfo -> {
-        final JsonObject tenantObj = new JsonObject();
-        tenantObj.addProperty("accessId", accessIdInfo.getAccessId());
-        tenantObj.addProperty("tenantId", accessIdInfo.getTenantId());
-        tenantObj.addProperty("isAdmin", accessIdInfo.getIsAdmin());
-        tenantObj.addProperty("isDelegatedAdmin",
-            accessIdInfo.getIsDelegatedAdmin());
+        ObjectNode tenantObj = JsonUtils.createObjectNode(null);
+        tenantObj.put("accessId", accessIdInfo.getAccessId());
+        tenantObj.put("tenantId", accessIdInfo.getTenantId());
+        tenantObj.put("isAdmin", accessIdInfo.getIsAdmin());
+        tenantObj.put("isDelegatedAdmin", accessIdInfo.getIsDelegatedAdmin());
         arr.add(tenantObj);
       });
 
-      resObj.add("tenants", arr);
-
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(resObj));
+      resObj.set("tenants", arr);
+      String prettyJson =
+          JsonUtils.toJsonStringWithDefaultPrettyPrinter(resObj);
+      out().println(prettyJson);
     }
 
   }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantAssignAdminHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantAssignAdminHandler.java
index 364fd21233..041b559608 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantAssignAdminHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantAssignAdminHandler.java
@@ -17,9 +17,8 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.hadoop.hdds.server.JsonUtils;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
 import picocli.CommandLine;
@@ -55,14 +54,14 @@ public class TenantAssignAdminHandler extends TenantHandler 
{
     client.getObjectStore().tenantAssignAdmin(accessId, tenantId, delegated);
 
     if (isVerbose()) {
-      final JsonObject obj = new JsonObject();
-      obj.addProperty("accessId", accessId);
-      obj.addProperty("tenantId", tenantId);
-      obj.addProperty("isAdmin", true);
-      obj.addProperty("isDelegatedAdmin", delegated);
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(obj));
-    }
+      ObjectNode obj = JsonUtils.createObjectNode(null);
+      obj.put("accessId", accessId);
+      obj.put("tenantId", tenantId);
+      obj.put("isAdmin", true);
+      obj.put("isDelegatedAdmin", delegated);
 
+      String jsonString = JsonUtils.toJsonStringWithDefaultPrettyPrinter(obj);
+      out().println(jsonString);
+    }
   }
 }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantCreateHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantCreateHandler.java
index fd6c410960..1eac7685be 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantCreateHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantCreateHandler.java
@@ -17,9 +17,8 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.hadoop.hdds.server.JsonUtils;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.client.TenantArgs;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
@@ -58,11 +57,11 @@ public class TenantCreateHandler extends TenantHandler {
     // RpcClient#createTenant prints INFO level log of tenant and volume name
 
     if (isVerbose()) {
-      final JsonObject obj = new JsonObject();
-      obj.addProperty("tenantId", tenantId);
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(obj));
-    }
+      ObjectNode obj = JsonUtils.createObjectNode(null);
+      obj.put("tenantId", tenantId);
 
+      String jsonString = JsonUtils.toJsonStringWithDefaultPrettyPrinter(obj);
+      out().println(jsonString);
+    }
   }
 }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantDeleteHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantDeleteHandler.java
index 9924ac827a..c5e43e27a4 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantDeleteHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantDeleteHandler.java
@@ -17,9 +17,8 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
+import org.apache.hadoop.hdds.server.JsonUtils;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.om.helpers.DeleteTenantState;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
@@ -60,13 +59,13 @@ public class TenantDeleteHandler extends TenantHandler {
     }
 
     if (isVerbose()) {
-      final JsonObject obj = new JsonObject();
-      obj.addProperty("tenantId", tenantId);
-      obj.addProperty("volumeName", resp.getVolumeName());
-      obj.addProperty("volumeRefCount", resp.getVolRefCount());
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
+      ObjectNode obj = JsonUtils.createObjectNode(null);
+      obj.put("tenantId", tenantId);
+      obj.put("volumeName", resp.getVolumeName());
+      obj.put("volumeRefCount", resp.getVolRefCount());
       // Print raw response to stderr if verbose
-      out().println(gson.toJson(obj));
+      String jsonString = JsonUtils.toJsonStringWithDefaultPrettyPrinter(obj);
+      out().println(jsonString);
     }
 
   }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListHandler.java
index 6f0428bd7b..3201eb4563 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListHandler.java
@@ -17,10 +17,9 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
+import org.apache.hadoop.hdds.server.JsonUtils;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.om.helpers.TenantStateList;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
@@ -50,23 +49,21 @@ public class TenantListHandler extends TenantHandler {
       tenantStateList.getTenantStateList().forEach(tenantState ->
           out().println(tenantState.getTenantId()));
     } else {
-      final JsonArray resArray = new JsonArray();
+      ArrayNode resArray = JsonUtils.createArrayNode();
       tenantStateList.getTenantStateList().forEach(tenantState -> {
-        final JsonObject obj = new JsonObject();
-        obj.addProperty("tenantId", tenantState.getTenantId());
-        obj.addProperty("bucketNamespaceName",
-            tenantState.getBucketNamespaceName());
-        obj.addProperty("userRoleName", tenantState.getUserRoleName());
-        obj.addProperty("adminRoleName", tenantState.getAdminRoleName());
-        obj.addProperty("bucketNamespacePolicyName",
+        ObjectNode obj = JsonUtils.createObjectNode(null);
+        obj.put("tenantId", tenantState.getTenantId());
+        obj.put("bucketNamespaceName", tenantState.getBucketNamespaceName());
+        obj.put("userRoleName", tenantState.getUserRoleName());
+        obj.put("adminRoleName", tenantState.getAdminRoleName());
+        obj.put("bucketNamespacePolicyName",
             tenantState.getBucketNamespacePolicyName());
-        obj.addProperty("bucketPolicyName",
-            tenantState.getBucketPolicyName());
+        obj.put("bucketPolicyName", tenantState.getBucketPolicyName());
         resArray.add(obj);
       });
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(resArray));
+      // Serialize and print the JSON string with pretty printing
+      String jsonString = 
JsonUtils.toJsonStringWithDefaultPrettyPrinter(resArray);
+      out().println(jsonString);
     }
-
   }
 }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListUsersHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListUsersHandler.java
index e27a8cecd8..ae56f0ba16 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListUsersHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantListUsersHandler.java
@@ -20,10 +20,9 @@ package org.apache.hadoop.ozone.shell.tenant;
 
 import java.io.IOException;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
+import org.apache.hadoop.hdds.server.JsonUtils;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.om.helpers.TenantUserList;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
@@ -66,15 +65,15 @@ public class TenantListUsersHandler extends S3Handler {
             "' with accessId '" + accessIdInfo.getAccessId() + "'");
       });
     } else {
-      final JsonArray resArray = new JsonArray();
+      ArrayNode resArray = JsonUtils.createArrayNode();
       usersInTenant.getUserAccessIds().forEach(accessIdInfo -> {
-        final JsonObject obj = new JsonObject();
-        obj.addProperty("user", accessIdInfo.getUserPrincipal());
-        obj.addProperty("accessId", accessIdInfo.getAccessId());
+        ObjectNode obj = JsonUtils.createObjectNode(null);
+        obj.put("user", accessIdInfo.getUserPrincipal());
+        obj.put("accessId", accessIdInfo.getAccessId());
         resArray.add(obj);
       });
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(resArray));
+      String prettyJsonString = 
JsonUtils.toJsonStringWithDefaultPrettyPrinter(resArray);
+      out().println(prettyJsonString);
     }
 
   }
diff --git 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantRevokeAdminHandler.java
 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantRevokeAdminHandler.java
index 419628246f..671864931a 100644
--- 
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantRevokeAdminHandler.java
+++ 
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/tenant/TenantRevokeAdminHandler.java
@@ -17,9 +17,8 @@
  */
 package org.apache.hadoop.ozone.shell.tenant;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.hadoop.hdds.server.JsonUtils;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.shell.OzoneAddress;
 import picocli.CommandLine;
@@ -48,14 +47,14 @@ public class TenantRevokeAdminHandler extends TenantHandler 
{
     client.getObjectStore().tenantRevokeAdmin(accessId, tenantId);
 
     if (isVerbose()) {
-      final JsonObject obj = new JsonObject();
-      obj.addProperty("accessId", accessId);
-      obj.addProperty("tenantId", tenantId);
-      obj.addProperty("isAdmin", false);
-      obj.addProperty("isDelegatedAdmin", false);
-      final Gson gson = new GsonBuilder().setPrettyPrinting().create();
-      out().println(gson.toJson(obj));
+      ObjectNode obj = JsonUtils.createObjectNode(null);
+      obj.put("accessId", accessId);
+      obj.put("tenantId", tenantId);
+      obj.put("isAdmin", false);
+      obj.put("isDelegatedAdmin", false);
+
+      String jsonString = JsonUtils.toJsonStringWithDefaultPrettyPrinter(obj);
+      out().println(jsonString);
     }
-
   }
 }


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

Reply via email to