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

xuba pushed a commit to branch v0.7.x-test-front
in repository https://gitbox.apache.org/repos/asf/amoro.git

commit 60beca66bf18d59e9d9a9151791af169eab13cd0
Author: tcodehuber <[email protected]>
AuthorDate: Fri Mar 22 12:04:06 2024 +0800

    [Hotfix] Cannot construct instance of Jsonnode when doing login (#2659)
    
    * [Hotfix] Cannot construct instance of Jsonnode when doing login
    
    * code refactor
    
    * code refactor
    
    ---------
    
    Co-authored-by: Xavier Bai <[email protected]>
    (cherry picked from commit 0867c7ce93007cddfc8158bfb2c4a0aaf56f0d16)
---
 .../dashboard/controller/LoginController.java      |   9 +-
 .../dashboard/controller/OptimizerController.java  |  41 ++--
 .../dashboard/model/OptimizerInstanceInfo.java     | 240 +++++++++++++++++++++
 3 files changed, 264 insertions(+), 26 deletions(-)

diff --git 
a/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/LoginController.java
 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/LoginController.java
index 32acf84e3..5257cf835 100644
--- 
a/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/LoginController.java
+++ 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/LoginController.java
@@ -21,11 +21,10 @@ package com.netease.arctic.server.dashboard.controller;
 import com.netease.arctic.server.ArcticManagementConf;
 import com.netease.arctic.server.dashboard.response.OkResponse;
 import com.netease.arctic.server.utils.Configurations;
-import com.netease.arctic.utils.JacksonUtil;
 import io.javalin.http.Context;
-import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.JsonNode;
 
 import java.io.Serializable;
+import java.util.Map;
 
 /** The controller that handles login requests. */
 public class LoginController {
@@ -47,9 +46,9 @@ public class LoginController {
   /** handle login post request. */
   public void login(Context ctx) {
     // ok
-    JsonNode postBody = ctx.bodyAsClass(JsonNode.class);
-    String user = JacksonUtil.getString(postBody, "user");
-    String pwd = JacksonUtil.getString(postBody, "password");
+    Map<String, String> bodyParams = ctx.bodyAsClass(Map.class);
+    String user = bodyParams.get("user");
+    String pwd = bodyParams.get("password");
     if (adminUser.equals(user) && (adminPassword.equals(pwd))) {
       ctx.sessionAttribute("user", new SessionInfo(adminUser, 
System.currentTimeMillis() + ""));
       ctx.json(OkResponse.of("success"));
diff --git 
a/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/OptimizerController.java
 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/OptimizerController.java
index 97ba2dd10..8c3706cba 100644
--- 
a/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/OptimizerController.java
+++ 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/controller/OptimizerController.java
@@ -23,6 +23,7 @@ import com.netease.arctic.api.resource.Resource;
 import com.netease.arctic.api.resource.ResourceGroup;
 import com.netease.arctic.api.resource.ResourceType;
 import com.netease.arctic.server.DefaultOptimizingService;
+import com.netease.arctic.server.dashboard.model.OptimizerInstanceInfo;
 import com.netease.arctic.server.dashboard.model.OptimizerResourceInfo;
 import com.netease.arctic.server.dashboard.model.TableOptimizingInfo;
 import com.netease.arctic.server.dashboard.response.OkResponse;
@@ -34,15 +35,13 @@ import 
com.netease.arctic.server.resource.ResourceContainers;
 import com.netease.arctic.server.table.ServerTableIdentifier;
 import com.netease.arctic.server.table.TableRuntime;
 import com.netease.arctic.server.table.TableService;
-import com.netease.arctic.utils.JacksonUtil;
 import io.javalin.http.Context;
-import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.JsonNode;
-import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.node.ObjectNode;
 
 import javax.ws.rs.BadRequestException;
 
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -101,7 +100,6 @@ public class OptimizerController {
     Integer pageSize = ctx.queryParamAsClass("pageSize", 
Integer.class).getOrDefault(20);
 
     int offset = (page - 1) * pageSize;
-
     List<OptimizerInstance> optimizers;
     if (optimizerGroup.equals("all")) {
       optimizers = optimizerManager.listOptimizers();
@@ -110,28 +108,30 @@ public class OptimizerController {
     }
     List<OptimizerInstance> optimizerList = new ArrayList<>(optimizers);
     
optimizerList.sort(Comparator.comparingLong(OptimizerInstance::getStartTime).reversed());
-    List<JsonNode> result =
+    List<OptimizerInstanceInfo> result =
         optimizerList.stream()
             .map(
-                e -> {
-                  ObjectNode jsonObject = (ObjectNode) 
JacksonUtil.fromObjects(e);
-                  jsonObject.put("jobId", e.getResourceId());
-                  jsonObject.put("optimizerGroup", e.getGroupName());
-                  jsonObject.put("coreNumber", e.getThreadCount());
-                  jsonObject.put("memory", e.getMemoryMb());
-                  jsonObject.put("jobStatus", "RUNNING");
-                  jsonObject.put("container", e.getContainerName());
-                  return jsonObject;
-                })
+                e ->
+                    OptimizerInstanceInfo.builder()
+                        .token(e.getToken())
+                        .startTime(e.getStartTime())
+                        .touchTime(e.getTouchTime())
+                        .jobId(e.getResourceId())
+                        .groupName(e.getGroupName())
+                        .coreNumber(e.getThreadCount())
+                        .memory(e.getMemoryMb())
+                        .jobStatus("RUNNING")
+                        .container(e.getContainerName())
+                        .build())
             .collect(Collectors.toList());
 
-    PageResult<JsonNode> amsPageResult = PageResult.of(result, offset, 
pageSize);
+    PageResult<OptimizerInstanceInfo> amsPageResult = PageResult.of(result, 
offset, pageSize);
     ctx.json(OkResponse.of(amsPageResult));
   }
 
   /** get optimizerGroup: optimizerGroupId, optimizerGroupName url = 
/optimizerGroups. */
   public void getOptimizerGroups(Context ctx) {
-    List<JsonNode> result =
+    List<Map<String, String>> result =
         optimizerManager.listResourceGroups().stream()
             .filter(
                 resourceGroup ->
@@ -139,10 +139,9 @@ public class OptimizerController {
                         resourceGroup.getContainer()))
             .map(
                 e -> {
-                  ObjectNode jsonObject = JacksonUtil.createEmptyObjectNode();
-
-                  jsonObject.put("optimizerGroupName", e.getName());
-                  return jsonObject;
+                  Map<String, String> mapObj = new HashMap<>();
+                  mapObj.put("optimizerGroupName", e.getName());
+                  return mapObj;
                 })
             .collect(Collectors.toList());
     ctx.json(OkResponse.of(result));
diff --git 
a/ams/server/src/main/java/com/netease/arctic/server/dashboard/model/OptimizerInstanceInfo.java
 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/model/OptimizerInstanceInfo.java
new file mode 100644
index 000000000..673a0c9d5
--- /dev/null
+++ 
b/ams/server/src/main/java/com/netease/arctic/server/dashboard/model/OptimizerInstanceInfo.java
@@ -0,0 +1,240 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.netease.arctic.server.dashboard.model;
+
+import org.apache.iceberg.relocated.com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+public class OptimizerInstanceInfo {
+
+  private String token;
+
+  private long startTime;
+
+  private long touchTime;
+
+  private String jobId;
+
+  private String groupName;
+
+  private int coreNumber;
+
+  private int memory;
+
+  private String jobStatus;
+
+  private String container;
+
+  public static OptimizerInstanceInfo.Builder builder() {
+    return new OptimizerInstanceInfo.Builder();
+  }
+
+  public String getToken() {
+    return token;
+  }
+
+  public void setToken(String token) {
+    this.token = token;
+  }
+
+  public long getStartTime() {
+    return startTime;
+  }
+
+  public void setStartTime(long startTime) {
+    this.startTime = startTime;
+  }
+
+  public long getTouchTime() {
+    return touchTime;
+  }
+
+  public void setTouchTime(long touchTime) {
+    this.touchTime = touchTime;
+  }
+
+  public String getJobId() {
+    return jobId;
+  }
+
+  public void setJobId(String jobId) {
+    this.jobId = jobId;
+  }
+
+  public String getGroupName() {
+    return groupName;
+  }
+
+  public void setGroupName(String groupName) {
+    this.groupName = groupName;
+  }
+
+  public int getCoreNumber() {
+    return coreNumber;
+  }
+
+  public void setCoreNumber(int coreNumber) {
+    this.coreNumber = coreNumber;
+  }
+
+  public int getMemory() {
+    return memory;
+  }
+
+  public void setMemory(int memory) {
+    this.memory = memory;
+  }
+
+  public String getJobStatus() {
+    return jobStatus;
+  }
+
+  public void setJobStatus(String jobStatus) {
+    this.jobStatus = jobStatus;
+  }
+
+  public String getContainer() {
+    return container;
+  }
+
+  public void setContainer(String container) {
+    this.container = container;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    OptimizerInstanceInfo that = (OptimizerInstanceInfo) o;
+    return Objects.equals(token, that.token)
+        && Objects.equals(startTime, that.startTime)
+        && Objects.equals(touchTime, that.touchTime)
+        && Objects.equals(jobId, that.jobId)
+        && Objects.equals(groupName, that.groupName)
+        && Objects.equals(coreNumber, that.coreNumber)
+        && Objects.equals(memory, that.memory)
+        && Objects.equals(jobStatus, that.jobStatus)
+        && Objects.equals(container, that.container);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        token, startTime, touchTime, jobId, groupName, coreNumber, memory, 
jobStatus, container);
+  }
+
+  @Override
+  public String toString() {
+    return MoreObjects.toStringHelper(this)
+        .add("token", token)
+        .add("startTime", startTime)
+        .add("touchTime", touchTime)
+        .add("jobId", jobId)
+        .add("groupName", groupName)
+        .add("coreNumber", coreNumber)
+        .add("memory", memory)
+        .add("jobStatus", jobStatus)
+        .add("container", container)
+        .toString();
+  }
+
+  public static class Builder {
+    private String token;
+
+    private long startTime;
+
+    private long touchTime;
+
+    private String jobId;
+
+    private String groupName;
+
+    private int coreNumber;
+
+    private int memory;
+
+    private String jobStatus;
+
+    private String container;
+
+    public Builder token(String token) {
+      this.token = token;
+      return this;
+    }
+
+    public Builder startTime(long startTime) {
+      this.startTime = startTime;
+      return this;
+    }
+
+    public Builder touchTime(long touchTime) {
+      this.touchTime = touchTime;
+      return this;
+    }
+
+    public Builder jobId(String jobId) {
+      this.jobId = jobId;
+      return this;
+    }
+
+    public Builder groupName(String groupName) {
+      this.groupName = groupName;
+      return this;
+    }
+
+    public Builder coreNumber(int coreNumber) {
+      this.coreNumber = coreNumber;
+      return this;
+    }
+
+    public Builder memory(int memory) {
+      this.memory = memory;
+      return this;
+    }
+
+    public Builder jobStatus(String jobStatus) {
+      this.jobStatus = jobStatus;
+      return this;
+    }
+
+    public Builder container(String container) {
+      this.container = container;
+      return this;
+    }
+
+    public OptimizerInstanceInfo build() {
+      OptimizerInstanceInfo instanceInfo = new OptimizerInstanceInfo();
+      instanceInfo.setToken(token);
+      instanceInfo.setStartTime(startTime);
+      instanceInfo.setTouchTime(touchTime);
+      instanceInfo.setJobId(jobId);
+      instanceInfo.setGroupName(groupName);
+      instanceInfo.setCoreNumber(coreNumber);
+      instanceInfo.setMemory(memory);
+      instanceInfo.setJobStatus(jobStatus);
+      instanceInfo.setContainer(container);
+      return instanceInfo;
+    }
+  }
+}

Reply via email to