You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by do...@apache.org on 2023/01/09 11:55:54 UTC

[inlong] 01/07: [INLONG-7178][Manager] Optimize parameter checks for InlongGroup, and simplify the exception and log info (#7180)

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

dockerzhang pushed a commit to branch branch-1.5
in repository https://gitbox.apache.org/repos/asf/inlong.git

commit d2ef5877872016e40da8b836451cc6134ce1029f
Author: Goson Zhang <46...@qq.com>
AuthorDate: Sat Jan 7 13:14:19 2023 +0800

    [INLONG-7178][Manager] Optimize parameter checks for InlongGroup, and simplify the exception and log info (#7180)
---
 .../inlong/manager/common/enums/ErrorCodeEnum.java |  1 +
 .../inlong/manager/common/enums/GroupStatus.java   |  5 +++-
 .../manager/pojo/group/InlongGroupRequest.java     | 16 ++++++++-----
 .../manager/pojo/group/kafka/InlongKafkaDTO.java   |  3 ++-
 .../manager/pojo/group/pulsar/InlongPulsarDTO.java |  3 ++-
 .../manager/pojo/group/tubemq/InlongTubeMQDTO.java |  3 ++-
 .../pojo/source/autopush/AutoPushSourceDTO.java    |  3 ++-
 .../manager/pojo/source/file/FileSourceDTO.java    |  3 ++-
 .../manager/pojo/source/hudi/HudiSourceDTO.java    |  3 ++-
 .../manager/pojo/source/kafka/KafkaSourceDTO.java  |  3 ++-
 .../pojo/source/mongodb/MongoDBSourceDTO.java      |  3 ++-
 .../manager/pojo/source/mqtt/MqttSourceDTO.java    |  3 ++-
 .../pojo/source/mysql/MySQLBinlogSourceDTO.java    |  3 ++-
 .../pojo/source/oracle/OracleSourceDTO.java        |  3 ++-
 .../source/postgresql/PostgreSQLSourceDTO.java     |  3 ++-
 .../pojo/source/pulsar/PulsarSourceDTO.java        |  3 ++-
 .../manager/pojo/source/redis/RedisSourceDTO.java  |  3 ++-
 .../pojo/source/sqlserver/SQLServerSourceDTO.java  |  3 ++-
 .../pojo/source/tubemq/TubeMQSourceDTO.java        |  3 ++-
 .../service/group/AbstractGroupOperator.java       |  7 +++---
 .../service/group/InlongGroupOperator4Kafka.java   |  4 ++--
 .../service/group/InlongGroupOperator4NoneMQ.java  |  2 +-
 .../service/group/InlongGroupOperator4Pulsar.java  | 23 +++++++++++-------
 .../service/group/InlongGroupOperator4TubeMQ.java  |  3 ++-
 .../service/group/InlongGroupOperatorFactory.java  |  3 ++-
 .../service/group/InlongGroupServiceImpl.java      | 28 +++++++---------------
 .../web/controller/InlongGroupController.java      |  3 ++-
 .../openapi/OpenInLongGroupController.java         |  3 ++-
 28 files changed, 84 insertions(+), 62 deletions(-)

diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
index 18f1e014b..325b63632 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
@@ -27,6 +27,7 @@ public enum ErrorCodeEnum {
     PERMISSION_REQUIRED(2003, "The current user does not have operation authority"),
     AUTHENTICATION_REQUIRED(2004, "Authentication failed"),
     CONFIG_EXPIRED(2005, "The config has expired, please refresh the page or re-fetch the data and try again"),
+    ILLEGAL_RECORD_FIELD_VALUE(2006, "The field value of record is illegal"),
 
     ID_IS_EMPTY(101, "Primary key is empty"),
     GROUP_ID_IS_EMPTY(102, "Inlong group id is empty"),
diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/GroupStatus.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/GroupStatus.java
index 0f836d46c..ac31aed41 100644
--- a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/GroupStatus.java
+++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/GroupStatus.java
@@ -20,6 +20,8 @@ package org.apache.inlong.manager.common.enums;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
+import org.apache.inlong.manager.common.exceptions.BusinessException;
+
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
@@ -95,7 +97,8 @@ public enum GroupStatus {
                 return status;
             }
         }
-        throw new IllegalStateException(String.format("Illegal code=%s for GroupStatus", code));
+        throw new BusinessException(ErrorCodeEnum.ILLEGAL_RECORD_FIELD_VALUE,
+                String.format("Illegal code=%s for GroupStatus", code));
     }
 
     public static boolean notAllowedTransition(GroupStatus pre, GroupStatus now) {
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupRequest.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupRequest.java
index 9b68c572d..346d19d3c 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupRequest.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/InlongGroupRequest.java
@@ -24,6 +24,9 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+
+import org.apache.inlong.manager.common.validation.SaveValidation;
+import org.apache.inlong.manager.common.validation.UpdateValidation;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
 
@@ -43,8 +46,8 @@ import java.util.List;
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = "mqType")
 public abstract class InlongGroupRequest extends BaseInlongGroup {
 
-    @NotBlank(message = "cannot be blank")
     @ApiModelProperty(value = "Inlong group id", required = true)
+    @NotBlank(message = "inlongGroupId cannot be blank")
     @Length(min = 4, max = 100, message = "length must be between 4 and 100")
     @Pattern(regexp = "^[a-z0-9_-]{4,100}$", message = "only supports lowercase letters, numbers, '-', or '_'")
     private String inlongGroupId;
@@ -61,13 +64,14 @@ public abstract class InlongGroupRequest extends BaseInlongGroup {
     @ApiModelProperty(value = "MQ type, replaced by mqType")
     private String middlewareType;
 
-    @NotBlank(message = "cannot be blank")
     @ApiModelProperty(value = "MQ type, high throughput: TUBEMQ, high consistency: PULSAR")
+    @NotBlank(message = "mqType cannot be blank")
     @Length(min = 1, max = 20, message = "length must be between 1 and 20")
     private String mqType;
 
     @ApiModelProperty(value = "MQ resource", notes = "in inlong group, TubeMQ corresponds to Topic, Pulsar corresponds to Namespace")
-    @Length(max = 64, message = "length must be less than or equal to 64")
+    @Length(max = 128, message = "length must be less than or equal to 128")
+    @Pattern(regexp = "^[a-z0-9_-]{1,128}$", message = "only supports lowercase letters, numbers, '-', or '_'")
     private String mqResource;
 
     @ApiModelProperty(value = "TubeMQ master URL")
@@ -85,12 +89,11 @@ public abstract class InlongGroupRequest extends BaseInlongGroup {
     @Range(min = 0, max = 1, message = "default is 0, only supports [0: no, 1: yes]")
     private Integer lightweight = 0;
 
-    @NotNull(message = "cannot be null")
-    @Range(min = 0, max = 2, message = "default is 0, only supports [0, 1, 2]")
     @ApiModelProperty(value = "Data report type, default is 0.\n"
             + " 0: report to DataProxy and respond when the DataProxy received data.\n"
             + " 1: report to DataProxy and respond after DataProxy sends data.\n"
             + " 2: report to MQ and respond when the MQ received data.", notes = "Current constraint is that all InLong Agents under one InlongGroup use the same type")
+    @Range(min = 0, max = 2, message = "default is 0, only supports [0, 1, 2]")
     private Integer dataReportType = 0;
 
     @ApiModelProperty(value = "Inlong cluster tag, which links to inlong_cluster table")
@@ -109,8 +112,8 @@ public abstract class InlongGroupRequest extends BaseInlongGroup {
     @ApiModelProperty(value = "The maximum length of a single piece of data, unit: Byte")
     private Integer maxLength;
 
-    @NotBlank(message = "cannot be blank")
     @ApiModelProperty(value = "Name of responsible person, separated by commas")
+    @NotBlank(groups = SaveValidation.class, message = "inCharges cannot be blank")
     @Length(max = 512, message = "length must be less than or equal to 512")
     private String inCharges;
 
@@ -122,6 +125,7 @@ public abstract class InlongGroupRequest extends BaseInlongGroup {
     private List<InlongGroupExtInfo> extList;
 
     @ApiModelProperty(value = "Version number")
+    @NotNull(groups = UpdateValidation.class, message = "version cannot be null")
     private Integer version;
 
 }
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/kafka/InlongKafkaDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/kafka/InlongKafkaDTO.java
index 0136a7d93..1d1d2def1 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/kafka/InlongKafkaDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/kafka/InlongKafkaDTO.java
@@ -59,7 +59,8 @@ public class InlongKafkaDTO extends BaseInlongGroup {
         try {
             return JsonUtils.parseObject(extParams, InlongKafkaDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT,
+                    String.format("parse extParams of Kafka failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/pulsar/InlongPulsarDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/pulsar/InlongPulsarDTO.java
index 3f0c61980..e42ae8837 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/pulsar/InlongPulsarDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/pulsar/InlongPulsarDTO.java
@@ -89,7 +89,8 @@ public class InlongPulsarDTO extends BaseInlongGroup {
         try {
             return JsonUtils.parseObject(extParams, InlongPulsarDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT,
+                    String.format("parse extParams of Pulsar failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/tubemq/InlongTubeMQDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/tubemq/InlongTubeMQDTO.java
index 573d17c81..ffe348a52 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/tubemq/InlongTubeMQDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/group/tubemq/InlongTubeMQDTO.java
@@ -51,7 +51,8 @@ public class InlongTubeMQDTO extends BaseInlongGroup {
         try {
             return JsonUtils.parseObject(extParams, InlongTubeMQDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.GROUP_INFO_INCORRECT,
+                    String.format("parse extParams of TubeMQ failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/autopush/AutoPushSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/autopush/AutoPushSourceDTO.java
index b34c563f3..72a149d01 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/autopush/AutoPushSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/autopush/AutoPushSourceDTO.java
@@ -59,7 +59,8 @@ public class AutoPushSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, AutoPushSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of AutoPushSource failure: %s", e.getMessage()));
         }
     }
 }
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/file/FileSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/file/FileSourceDTO.java
index af50d689c..7d4c60eb4 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/file/FileSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/file/FileSourceDTO.java
@@ -98,7 +98,8 @@ public class FileSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, FileSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of FileSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/hudi/HudiSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/hudi/HudiSourceDTO.java
index 2eff3d724..ffe323f81 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/hudi/HudiSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/hudi/HudiSourceDTO.java
@@ -80,7 +80,8 @@ public class HudiSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, HudiSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of HudiSource failure: %s", e.getMessage()));
         }
     }
 }
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/kafka/KafkaSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/kafka/KafkaSourceDTO.java
index fa4866b50..6eb983692 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/kafka/KafkaSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/kafka/KafkaSourceDTO.java
@@ -125,7 +125,8 @@ public class KafkaSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, KafkaSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of KafkaSource failure: %s", e.getMessage()));
         }
     }
 }
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mongodb/MongoDBSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mongodb/MongoDBSourceDTO.java
index 548bd5cdb..2c3583184 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mongodb/MongoDBSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mongodb/MongoDBSourceDTO.java
@@ -81,7 +81,8 @@ public class MongoDBSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, MongoDBSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of MongoDBSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mqtt/MqttSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mqtt/MqttSourceDTO.java
index 9079200e0..4b2f9b82b 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mqtt/MqttSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mqtt/MqttSourceDTO.java
@@ -70,7 +70,8 @@ public class MqttSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, MqttSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of MqttSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mysql/MySQLBinlogSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mysql/MySQLBinlogSourceDTO.java
index cf90e46a9..be9cab8c4 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mysql/MySQLBinlogSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/mysql/MySQLBinlogSourceDTO.java
@@ -148,7 +148,8 @@ public class MySQLBinlogSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, MySQLBinlogSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of MySQLBinlogSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/oracle/OracleSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/oracle/OracleSourceDTO.java
index 6f775a059..5c7ec9294 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/oracle/OracleSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/oracle/OracleSourceDTO.java
@@ -90,7 +90,8 @@ public class OracleSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, OracleSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of OracleSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/postgresql/PostgreSQLSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/postgresql/PostgreSQLSourceDTO.java
index 370eb38c1..40731588d 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/postgresql/PostgreSQLSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/postgresql/PostgreSQLSourceDTO.java
@@ -97,7 +97,8 @@ public class PostgreSQLSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, PostgreSQLSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of PostgreSQLSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/pulsar/PulsarSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/pulsar/PulsarSourceDTO.java
index 4ebb29b47..086a9e2c4 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/pulsar/PulsarSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/pulsar/PulsarSourceDTO.java
@@ -93,7 +93,8 @@ public class PulsarSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, PulsarSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of PulsarSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/redis/RedisSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/redis/RedisSourceDTO.java
index a41a587c7..89facbbd6 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/redis/RedisSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/redis/RedisSourceDTO.java
@@ -138,7 +138,8 @@ public class RedisSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, RedisSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of RedisSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/sqlserver/SQLServerSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/sqlserver/SQLServerSourceDTO.java
index 5b7dd4e50..3d4ec1fe6 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/sqlserver/SQLServerSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/sqlserver/SQLServerSourceDTO.java
@@ -97,7 +97,8 @@ public class SQLServerSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, SQLServerSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of SQLServerSource failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/tubemq/TubeMQSourceDTO.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/tubemq/TubeMQSourceDTO.java
index 3ae5393fc..35e46bc8e 100644
--- a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/tubemq/TubeMQSourceDTO.java
+++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/source/tubemq/TubeMQSourceDTO.java
@@ -85,7 +85,8 @@ public class TubeMQSourceDTO {
         try {
             return JsonUtils.parseObject(extParams, TubeMQSourceDTO.class);
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("parse extParams of TubeMQSource failure: %s", e.getMessage()));
         }
     }
 }
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/AbstractGroupOperator.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/AbstractGroupOperator.java
index 562bd34da..cd5b7466b 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/AbstractGroupOperator.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/AbstractGroupOperator.java
@@ -93,13 +93,12 @@ public abstract class AbstractGroupOperator implements InlongGroupOperator {
         InlongGroupEntity entity = CommonBeanUtils.copyProperties(request, InlongGroupEntity::new);
         // set the ext params
         setTargetEntity(request, entity);
-
         entity.setModifier(operator);
         int rowCount = groupMapper.updateByIdentifierSelective(entity);
         if (rowCount != InlongConstants.AFFECTED_ONE_ROW) {
-            LOGGER.error("inlong group has already updated with group id={}, curVersion={}",
-                    request.getInlongGroupId(), request.getVersion());
-            throw new BusinessException(ErrorCodeEnum.CONFIG_EXPIRED);
+            throw new BusinessException(ErrorCodeEnum.CONFIG_EXPIRED,
+                    String.format("record has already updated with group id=%s, curVersion=%d",
+                            request.getInlongGroupId(), request.getVersion()));
         }
     }
 
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Kafka.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Kafka.java
index 0fffa249a..b4b87b0ed 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Kafka.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Kafka.java
@@ -84,9 +84,9 @@ public class InlongGroupOperator4Kafka extends AbstractGroupOperator {
             InlongKafkaDTO dto = InlongKafkaDTO.getFromRequest(kafkaRequest);
             targetEntity.setExtParams(objectMapper.writeValueAsString(dto));
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("serialize extParams of Kafka failure: %s", e.getMessage()));
         }
-        LOGGER.info("success set entity for inlong group with Kafka");
     }
 
     @Override
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4NoneMQ.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4NoneMQ.java
index 9e03f48e4..c1d680bf8 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4NoneMQ.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4NoneMQ.java
@@ -50,7 +50,7 @@ public class InlongGroupOperator4NoneMQ extends AbstractGroupOperator {
 
     @Override
     protected void setTargetEntity(InlongGroupRequest request, InlongGroupEntity targetEntity) {
-        LOGGER.info("do nothing for inlong group without MQ");
+        // do nothing without mq
     }
 
     @Override
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Pulsar.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Pulsar.java
index 0688af522..810241f1a 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Pulsar.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4Pulsar.java
@@ -24,7 +24,6 @@ import org.apache.inlong.manager.common.enums.ClusterType;
 import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
 import org.apache.inlong.manager.common.exceptions.BusinessException;
 import org.apache.inlong.manager.common.util.CommonBeanUtils;
-import org.apache.inlong.manager.common.util.Preconditions;
 import org.apache.inlong.manager.dao.entity.InlongGroupEntity;
 import org.apache.inlong.manager.dao.entity.InlongGroupExtEntity;
 import org.apache.inlong.manager.dao.entity.InlongStreamExtEntity;
@@ -88,27 +87,35 @@ public class InlongGroupOperator4Pulsar extends AbstractGroupOperator {
     @Override
     protected void setTargetEntity(InlongGroupRequest request, InlongGroupEntity targetEntity) {
         InlongPulsarRequest pulsarRequest = (InlongPulsarRequest) request;
-
         // Pulsar params must meet: ackQuorum <= writeQuorum <= ensemble
         Integer ackQuorum = pulsarRequest.getAckQuorum();
         Integer writeQuorum = pulsarRequest.getWriteQuorum();
-        Preconditions.checkNotNull(ackQuorum, "Pulsar ackQuorum cannot be empty");
-        Preconditions.checkNotNull(writeQuorum, "Pulsar writeQuorum cannot be empty");
+        if (ackQuorum == null) {
+            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
+                    "Pulsar ackQuorum cannot be empty");
+        }
+        if (writeQuorum == null) {
+            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
+                    "Pulsar writeQuorum cannot be empty");
+        }
+        if (ackQuorum < 0 || writeQuorum < 0) {
+            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
+                    "Pulsar ackQuorum or writeQuorum must greater than or equal to 0");
+        }
         if (!(ackQuorum <= writeQuorum)) {
-            throw new BusinessException(ErrorCodeEnum.GROUP_SAVE_FAILED,
+            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
                     "Pulsar params must meet: ackQuorum <= writeQuorum");
         }
         // The default value of ensemble is writeQuorum
         pulsarRequest.setEnsemble(writeQuorum);
-
         CommonBeanUtils.copyProperties(pulsarRequest, targetEntity, true);
         try {
             InlongPulsarDTO dto = InlongPulsarDTO.getFromRequest(pulsarRequest);
             targetEntity.setExtParams(objectMapper.writeValueAsString(dto));
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("serialize extParams of Pulsar failure: %s", e.getMessage()));
         }
-        LOGGER.info("success set entity for inlong group with Pulsar");
     }
 
     @Override
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4TubeMQ.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4TubeMQ.java
index 670d7ce2a..39abab1d5 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4TubeMQ.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperator4TubeMQ.java
@@ -79,7 +79,8 @@ public class InlongGroupOperator4TubeMQ extends AbstractGroupOperator {
             InlongTubeMQDTO dto = InlongTubeMQDTO.getFromRequest(tubeMQRequest);
             targetEntity.setExtParams(objectMapper.writeValueAsString(dto));
         } catch (Exception e) {
-            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT.getMessage() + ": " + e.getMessage());
+            throw new BusinessException(ErrorCodeEnum.SOURCE_INFO_INCORRECT,
+                    String.format("serialize extParams of TubeMQ failure: %s", e.getMessage()));
         }
     }
 
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperatorFactory.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperatorFactory.java
index f4efca8c9..ec765866b 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperatorFactory.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupOperatorFactory.java
@@ -42,7 +42,8 @@ public class InlongGroupOperatorFactory {
                 .filter(inst -> inst.accept(mqType))
                 .findFirst();
         if (!instance.isPresent()) {
-            throw new BusinessException(String.format(ErrorCodeEnum.MQ_TYPE_NOT_SUPPORTED.getMessage(), mqType));
+            throw new BusinessException(ErrorCodeEnum.MQ_TYPE_NOT_SUPPORTED,
+                    String.format(ErrorCodeEnum.MQ_TYPE_NOT_SUPPORTED.getMessage(), mqType));
         }
         return instance.get();
     }
diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
index 5f36a8259..e3d768f1e 100644
--- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
+++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/group/InlongGroupServiceImpl.java
@@ -187,10 +187,6 @@ public class InlongGroupServiceImpl implements InlongGroupService {
             throw new BusinessException(ErrorCodeEnum.LOGIN_USER_EMPTY);
         }
         String groupId = request.getInlongGroupId();
-        if (StringUtils.isBlank(groupId)) {
-            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
-                    "inlong group id in request cannot be blank");
-        }
         InlongGroupEntity entity = groupMapper.selectByGroupId(groupId);
         if (entity != null) {
             throw new BusinessException(ErrorCodeEnum.GROUP_DUPLICATE);
@@ -459,10 +455,6 @@ public class InlongGroupServiceImpl implements InlongGroupService {
             throw new BusinessException(ErrorCodeEnum.LOGIN_USER_EMPTY);
         }
         String groupId = request.getInlongGroupId();
-        if (StringUtils.isBlank(groupId)) {
-            throw new BusinessException(ErrorCodeEnum.INVALID_PARAMETER,
-                    "inlong group id in request cannot be blank");
-        }
         InlongGroupEntity entity = groupMapper.selectByGroupId(groupId);
         if (entity == null) {
             throw new BusinessException(ErrorCodeEnum.GROUP_NOT_FOUND);
@@ -563,17 +555,15 @@ public class InlongGroupServiceImpl implements InlongGroupService {
     @Override
     @Transactional(rollbackFor = Throwable.class)
     public void saveOrUpdateExt(String groupId, List<InlongGroupExtInfo> exts) {
-        LOGGER.info("begin to save or update inlong group ext info, groupId={}, ext={}", groupId, exts);
         if (CollectionUtils.isEmpty(exts)) {
             return;
         }
-
-        List<InlongGroupExtEntity> entityList = CommonBeanUtils.copyListProperties(exts, InlongGroupExtEntity::new);
+        List<InlongGroupExtEntity> entityList =
+                CommonBeanUtils.copyListProperties(exts, InlongGroupExtEntity::new);
         for (InlongGroupExtEntity entity : entityList) {
             entity.setInlongGroupId(groupId);
         }
         groupExtMapper.insertOnDuplicateKeyUpdate(entityList);
-        LOGGER.info("success to save or update inlong group ext for groupId={}", groupId);
     }
 
     @Override
@@ -596,16 +586,14 @@ public class InlongGroupServiceImpl implements InlongGroupService {
         // only the person in charges can update
         List<String> inCharges = Arrays.asList(groupInfo.getInCharges().split(InlongConstants.COMMA));
         if (!inCharges.contains(operator)) {
-            LOGGER.error("user [{}] has no privilege for the inlong group", operator);
-            throw new BusinessException(ErrorCodeEnum.GROUP_PERMISSION_DENIED);
+            throw new BusinessException(ErrorCodeEnum.GROUP_PERMISSION_DENIED,
+                    String.format("user [%s] has no privilege for the inlong group", operator));
         }
-
         // determine whether the current status can be deleted
         GroupStatus curState = GroupStatus.forCode(groupInfo.getStatus());
         if (GroupStatus.notAllowedTransition(curState, GroupStatus.DELETING)) {
-            String errMsg = String.format("current group status=%s was not allowed to delete", curState);
-            LOGGER.error(errMsg);
-            throw new BusinessException(ErrorCodeEnum.GROUP_DELETE_NOT_ALLOWED, errMsg);
+            throw new BusinessException(ErrorCodeEnum.GROUP_DELETE_NOT_ALLOWED,
+                    String.format("current group status=%s was not allowed to delete", curState));
         }
 
         // If the status not allowed deleting directly, you need to delete the related "inlong_stream" first,
@@ -613,8 +601,8 @@ public class InlongGroupServiceImpl implements InlongGroupService {
         if (GroupStatus.deleteStreamFirst(curState)) {
             int count = streamService.selectCountByGroupId(groupId);
             if (count >= 1) {
-                LOGGER.error("groupId={} have [{}] inlong streams, deleted failed", groupId, count);
-                throw new BusinessException(ErrorCodeEnum.GROUP_DELETE_HAS_STREAM);
+                throw new BusinessException(ErrorCodeEnum.GROUP_DELETE_HAS_STREAM,
+                        String.format("groupId=%s have [%s] inlong streams, deleted failed", groupId, count));
             }
         }
 
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
index 7ba6619a9..798b759aa 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java
@@ -22,6 +22,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.apache.inlong.manager.common.enums.OperationType;
 import org.apache.inlong.manager.common.enums.UserTypeEnum;
+import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
 import org.apache.inlong.manager.pojo.common.PageResult;
 import org.apache.inlong.manager.pojo.common.Response;
@@ -66,7 +67,7 @@ public class InlongGroupController {
     @RequestMapping(value = "/group/save", method = RequestMethod.POST)
     @OperationLog(operation = OperationType.CREATE)
     @ApiOperation(value = "Save inlong group")
-    public Response<String> save(@Validated @RequestBody InlongGroupRequest groupRequest) {
+    public Response<String> save(@Validated(SaveValidation.class) @RequestBody InlongGroupRequest groupRequest) {
         String operator = LoginUserUtils.getLoginUser().getName();
         return Response.success(groupService.save(groupRequest, operator));
     }
diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
index 98a05b650..66e39f0e8 100644
--- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
+++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java
@@ -18,6 +18,7 @@
 package org.apache.inlong.manager.web.controller.openapi;
 
 import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.common.validation.SaveValidation;
 import org.apache.inlong.manager.common.validation.UpdateValidation;
 import org.apache.inlong.manager.pojo.common.Response;
 import org.apache.inlong.manager.pojo.group.InlongGroupBriefInfo;
@@ -74,7 +75,7 @@ public class OpenInLongGroupController {
     @RequestMapping(value = "/group/save", method = RequestMethod.POST)
     @OperationLog(operation = OperationType.CREATE)
     @ApiOperation(value = "Save inlong group")
-    public Response<String> save(@Validated @RequestBody InlongGroupRequest groupRequest) {
+    public Response<String> save(@Validated(SaveValidation.class) @RequestBody InlongGroupRequest groupRequest) {
         return Response.success(groupService.save(groupRequest, LoginUserUtils.getLoginUser()));
     }