From 01877a9f272390a3fd5bd8991fab22b308449c68 Mon Sep 17 00:00:00 2001 From: Yongjun Hong Date: Sun, 9 Mar 2025 10:56:30 +0900 Subject: [PATCH] refactor: refactor the `Result` Class (#7176) --- changes/en-us/2.x.md | 2 +- changes/zh-cn/2.x.md | 2 +- .../org/apache/seata/common/result/Code.java | 26 ++------- .../seata/common/result/PageResult.java | 32 +++++----- .../apache/seata/common/result/Result.java | 25 +++----- .../seata/common/result/SingleResult.java | 30 +++++----- .../apache/seata/common/code/CodeTest.java | 17 ++---- .../seata/common/result/PageResultTest.java | 21 +++---- .../seata/common/result/ResultTest.java | 50 ++++++++++++++++ .../seata/common/result/SingleResultTest.java | 58 +++++++++++++++---- .../console/controller/AuthController.java | 4 +- .../controller/OverviewController.java | 4 +- .../controller/HealthController.java | 6 +- .../controller/NamingController.java | 47 ++++++--------- .../namingserver/manager/NamingManager.java | 40 +++++++------ .../console/impl/AbstractLockService.java | 4 +- .../server/controller/ClusterController.java | 9 ++- .../controller/VGroupMappingController.java | 25 ++++---- 18 files changed, 221 insertions(+), 181 deletions(-) create mode 100644 common/src/test/java/org/apache/seata/common/result/ResultTest.java diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md index e2dfb146c1f..5d5da916400 100644 --- a/changes/en-us/2.x.md +++ b/changes/en-us/2.x.md @@ -71,7 +71,7 @@ Add changes here for all PR submitted to the 2.x branch. ### refactor: -- [[#PR_NO](https://github.com/apache/incubator-seata/pull/PR_NO)] refactor XXX +- [[#7176](https://github.com/apache/incubator-seata/pull/7176)] refactor the Result class Thanks to these contributors for their code commits. Please report an unintended omission. diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md index d735368a814..bd0c00be4ee 100644 --- a/changes/zh-cn/2.x.md +++ b/changes/zh-cn/2.x.md @@ -71,7 +71,7 @@ ### refactor: -- [[#PR_NO](https://github.com/apache/incubator-seata/pull/PR_NO)] 重构XXX +- [[#7176](https://github.com/apache/incubator-seata/pull/7176)] 重构 Result 类 非常感谢以下 contributors 的代码贡献。若有无意遗漏,请报告。 diff --git a/common/src/main/java/org/apache/seata/common/result/Code.java b/common/src/main/java/org/apache/seata/common/result/Code.java index 18756e3f0b0..4c80730bf0b 100644 --- a/common/src/main/java/org/apache/seata/common/result/Code.java +++ b/common/src/main/java/org/apache/seata/common/result/Code.java @@ -25,21 +25,21 @@ public enum Code { /** * server error */ - ERROR("500", "Server error"), + INTERNAL_SERVER_ERROR("500", "Server error"), /** * the custom error */ - LOGIN_FAILED("401", "Login failed"); + UNAUTHORIZED("401", "Login failed"); /** * The Code. */ - public String code; + public final String code; /** * The Msg. */ - public String msg; + public final String msg; private Code(String code, String msg) { this.code = code; @@ -55,15 +55,6 @@ public String getCode() { return this.code; } - /** - * Sets code. - * - * @param code the code - */ - public void setCode(String code) { - this.code = code; - } - /** * Gets msg. * @@ -73,15 +64,6 @@ public String getMsg() { return msg; } - /** - * Sets msg. - * - * @param msg the msg - */ - public void setMsg(String msg) { - this.msg = msg; - } - /** * Gets error msg. * diff --git a/common/src/main/java/org/apache/seata/common/result/PageResult.java b/common/src/main/java/org/apache/seata/common/result/PageResult.java index cb3f4564df6..16bd533b881 100644 --- a/common/src/main/java/org/apache/seata/common/result/PageResult.java +++ b/common/src/main/java/org/apache/seata/common/result/PageResult.java @@ -16,14 +16,14 @@ */ package org.apache.seata.common.result; -import java.io.Serializable; +import static org.apache.seata.common.result.Code.SUCCESS; + import java.util.List; /** * The page result - * */ -public class PageResult extends Result implements Serializable { +public class PageResult extends Result { private static final long serialVersionUID = 7761262662429121287L; /** @@ -55,7 +55,7 @@ public PageResult(String code, String message) { } public PageResult(List data, Integer total, Integer pages, Integer pageNum, Integer pageSize) { - super(SUCCESS_CODE, SUCCESS_MSG); + super(SUCCESS.code, SUCCESS.msg); this.total = total; this.pages = pages; this.pageNum = pageNum; @@ -71,19 +71,19 @@ public static PageResult build(List list, Integer pageNum, Integer pag } final int offset = pageSize * (pageNum - 1); return PageResult.success( - list.subList( - Math.min(offset, list.size()), - Math.min(offset + pageSize, list.size()) - ), - list.size(), - pages, - pageNum, - pageSize + list.subList( + Math.min(offset, list.size()), + Math.min(offset + pageSize, list.size()) + ), + list.size(), + pages, + pageNum, + pageSize ); } public PageResult(List data, Integer total, Integer pageNum, Integer pageSize) { - super(SUCCESS_CODE, SUCCESS_MSG); + super(SUCCESS.code, SUCCESS.msg); this.total = total; this.pageNum = pageNum; this.pageSize = pageSize; @@ -101,12 +101,14 @@ public static PageResult failure(String code, String msg) { } public static PageResult success() { - return new PageResult<>(SUCCESS_CODE, SUCCESS_MSG); + return new PageResult<>(SUCCESS.code, SUCCESS.msg); } - public static PageResult success(List data, Integer total, Integer pages, Integer pageNum, Integer pageSize) { + public static PageResult success(List data, Integer total, Integer pages, Integer pageNum, + Integer pageSize) { return new PageResult<>(data, total, pages, pageNum, pageSize); } + public static PageResult success(List data, Integer total, Integer pageNum, Integer pageSize) { return new PageResult<>(data, total, pageNum, pageSize); } diff --git a/common/src/main/java/org/apache/seata/common/result/Result.java b/common/src/main/java/org/apache/seata/common/result/Result.java index 615b94ea099..c1dbbd069a4 100644 --- a/common/src/main/java/org/apache/seata/common/result/Result.java +++ b/common/src/main/java/org/apache/seata/common/result/Result.java @@ -16,23 +16,21 @@ */ package org.apache.seata.common.result; +import static org.apache.seata.common.result.Code.SUCCESS; + import java.io.Serializable; /** * The basic result */ -public class Result implements Serializable { +public class Result implements Serializable { private static final long serialVersionUID = 7761261124298767L; - public static final String SUCCESS_CODE = "200"; - public static final String SUCCESS_MSG = "success"; - public static final String FAIL_CODE = "500"; - - - private String code = SUCCESS_CODE; - private String message = SUCCESS_MSG; + private final String code; + private final String message; public Result() { + this(null, null); } public Result(String code, String message) { @@ -41,23 +39,14 @@ public Result(String code, String message) { } public boolean isSuccess() { - return SUCCESS_CODE.equals(this.code); + return this.code.equals(SUCCESS.code); } public String getCode() { return code; } - public void setCode(String code) { - this.code = code; - } - public String getMessage() { return message; } - - public void setMessage(String message) { - this.message = message; - } - } diff --git a/common/src/main/java/org/apache/seata/common/result/SingleResult.java b/common/src/main/java/org/apache/seata/common/result/SingleResult.java index a9f1b8b1bb0..dc5f1e71609 100644 --- a/common/src/main/java/org/apache/seata/common/result/SingleResult.java +++ b/common/src/main/java/org/apache/seata/common/result/SingleResult.java @@ -16,18 +16,15 @@ */ package org.apache.seata.common.result; -import java.io.Serializable; - +import static org.apache.seata.common.result.Code.SUCCESS; +import static org.apache.seata.common.result.Code.INTERNAL_SERVER_ERROR; /** * The single result */ -public class SingleResult extends Result implements Serializable { +public class SingleResult extends Result { private static final long serialVersionUID = 77612626624298767L; - /** - * the data - */ private T data; public SingleResult(String code, String message) { @@ -44,27 +41,34 @@ public static SingleResult failure(String code, String msg) { } public static SingleResult failure(Code errorCode) { - return new SingleResult(errorCode.getCode(), errorCode.getMsg()); + return failure(errorCode.code, errorCode.msg); } public static SingleResult failure(String msg) { - return new SingleResult<>(FAIL_CODE, msg); + return failure(INTERNAL_SERVER_ERROR.code, msg); + } + + public static SingleResult success(String msg, T data) { + return new SingleResult<>(SUCCESS.code, msg, data); } - public static SingleResult success(T data) { - return new SingleResult<>(SUCCESS_CODE, SUCCESS_MSG,data); + public static SingleResult success(String msg) { + return success(msg, null); } public static SingleResult success() { - return new SingleResult<>(SUCCESS_CODE, SUCCESS_MSG, null); + return success(SUCCESS.msg, null); + } + + public static SingleResult successWithData(T data) { + return success(SUCCESS.msg, data); } public T getData() { return data; } - public void setData(T data) { + public void setData(final T data) { this.data = data; } - } diff --git a/common/src/test/java/org/apache/seata/common/code/CodeTest.java b/common/src/test/java/org/apache/seata/common/code/CodeTest.java index 66eeffcd87a..202257a893d 100644 --- a/common/src/test/java/org/apache/seata/common/code/CodeTest.java +++ b/common/src/test/java/org/apache/seata/common/code/CodeTest.java @@ -28,10 +28,10 @@ public class CodeTest { public void testGetErrorMsgWithValidCodeReturnsExpectedMsg() { // Test case for SUCCESS assertEquals("ok", Code.SUCCESS.getMsg()); - // Test case for ERROR - assertEquals("Server error", Code.ERROR.getMsg()); - // Test case for LOGIN_FAILED - assertEquals("Login failed", Code.LOGIN_FAILED.getMsg()); + // Test case for INTERNAL_SERVER_ERROR + assertEquals("Server error", Code.INTERNAL_SERVER_ERROR.getMsg()); + // Test case for UNAUTHORIZED + assertEquals("Login failed", Code.UNAUTHORIZED.getMsg()); } @Test @@ -39,13 +39,4 @@ public void testGetErrorMsgWithInvalidCodeReturnsNull() { // Test case for non-existing code assertNull(Code.getErrorMsg("404")); } - - @Test - public void testSetCodeAndMsgUpdatesValuesCorrectly() { - // Test case to check if setCode and setMsg are working as expected - Code.SUCCESS.setCode("201"); - Code.SUCCESS.setMsg("Created"); - assertEquals("201", Code.SUCCESS.getCode()); - assertEquals("Created", Code.SUCCESS.getMsg()); - } } diff --git a/common/src/test/java/org/apache/seata/common/result/PageResultTest.java b/common/src/test/java/org/apache/seata/common/result/PageResultTest.java index 4ee65f108a2..f45d1d59850 100644 --- a/common/src/test/java/org/apache/seata/common/result/PageResultTest.java +++ b/common/src/test/java/org/apache/seata/common/result/PageResultTest.java @@ -23,6 +23,7 @@ import org.mockito.InjectMocks; import org.mockito.MockitoAnnotations; +import static org.apache.seata.common.result.Code.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -41,7 +42,7 @@ void buildPageSizeDivisibleByListSize() { for (long i = 0; i < 100; i++) { list.add(i); } - PageResult pageResult = PageResult.build(list, 1, 10); + PageResult pageResult = PageResult.build(list, 1, 10); assertEquals(10, pageResult.getPages()); assertEquals(10, pageResult.getData().size()); } @@ -52,7 +53,7 @@ void buildPageSizeNotDivisibleByListSize() { for (long i = 0; i < 9; i++) { list.add(i); } - PageResult pageResult = PageResult.build(list, 1, 10); + PageResult pageResult = PageResult.build(list, 1, 10); assertEquals(1, pageResult.getPages()); assertEquals(9, pageResult.getData().size()); } @@ -63,7 +64,7 @@ void buildPageNumGreaterThanTotalPages() { for (long i = 0; i < 5; i++) { list.add(i); } - PageResult pageResult = PageResult.build(list, 10, 2); + PageResult pageResult = PageResult.build(list, 10, 2); assertEquals(10, pageResult.getPageNum().intValue()); assertEquals(3, pageResult.getPages().intValue()); assertEquals(0, pageResult.getData().size()); @@ -71,16 +72,16 @@ void buildPageNumGreaterThanTotalPages() { @Test void failureInvalidParams() { - PageResult pageResult = PageResult.failure("400", "error"); + PageResult pageResult = PageResult.failure("400", "error"); assertEquals("400", pageResult.getCode()); assertEquals("error", pageResult.getMessage()); } @Test void successNoData() { - PageResult pageResult = PageResult.success(); - assertEquals(PageResult.SUCCESS_CODE, pageResult.getCode()); - assertEquals(PageResult.SUCCESS_MSG, pageResult.getMessage()); + PageResult pageResult = PageResult.success(); + assertEquals(SUCCESS.code, pageResult.getCode()); + assertEquals(SUCCESS.msg, pageResult.getMessage()); assertNull(pageResult.getData()); } @@ -90,9 +91,9 @@ void successWithData() { for (long i = 0; i < 5; i++) { list.add(i); } - PageResult pageResult = PageResult.success(list, 5, 1, 5); - assertEquals(PageResult.SUCCESS_CODE, pageResult.getCode()); - assertEquals(PageResult.SUCCESS_MSG, pageResult.getMessage()); + PageResult pageResult = PageResult.success(list, 5, 1, 5); + assertEquals(SUCCESS.code, pageResult.getCode()); + assertEquals(SUCCESS.msg, pageResult.getMessage()); assertEquals(5, pageResult.getTotal().intValue()); assertEquals(1, pageResult.getPageNum().intValue()); assertEquals(5, pageResult.getPageSize().intValue()); diff --git a/common/src/test/java/org/apache/seata/common/result/ResultTest.java b/common/src/test/java/org/apache/seata/common/result/ResultTest.java new file mode 100644 index 00000000000..5659f88d3a3 --- /dev/null +++ b/common/src/test/java/org/apache/seata/common/result/ResultTest.java @@ -0,0 +1,50 @@ +/* + * 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 org.apache.seata.common.result; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.apache.seata.common.result.Code.SUCCESS; + +class ResultTest { + + @Test + void testConstructor() { + Result result = new Result("200", "ok"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals(SUCCESS.msg, result.getMessage()); + } + + @Test + void testIsSuccess() { + Result result = new Result("200", "ok"); + Assertions.assertTrue(result.isSuccess()); + } + + @Test + void testGetCode() { + Result result = new Result("200", "ok"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + } + + @Test + void testGetMessage() { + Result result = new Result("200", "ok"); + Assertions.assertEquals(SUCCESS.msg, result.getMessage()); + } +} diff --git a/common/src/test/java/org/apache/seata/common/result/SingleResultTest.java b/common/src/test/java/org/apache/seata/common/result/SingleResultTest.java index db690aa4e93..a38eaded3bf 100644 --- a/common/src/test/java/org/apache/seata/common/result/SingleResultTest.java +++ b/common/src/test/java/org/apache/seata/common/result/SingleResultTest.java @@ -16,6 +16,10 @@ */ package org.apache.seata.common.result; +import static org.apache.seata.common.result.Code.SUCCESS; +import static org.apache.seata.common.result.Code.INTERNAL_SERVER_ERROR; +import static org.apache.seata.common.result.Code.UNAUTHORIZED; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -23,23 +27,31 @@ class SingleResultTest { @Test void testConstructor() { - SingleResult result = new SingleResult<>("200", "OK", "Data"); - Assertions.assertEquals("200", result.getCode()); - Assertions.assertEquals("OK", result.getMessage()); + SingleResult result = new SingleResult<>("200", "ok", "Data"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals(SUCCESS.msg, result.getMessage()); Assertions.assertEquals("Data", result.getData()); } @Test void testFailureWithCodeAndMessage() { - SingleResult result = SingleResult.failure("500", "Error"); - Assertions.assertEquals("500", result.getCode()); - Assertions.assertEquals("Error", result.getMessage()); + SingleResult result = SingleResult.failure("500", "Server error"); + Assertions.assertEquals(INTERNAL_SERVER_ERROR.code, result.getCode()); + Assertions.assertEquals(INTERNAL_SERVER_ERROR.msg, result.getMessage()); + Assertions.assertNull(result.getData()); + } + + @Test + void testFailureWithMessage() { + SingleResult result = SingleResult.failure("Server error"); + Assertions.assertEquals(INTERNAL_SERVER_ERROR.code, result.getCode()); + Assertions.assertEquals("Server error", result.getMessage()); Assertions.assertNull(result.getData()); } @Test void testFailureWithErrorCode() { - SingleResult result = SingleResult.failure(Code.LOGIN_FAILED); + SingleResult result = SingleResult.failure(UNAUTHORIZED); Assertions.assertEquals("401", result.getCode()); Assertions.assertEquals("Login failed", result.getMessage()); Assertions.assertNull(result.getData()); @@ -47,10 +59,34 @@ void testFailureWithErrorCode() { @Test void testSuccess() { - SingleResult result = SingleResult.success("SuccessData"); - Assertions.assertEquals(SingleResult.SUCCESS_CODE, result.getCode()); - Assertions.assertEquals(SingleResult.SUCCESS_MSG, result.getMessage()); - Assertions.assertEquals("SuccessData", result.getData()); + SingleResult result = SingleResult.successWithData("ok"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals(SUCCESS.msg, result.getMessage()); + Assertions.assertEquals("ok", result.getData()); + } + + @Test + void testSuccessWithoutData() { + SingleResult result = SingleResult.success(); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals(SUCCESS.msg, result.getMessage()); + Assertions.assertNull(result.getData()); + } + + @Test + void testSuccessWithMessage() { + SingleResult result = SingleResult.success("ok"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals("ok", result.getMessage()); + Assertions.assertNull(result.getData()); + } + + @Test + void testSuccessWithMessageAndData() { + SingleResult result = SingleResult.success("ok", "Data"); + Assertions.assertEquals(SUCCESS.code, result.getCode()); + Assertions.assertEquals("ok", result.getMessage()); + Assertions.assertEquals("Data", result.getData()); } @Test diff --git a/console/src/main/java/org/apache/seata/console/controller/AuthController.java b/console/src/main/java/org/apache/seata/console/controller/AuthController.java index 7f43218c4c8..091fe718e0a 100644 --- a/console/src/main/java/org/apache/seata/console/controller/AuthController.java +++ b/console/src/main/java/org/apache/seata/console/controller/AuthController.java @@ -55,7 +55,7 @@ public class AuthController { * Seata is in broken states. */ @PostMapping("/login") - public SingleResult login(HttpServletResponse response, @RequestBody User user) { + public SingleResult login(HttpServletResponse response, @RequestBody User user) { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( user.getUsername(), user.getPassword()); @@ -73,7 +73,7 @@ public SingleResult login(HttpServletResponse response, @RequestBody Use return SingleResult.success(authHeader); } catch (BadCredentialsException authentication) { - return SingleResult.failure(Code.LOGIN_FAILED); + return SingleResult.failure(Code.UNAUTHORIZED); } } } diff --git a/console/src/main/java/org/apache/seata/console/controller/OverviewController.java b/console/src/main/java/org/apache/seata/console/controller/OverviewController.java index 6bbfc31239a..8da7e164dfc 100644 --- a/console/src/main/java/org/apache/seata/console/controller/OverviewController.java +++ b/console/src/main/java/org/apache/seata/console/controller/OverviewController.java @@ -41,7 +41,7 @@ public class OverviewController { * @return the data */ @GetMapping(value = "/getData") - public SingleResult getData() { + public SingleResult>> getData() { List> result = new ArrayList<>(); int count = 10; while (count-- > 0) { @@ -51,6 +51,6 @@ public SingleResult getData() { result.add(hashMap); } - return SingleResult.success(result); + return SingleResult.successWithData(result); } } diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/controller/HealthController.java b/namingserver/src/main/java/org/apache/seata/namingserver/controller/HealthController.java index 7fd77f8e631..5900014f48a 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/controller/HealthController.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/controller/HealthController.java @@ -16,7 +16,7 @@ */ package org.apache.seata.namingserver.controller; -import org.apache.seata.common.result.Result; +import org.apache.seata.common.result.SingleResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -26,8 +26,8 @@ public class HealthController { @GetMapping("/health") - public Result healthCheck() { - return new Result<>(); + public SingleResult healthCheck() { + return SingleResult.success(); } } diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/controller/NamingController.java b/namingserver/src/main/java/org/apache/seata/namingserver/controller/NamingController.java index e194dbe73f6..be9da59a925 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/controller/NamingController.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/controller/NamingController.java @@ -19,7 +19,6 @@ import org.apache.seata.common.metadata.namingserver.MetaResponse; import org.apache.seata.common.metadata.namingserver.NamingServerNode; -import org.apache.seata.common.result.Result; import org.apache.seata.common.result.SingleResult; import org.apache.seata.namingserver.entity.vo.NamespaceVO; import org.apache.seata.namingserver.listener.Watcher; @@ -58,48 +57,39 @@ public class NamingController { private ClusterWatcherManager clusterWatcherManager; @PostMapping("/register") - public Result registerInstance(@RequestParam String namespace, + public SingleResult registerInstance(@RequestParam String namespace, @RequestParam String clusterName, @RequestParam String unit, @RequestBody NamingServerNode registerBody) { - Result result = new Result<>(); boolean isSuccess = namingManager.registerInstance(registerBody, namespace, clusterName, unit); if (isSuccess) { - result.setMessage("node has registered successfully!"); + return SingleResult.success("node has registered successfully!"); } else { - result.setCode("500"); - result.setMessage("node registered unsuccessfully!"); + return SingleResult.failure("node registered unsuccessfully!"); } - return result; } @PostMapping("/batchRegister") - public Result batchRegisterInstance(@RequestParam String namespace, + public SingleResult batchRegisterInstance(@RequestParam String namespace, @RequestParam String clusterName, @RequestBody List nodes) { - Result result = new Result<>(); boolean isSuccess = namingManager.registerInstances(nodes, namespace, clusterName); if (isSuccess) { - result.setMessage("node has registered successfully!"); + return SingleResult.success("nodes have registered successfully!"); } else { - result.setCode("500"); - result.setMessage("node registered unsuccessfully!"); + return SingleResult.failure("nodes registered unsuccessfully!"); } - return result; } @PostMapping("/unregister") - public Result unregisterInstance(@RequestParam String namespace, @RequestParam String clusterName, + public SingleResult unregisterInstance(@RequestParam String namespace, @RequestParam String clusterName, @RequestParam String unit, @RequestBody NamingServerNode registerBody) { - Result result = new Result<>(); boolean isSuccess = namingManager.unregisterInstance(namespace, clusterName, unit, registerBody); if (isSuccess) { - result.setMessage("node has unregistered successfully!"); + return SingleResult.success("node has unregistered successfully!"); } else { - result.setCode("500"); - result.setMessage("node unregistered unsuccessfully!"); + return SingleResult.failure("node unregistered unsuccessfully!"); } - return result; } @GetMapping("/clusters") @@ -114,26 +104,27 @@ public MetaResponse discovery(@RequestParam String vGroup, @RequestParam String } @PostMapping("/addGroup") - public Result addGroup(@RequestParam String namespace, @RequestParam String clusterName, String unitName, - @RequestParam String vGroup) { - - Result addGroupResult = namingManager.createGroup(namespace, vGroup, clusterName, unitName); + public SingleResult addGroup(@RequestParam String namespace, + @RequestParam String clusterName, + @RequestParam String unitName, + @RequestParam String vGroup) { + SingleResult addGroupResult = namingManager.createGroup(namespace, vGroup, clusterName, unitName); if (!addGroupResult.isSuccess()) { return addGroupResult; } - return new Result<>("200", "change vGroup " + vGroup + "to cluster " + clusterName + " successfully!"); + return SingleResult.success("change vGroup " + vGroup + "to cluster " + clusterName + " successfully!"); } @PostMapping("/changeGroup") - public Result changeGroup(@RequestParam String namespace, + public SingleResult changeGroup(@RequestParam String namespace, @RequestParam String clusterName, @RequestParam String unitName, @RequestParam String vGroup) { - Result addGroupResult = namingManager.changeGroup(namespace, vGroup, clusterName, unitName); + SingleResult addGroupResult = namingManager.changeGroup(namespace, vGroup, clusterName, unitName); if (!addGroupResult.isSuccess()) { return addGroupResult; } - return new Result<>("200", "change vGroup " + vGroup + "to cluster " + clusterName + " successfully!"); + return SingleResult.success("change vGroup " + vGroup + "to cluster " + clusterName + " successfully!"); } @GetMapping("/namespace") @@ -166,6 +157,4 @@ public List getWatchList() { .map(vgroup -> new WatcherVO(vgroup, clusterWatcherManager.getWatcherIpList(vgroup))) .collect(Collectors.toList()); } - - } diff --git a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java index 3656710b37f..d09a3fc45c4 100644 --- a/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java +++ b/namingserver/src/main/java/org/apache/seata/namingserver/manager/NamingManager.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.ArrayList; import java.util.Collections; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -47,7 +48,6 @@ import org.apache.seata.common.metadata.Node; import org.apache.seata.common.metadata.namingserver.NamingServerNode; import org.apache.seata.common.metadata.namingserver.Unit; -import org.apache.seata.common.result.Result; import org.apache.seata.common.result.SingleResult; import org.apache.seata.common.util.HttpClientUtil; import org.apache.seata.common.NamingServerConstants; @@ -149,12 +149,12 @@ public List monitorCluster(String namespace) { return new ArrayList<>(clusterVOHashMap.values()); } - public Result createGroup(String namespace, String vGroup, String clusterName, String unitName) { + public SingleResult createGroup(String namespace, String vGroup, String clusterName, String unitName) { // add vGroup in new cluster List nodeList = getInstances(namespace, clusterName); if (nodeList == null || nodeList.size() == 0) { LOGGER.error("no instance in cluster {}", clusterName); - return new Result<>("301", "no instance in cluster" + clusterName); + return new SingleResult<>("301", "no instance in cluster" + clusterName); } else { Node node = nodeList.stream().filter(n -> n.getRole() == ClusterRole.LEADER || n.getRole() == ClusterRole.MEMBER) @@ -171,19 +171,19 @@ public Result createGroup(String namespace, String vGroup, String cluste try (CloseableHttpResponse closeableHttpResponse = HttpClientUtil.doGet(httpUrl, params, header, 3000)) { if (closeableHttpResponse == null || closeableHttpResponse.getStatusLine().getStatusCode() != 200) { - return new Result<>(String.valueOf(closeableHttpResponse.getStatusLine().getStatusCode()), - "add vGroup in new cluster failed"); + int statusCode = Objects.requireNonNull(closeableHttpResponse).getStatusLine().getStatusCode(); + return SingleResult.failure(String.valueOf(statusCode), "add vGroup in new cluster failed"); } LOGGER.info("namespace: {} add vGroup: {} in new cluster: {} successfully!", namespace, vGroup, clusterName); } catch (IOException e) { LOGGER.warn("add vGroup in new cluster failed"); - return new Result<>("500", "add vGroup in new cluster failed"); + return SingleResult.failure("500", "add vGroup in new cluster failed"); } } - return new Result<>("200", "add vGroup successfully!"); + return SingleResult.success("add vGroup in new cluster successfully!"); } - public Result removeGroup(Unit unit, String vGroup, String clusterName, String namespace, String unitName) { + public SingleResult removeGroup(Unit unit, String vGroup, String clusterName, String namespace, String unitName) { if (unit != null && !CollectionUtils.isEmpty(unit.getNamingInstanceList())) { Node node = unit.getNamingInstanceList().get(0); String httpUrl = NamingServerConstants.HTTP_PREFIX + node.getControl().getHost() @@ -197,18 +197,17 @@ public Result removeGroup(Unit unit, String vGroup, String clusterName, try (CloseableHttpResponse closeableHttpResponse = HttpClientUtil.doGet(httpUrl, params, header, 3000)) { if (closeableHttpResponse == null || closeableHttpResponse.getStatusLine().getStatusCode() != 200) { LOGGER.warn("remove vGroup in old cluster failed"); - return new Result<>(String.valueOf(closeableHttpResponse.getStatusLine().getStatusCode()), - "removing vGroup " + vGroup + " in old cluster " + clusterName + " failed"); + int statusCode = Objects.requireNonNull(closeableHttpResponse).getStatusLine().getStatusCode(); + return SingleResult.failure(String.valueOf(statusCode), "removing vGroup " + vGroup + " in old cluster " + clusterName + " failed"); } LOGGER.info("namespace: {} remove vGroup: {} in new cluster: {} successfully!", namespace, vGroup, clusterName); } catch (IOException e) { LOGGER.warn("handle removing vGroup in old cluster failed"); - return new Result<>("500", - "handle removing vGroup " + vGroup + " in old cluster " + clusterName + " failed"); + return SingleResult.failure("500", "handle removing vGroup " + vGroup + " in old cluster " + clusterName + " failed"); } } - return new Result<>("200", "remove group in old cluster successfully!"); + return SingleResult.success("remove group in old cluster successfully!"); } public boolean addGroup(String namespace, String clusterName, String unitName, String vGroup) { @@ -388,7 +387,7 @@ public void instanceHeartBeatCheck() { } } - public Result changeGroup(String namespace, String vGroup, String clusterName, String unitName) { + public SingleResult changeGroup(String namespace, String vGroup, String clusterName, String unitName) { long changeTime = System.currentTimeMillis(); ConcurrentMap namespaceMap = new ConcurrentHashMap<>(vGroupMap.get(vGroup)); Set currentNamespaces = namespaceMap.keySet(); @@ -397,12 +396,12 @@ public Result changeGroup(String namespace, String vGroup, String cluste namespaceClusters.put(currentNamespace, new HashSet<>(namespaceMap.get(currentNamespace).getClusterMap().keySet())); } - Result res = createGroup(namespace, vGroup, clusterName, unitName); + SingleResult res = createGroup(namespace, vGroup, clusterName, unitName); if (!res.isSuccess()) { LOGGER.error("add vgroup failed!" + res.getMessage()); return res; } - AtomicReference> result = new AtomicReference<>(); + AtomicReference> result = new AtomicReference<>(); namespaceClusters.forEach((oldNamespace, clusters) -> { for (String cluster : clusters) { Optional.ofNullable(namespaceClusterDataMap.get(oldNamespace)) @@ -420,7 +419,10 @@ public Result changeGroup(String namespace, String vGroup, String cluste }); } }); - return Optional.ofNullable(result.get()).orElseGet(() -> new Result<>("200", "change vGroup successfully!")); + if (result.get() == null) { + throw new NullPointerException("change vGroup failed!"); + } + return SingleResult.success("change vGroup successfully!"); } public SingleResult> namespace() { @@ -434,7 +436,7 @@ public SingleResult> namespace() { namespaceVO.setClusters(new ArrayList<>(clusterDataMap.keySet())); namespaceVOs.put(namespace, namespaceVO); }); - return SingleResult.success(namespaceVOs); + return SingleResult.successWithData(namespaceVOs); } currentVGourpMap.forEach((vGroup, namespaceMap) -> namespaceMap .forEach((namespace, namespaceBO) -> namespaceBO.getClusterMap().forEach((clusterName, clusterBO) -> { @@ -442,7 +444,7 @@ public SingleResult> namespace() { namespaceVO.getClusters().add(clusterName); namespaceVO.getVgroups().add(vGroup); }))); - return SingleResult.success(namespaceVOs); + return SingleResult.successWithData(namespaceVOs); } } diff --git a/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java b/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java index 3b3f7634ae4..e61cc1a9bb7 100644 --- a/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java +++ b/server/src/main/java/org/apache/seata/server/console/impl/AbstractLockService.java @@ -28,9 +28,9 @@ public SingleResult check(String xid, String branchId) { try { commonCheckAndGetGlobalStatus(xid, branchId); } catch (IllegalArgumentException e) { - return SingleResult.success(Boolean.FALSE); + return SingleResult.successWithData(Boolean.FALSE); } - return SingleResult.success(Boolean.TRUE); + return SingleResult.successWithData(Boolean.TRUE); } protected void checkDeleteLock(GlobalLockParam param) { diff --git a/server/src/main/java/org/apache/seata/server/controller/ClusterController.java b/server/src/main/java/org/apache/seata/server/controller/ClusterController.java index 816f6e3e250..29beb097cf3 100644 --- a/server/src/main/java/org/apache/seata/server/controller/ClusterController.java +++ b/server/src/main/java/org/apache/seata/server/controller/ClusterController.java @@ -31,7 +31,7 @@ import org.apache.seata.common.ConfigurationKeys; import org.apache.seata.common.metadata.MetadataResponse; import org.apache.seata.common.metadata.Node; -import org.apache.seata.common.result.Result; +import org.apache.seata.common.result.SingleResult; import org.apache.seata.common.util.StringUtils; import org.apache.seata.config.ConfigurationFactory; import org.apache.seata.server.cluster.manager.ClusterWatcherManager; @@ -74,11 +74,10 @@ private void init() { } @PostMapping("/changeCluster") - public Result changeCluster(@RequestParam String raftClusterStr) { - Result result = new Result<>(); + public SingleResult changeCluster(@RequestParam String raftClusterStr) { final Configuration newConf = new Configuration(); if (!newConf.parse(raftClusterStr)) { - result.setMessage("fail to parse initConf:" + raftClusterStr); + return SingleResult.failure("fail to parse initConf:" + raftClusterStr); } else { RaftServerManager.groups().forEach(group -> { RaftServerManager.getCliServiceInstance().changePeers(group, @@ -86,7 +85,7 @@ public Result changeCluster(@RequestParam String raftClusterStr) { RouteTable.getInstance().updateConfiguration(group, newConf); }); } - return result; + return SingleResult.success("success"); } @GetMapping("/cluster") diff --git a/server/src/main/java/org/apache/seata/server/controller/VGroupMappingController.java b/server/src/main/java/org/apache/seata/server/controller/VGroupMappingController.java index bf9edf97876..fff5c929fa8 100644 --- a/server/src/main/java/org/apache/seata/server/controller/VGroupMappingController.java +++ b/server/src/main/java/org/apache/seata/server/controller/VGroupMappingController.java @@ -17,7 +17,7 @@ package org.apache.seata.server.controller; import org.apache.seata.common.metadata.Instance; -import org.apache.seata.common.result.Result; +import org.apache.seata.common.result.SingleResult; import org.apache.seata.config.Configuration; import org.apache.seata.config.ConfigurationFactory; import org.apache.seata.core.store.MappingDO; @@ -40,11 +40,11 @@ public class VGroupMappingController { * add vGroup in cluster * * @param vGroup - * @return + * @param unit + * @return SingleResult */ @GetMapping("/addVGroup") - public Result addVGroup(@RequestParam String vGroup, @RequestParam String unit) { - Result result = new Result<>(); + public SingleResult addVGroup(@RequestParam String vGroup, @RequestParam String unit) { MappingDO mappingDO = new MappingDO(); mappingDO.setNamespace(Instance.getInstance().getNamespace()); mappingDO.setCluster(Instance.getInstance().getClusterName()); @@ -53,29 +53,24 @@ public Result addVGroup(@RequestParam String vGroup, @RequestParam String uni boolean rst = SessionHolder.getRootVGroupMappingManager().addVGroup(mappingDO); Instance.getInstance().setTerm(System.currentTimeMillis()); if (!rst) { - result.setCode("500"); - result.setMessage("add vGroup failed!"); + return SingleResult.failure("add vGroup failed!"); } - return result; + return SingleResult.success(); } /** * remove vGroup in cluster * * @param vGroup - * @return + * @return SingleResult */ @GetMapping("/removeVGroup") - public Result removeVGroup(@RequestParam String vGroup) { - Result result = new Result<>(); + public SingleResult removeVGroup(@RequestParam String vGroup) { boolean rst = SessionHolder.getRootVGroupMappingManager().removeVGroup(vGroup); Instance.getInstance().setTerm(System.currentTimeMillis()); if (!rst) { - result.setCode("500"); - result.setMessage("remove vGroup failed!"); + return SingleResult.failure("remove vGroup failed!"); } - return result; + return SingleResult.success(); } - - }