This is an automated email from the ASF dual-hosted git repository.
wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git
The following commit(s) were added to refs/heads/main by this push:
new 4cce064 BIGTOP-4230: Add some methods for BaseDao (#74)
4cce064 is described below
commit 4cce0646a145f2a9e94e1a48b899d35d7a2b1119
Author: haopeng <[email protected]>
AuthorDate: Fri Sep 20 14:22:07 2024 +0800
BIGTOP-4230: Add some methods for BaseDao (#74)
---
.../dao/interceptor/AuditingInterceptor.java | 4 +-
.../bigtop/manager/dao/po/ChatMessagePO.java | 6 +-
.../apache/bigtop/manager/dao/po/ChatThreadPO.java | 6 +-
.../org/apache/bigtop/manager/dao/po/HostPO.java | 2 +-
.../org/apache/bigtop/manager/dao/po/JobPO.java | 4 +-
.../manager/dao/po/PlatformAuthorizedPO.java | 2 +-
.../org/apache/bigtop/manager/dao/po/RepoPO.java | 2 +-
.../org/apache/bigtop/manager/dao/po/StackPO.java | 4 +-
.../org/apache/bigtop/manager/dao/po/StagePO.java | 6 +-
.../org/apache/bigtop/manager/dao/po/TaskPO.java | 2 +-
.../bigtop/manager/dao/repository/BaseDao.java | 27 +-
.../bigtop/manager/dao/repository/HostDao.java | 2 -
.../bigtop/manager/dao/repository/RepoDao.java | 2 -
.../bigtop/manager/dao/sql/BaseSqlProvider.java | 53 +++-
.../apache/bigtop/manager/dao/sql/SQLBuilder.java | 322 ++++++++++++++++++++-
.../src/main/resources/mapper/mysql/HostMapper.xml | 8 -
.../src/main/resources/mapper/mysql/RepoMapper.xml | 8 -
.../resources/mapper/postgresql/HostMapper.xml | 8 -
.../resources/mapper/postgresql/RepoMapper.xml | 8 -
.../manager/server/command/job/AbstractJob.java | 6 +-
.../server/command/job/ClusterCreateJob.java | 8 +-
.../server/command/stage/AbstractStage.java | 6 +-
.../manager/server/command/task/AbstractTask.java | 6 +-
.../server/command/task/ComponentInstallTask.java | 2 +-
.../server/command/task/ComponentStartTask.java | 2 +-
.../server/command/task/ComponentStopTask.java | 2 +-
.../server/scheduler/ComponentStatusScheduler.java | 4 +-
.../server/scheduler/HostInfoScheduler.java | 2 +-
.../server/service/impl/ClusterServiceImpl.java | 4 +-
.../server/service/impl/ConfigServiceImpl.java | 2 +-
.../server/service/impl/HostServiceImpl.java | 2 +-
.../server/service/impl/JobServiceImpl.java | 6 +-
.../server/service/impl/UserServiceImpl.java | 2 +-
33 files changed, 442 insertions(+), 88 deletions(-)
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/interceptor/AuditingInterceptor.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/interceptor/AuditingInterceptor.java
index a178fe5..e552ef6 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/interceptor/AuditingInterceptor.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/interceptor/AuditingInterceptor.java
@@ -72,7 +72,9 @@ public class AuditingInterceptor implements Interceptor {
Collection<Object> objects;
if (parameter instanceof MapperMethod.ParamMap) {
MapperMethod.ParamMap<Object> paramMap =
((MapperMethod.ParamMap<Object>) parameter);
- if (paramMap.get("param1") instanceof Collection) {
+ if (!paramMap.containsKey("param1") &&
paramMap.containsKey("arg0")) {
+ objects = ((Collection<Object>) paramMap.get("arg0"));
+ } else if (paramMap.get("param1") instanceof Collection) {
objects = ((Collection<Object>) paramMap.get("param1"));
} else {
objects =
Collections.singletonList(paramMap.get("param1"));
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
index 4236810..75cf6f6 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
@@ -37,12 +37,12 @@ public class ChatMessagePO extends BasePO implements
Serializable {
@Column(name = "message", nullable = false, length = 255)
private String message;
- @Column(name = "sender")
+ @Column(name = "sender", nullable = false)
private String sender;
- @Column(name = "user_id")
+ @Column(name = "user_id", nullable = false)
private Long userId;
- @Column(name = "thread_id")
+ @Column(name = "thread_id", nullable = false)
private Long threadId;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
index f17cfb3..cddbb22 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
@@ -38,12 +38,12 @@ public class ChatThreadPO extends BasePO implements
Serializable {
@Column(name = "model", nullable = false, length = 255)
private String model;
- @Column(name = "thread_info", columnDefinition = "json", nullable = false)
+ @Column(name = "thread_info", columnDefinition = "json")
private Map<String, String> threadInfo;
- @Column(name = "user_id")
+ @Column(name = "user_id", nullable = false)
private Long userId;
- @Column(name = "platform_id")
+ @Column(name = "platform_id", nullable = false)
private Long platformId;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
index f0b3054..5b41317 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/HostPO.java
@@ -69,7 +69,7 @@ public class HostPO extends BasePO implements Serializable {
@Column(name = "state")
private String state;
- @Column(name = "cluster_id")
+ @Column(name = "cluster_id", nullable = false)
private Long clusterId;
@Transient
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/JobPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/JobPO.java
index 30adbb6..22938e2 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/JobPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/JobPO.java
@@ -39,14 +39,14 @@ public class JobPO extends BasePO implements Serializable {
@Column(name = "id")
private Long id;
- @Column(name = "state")
+ @Column(name = "state", nullable = false)
private String state;
@Column(name = "name")
private String name;
@Lob
- @Column(name = "context")
+ @Column(name = "context", nullable = false)
private String context;
@Column(name = "cluster_id")
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
index f27fcd4..214f3a9 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
@@ -39,6 +39,6 @@ public class PlatformAuthorizedPO extends BasePO implements
Serializable {
@Column(name = "credentials", columnDefinition = "json", nullable = false)
private Map<String, String> credentials;
- @Column(name = "platform_id")
+ @Column(name = "platform_id", nullable = false)
private Long platformId;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
index 00030d2..53e513c 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
@@ -53,6 +53,6 @@ public class RepoPO extends BasePO implements Serializable {
@Column(name = "repo_type")
private String repoType;
- @Column(name = "cluster_id")
+ @Column(name = "cluster_id", nullable = false)
private Long clusterId;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StackPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StackPO.java
index 76db3ea..5b7add2 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StackPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StackPO.java
@@ -35,9 +35,9 @@ public class StackPO extends BasePO implements Serializable {
@Column(name = "id")
private Long id;
- @Column(name = "stack_name")
+ @Column(name = "stack_name", nullable = false)
private String stackName;
- @Column(name = "stack_version")
+ @Column(name = "stack_version", nullable = false)
private String stackVersion;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StagePO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StagePO.java
index 22a2d94..dd17195 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StagePO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/StagePO.java
@@ -37,10 +37,10 @@ public class StagePO extends BasePO implements Serializable
{
@Column(name = "id")
private Long id;
- @Column(name = "name")
+ @Column(name = "name", nullable = false)
private String name;
- @Column(name = "state")
+ @Column(name = "state", nullable = false)
private String state;
@Column(name = "order")
@@ -55,7 +55,7 @@ public class StagePO extends BasePO implements Serializable {
@Column(name = "context")
private String context;
- @Column(name = "job_id")
+ @Column(name = "job_id", nullable = false)
private Long jobId;
@Column(name = "cluster_id")
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/TaskPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/TaskPO.java
index 54b5071..7fad463 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/TaskPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/TaskPO.java
@@ -38,7 +38,7 @@ public class TaskPO extends BasePO implements Serializable {
@Column(name = "name")
private String name;
- @Column(name = "context")
+ @Column(name = "context", nullable = false)
private String context;
@Column(name = "state")
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/BaseDao.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/BaseDao.java
index 2c85e6f..686ece1 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/BaseDao.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/BaseDao.java
@@ -42,11 +42,36 @@ public interface BaseDao<Entity> {
int save(Entity entity);
/**
- * Update the entity by primary key.
+ * Insert all entities.
+ */
+ @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+ @InsertProvider(type = BaseSqlProvider.class, method = "insertList")
+ int saveAll(List<Entity> entities);
+
+ /**
+ * Partially update the entity by primary key.
+ */
+ @UpdateProvider(type = BaseSqlProvider.class, method = "partialUpdateById")
+ int partialUpdateById(Entity entity);
+
+ /**
+ * Fully update the entity by primary key.
*/
@UpdateProvider(type = BaseSqlProvider.class, method = "updateById")
int updateById(Entity entity);
+ /**
+ * Partially update the entities by primary key.
+ */
+ @UpdateProvider(type = BaseSqlProvider.class, method =
"partialUpdateByIds")
+ int partialUpdateByIds(List<Entity> entities);
+
+ /**
+ * Fully update the entities by primary key.
+ */
+ @UpdateProvider(type = BaseSqlProvider.class, method = "updateByIds")
+ int updateByIds(List<Entity> entities);
+
/**
* Query the entity by primary key.
*/
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/HostDao.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/HostDao.java
index 335a5e5..be95624 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/HostDao.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/HostDao.java
@@ -28,8 +28,6 @@ import java.util.List;
public interface HostDao extends BaseDao<HostPO> {
- int saveAll(@Param("hosts") List<HostPO> hosts);
-
HostPO findByHostname(@Param("hostname") String hostname);
List<HostPO> findAllByHostnameIn(@Param("hostnames") Collection<String>
hostnames);
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/RepoDao.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/RepoDao.java
index c951dfb..3c8d302 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/RepoDao.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/RepoDao.java
@@ -30,7 +30,5 @@ public interface RepoDao extends BaseDao<RepoPO> {
Optional<RepoPO> findByRepoName(@Param("repoName") String clusterName);
- int saveAll(@Param("clusters") List<RepoPO> repos);
-
List<RepoPO> findAllByClusterId(@Param("clusterId") Long clusterId);
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/BaseSqlProvider.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/BaseSqlProvider.java
index 09eaf94..d2f9296 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/BaseSqlProvider.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/BaseSqlProvider.java
@@ -31,6 +31,7 @@ import lombok.extern.slf4j.Slf4j;
import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.Collection;
+import java.util.List;
@Slf4j
public class BaseSqlProvider {
@@ -46,6 +47,43 @@ public class BaseSqlProvider {
return SQLBuilder.insert(tableMetaData, entity, databaseId);
}
+ public <Entity> String insertList(List<Entity> entities, ProviderContext
context) {
+ Assert.notNull(entities, "entities must not be null");
+ Assert.notEmpty(entities, "entities list must not be empty");
+
+ String databaseId = context.getDatabaseId();
+
+ Class<?> entityClass = entities.get(0).getClass();
+
+ TableMetaData tableMetaData = TableMetaData.forClass(entityClass);
+
+ return SQLBuilder.insertList(tableMetaData, entities, databaseId);
+ }
+
+ public <Entity> String partialUpdateById(Entity entity, ProviderContext
context) {
+ Assert.notNull(entity, "entity must not null");
+
+ String databaseId = context.getDatabaseId();
+
+ Class<?> entityClass = entity.getClass();
+ TableMetaData tableMetaData = TableMetaData.forClass(entityClass);
+
+ return SQLBuilder.update(tableMetaData, entity, databaseId, true);
+ }
+
+ public <Entity> String partialUpdateByIds(List<Entity> entities,
ProviderContext context) {
+ Assert.notNull(entities, "entities must not be null");
+ Assert.notEmpty(entities, "entities list must not be empty");
+
+ String databaseId = context.getDatabaseId();
+
+ Class<?> entityClass = entities.get(0).getClass();
+
+ TableMetaData tableMetaData = TableMetaData.forClass(entityClass);
+
+ return SQLBuilder.updateList(tableMetaData, entities, databaseId,
true);
+ }
+
public <Entity> String updateById(Entity entity, ProviderContext context) {
Assert.notNull(entity, "entity must not null");
@@ -54,7 +92,20 @@ public class BaseSqlProvider {
Class<?> entityClass = entity.getClass();
TableMetaData tableMetaData = TableMetaData.forClass(entityClass);
- return SQLBuilder.update(tableMetaData, entity, databaseId);
+ return SQLBuilder.update(tableMetaData, entity, databaseId, false);
+ }
+
+ public <Entity> String updateByIds(List<Entity> entities, ProviderContext
context) {
+ Assert.notNull(entities, "entities must not be null");
+ Assert.notEmpty(entities, "entities list must not be empty");
+
+ String databaseId = context.getDatabaseId();
+
+ Class<?> entityClass = entities.get(0).getClass();
+
+ TableMetaData tableMetaData = TableMetaData.forClass(entityClass);
+
+ return SQLBuilder.updateList(tableMetaData, entities, databaseId,
false);
}
public String selectById(Serializable id, ProviderContext context) {
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java
index bf220d5..4321f22 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java
@@ -20,7 +20,11 @@
package org.apache.bigtop.manager.dao.sql;
import org.apache.bigtop.manager.common.utils.ClassUtils;
+import org.apache.bigtop.manager.dao.annotations.CreateBy;
+import org.apache.bigtop.manager.dao.annotations.CreateTime;
import org.apache.bigtop.manager.dao.annotations.QueryCondition;
+import org.apache.bigtop.manager.dao.annotations.UpdateBy;
+import org.apache.bigtop.manager.dao.annotations.UpdateTime;
import org.apache.bigtop.manager.dao.enums.DBType;
import org.apache.ibatis.jdbc.SQL;
@@ -31,10 +35,13 @@ import org.springframework.util.ReflectionUtils;
import lombok.extern.slf4j.Slf4j;
+import jakarta.persistence.Column;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -97,7 +104,99 @@ public class SQLBuilder {
return sql.toString();
}
- public static <Entity> String update(TableMetaData tableMetaData, Entity
entity, String databaseId) {
+ public static <Entity> String insertList(TableMetaData tableMetaData,
List<Entity> entities, String databaseId) {
+ if (entities == null || entities.isEmpty()) {
+ throw new IllegalArgumentException("Entities list must not be null
or empty");
+ }
+
+ Class<?> entityClass = entities.get(0).getClass();
+ Map<String, String> fieldColumnMap = tableMetaData.getFieldColumnMap();
+
+ SQL sql = new SQL();
+ switch (DBType.toType(databaseId)) {
+ case MYSQL: {
+ sql.INSERT_INTO(keywordsFormat(tableMetaData.getTableName(),
DBType.MYSQL));
+
+ boolean firstRow = true;
+ int idx = 0;
+ for (Entity entity : entities) {
+ List<String> values = new ArrayList<>();
+ for (Map.Entry<String, String> entry :
fieldColumnMap.entrySet()) {
+ // Ignore primary key
+ if (Objects.equals(entry.getKey(),
tableMetaData.getPkProperty())) {
+ continue;
+ }
+ PropertyDescriptor ps =
BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
+ if (ps == null || ps.getReadMethod() == null) {
+ continue;
+ }
+ Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
+ if (!ObjectUtils.isEmpty(value)) {
+ if (firstRow) {
+ sql.VALUES(
+ keywordsFormat(entry.getValue(),
DBType.MYSQL),
+ getTokenParam("arg0[" + idx + "]." +
entry.getKey()));
+ }
+ values.add(getTokenParam("arg0[" + idx + "]." +
entry.getKey()));
+ }
+ }
+ if (firstRow) {
+ firstRow = false;
+ } else {
+ sql.ADD_ROW();
+ sql.INTO_VALUES(values.toArray(new String[0]));
+ }
+ idx++;
+ }
+ break;
+ }
+ case POSTGRESQL: {
+ sql.INSERT_INTO(keywordsFormat(tableMetaData.getTableName(),
DBType.POSTGRESQL));
+
+ boolean firstRow = true;
+ List<String> columns = new ArrayList<>();
+ int idx = 0;
+ for (Entity entity : entities) {
+ List<String> values = new ArrayList<>();
+ for (Map.Entry<String, String> entry :
fieldColumnMap.entrySet()) {
+ // Ignore primary key
+ if (Objects.equals(entry.getKey(),
tableMetaData.getPkProperty())) {
+ continue;
+ }
+ PropertyDescriptor ps =
BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
+ if (ps == null || ps.getReadMethod() == null) {
+ continue;
+ }
+ Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
+ if (!ObjectUtils.isEmpty(value)) {
+ if (firstRow) {
+ sql.VALUES(
+ keywordsFormat(entry.getValue(),
DBType.POSTGRESQL),
+ getTokenParam("arg0[" + idx + "]." +
entry.getKey()));
+ }
+ values.add(getTokenParam("arg0[" + idx + "]." +
entry.getKey()));
+ }
+ }
+ if (firstRow) {
+ firstRow = false;
+ } else {
+ sql.ADD_ROW();
+ sql.INTO_VALUES(values.toArray(new String[0]));
+ }
+ idx++;
+ }
+ }
+
+ default: {
+ log.error("Unsupported data source");
+ }
+ }
+
+ return sql.toString();
+ }
+
+ public static <Entity> String update(
+ TableMetaData tableMetaData, Entity entity, String databaseId,
boolean partial) {
Class<?> entityClass = entity.getClass();
Map<String, String> fieldColumnMap = tableMetaData.getFieldColumnMap();
@@ -115,9 +214,17 @@ public class SQLBuilder {
continue;
}
Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
- if (!ObjectUtils.isEmpty(value)) {
- sql.SET(getEquals(keywordsFormat(entry.getValue(),
DBType.MYSQL), entry.getKey()));
+ if (ObjectUtils.isEmpty(value) && partial) {
+ continue;
+ }
+ Field field = ReflectionUtils.findField(entityClass,
entry.getKey());
+ if (field != null) {
+ Column column = field.getAnnotation(Column.class);
+ if (column != null && !column.nullable() && value ==
null) {
+ continue;
+ }
}
+ sql.SET(getEquals(keywordsFormat(entry.getValue(),
DBType.MYSQL), entry.getKey()));
}
sql.WHERE(getEquals(
@@ -136,9 +243,17 @@ public class SQLBuilder {
continue;
}
Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
- if (!ObjectUtils.isEmpty(value)) {
- sql.SET(getEquals(keywordsFormat(entry.getValue(),
DBType.POSTGRESQL), entry.getKey()));
+ if (ObjectUtils.isEmpty(value) && partial) {
+ continue;
}
+ Field field = ReflectionUtils.findField(entityClass,
entry.getKey());
+ if (field != null) {
+ Column column = field.getAnnotation(Column.class);
+ if (column != null && !column.nullable() && value ==
null) {
+ continue;
+ }
+ }
+ sql.SET(getEquals(keywordsFormat(entry.getValue(),
DBType.POSTGRESQL), entry.getKey()));
}
sql.WHERE(getEquals(
keywordsFormat(tableMetaData.getPkColumn(),
DBType.POSTGRESQL), tableMetaData.getPkProperty()));
@@ -152,6 +267,189 @@ public class SQLBuilder {
return sql.toString();
}
+ public static <Entity> String updateList(
+ TableMetaData tableMetaData, List<Entity> entities, String
databaseId, boolean partial) {
+ if (entities == null || entities.isEmpty()) {
+ throw new IllegalArgumentException("Entities list must not be null
or empty");
+ }
+
+ Class<?> entityClass = entities.get(0).getClass();
+ Map<String, String> fieldColumnMap = tableMetaData.getFieldColumnMap();
+
+ StringBuilder sqlBuilder = new StringBuilder();
+ switch (DBType.toType(databaseId)) {
+ case MYSQL: {
+ sqlBuilder
+ .append("UPDATE ")
+ .append(keywordsFormat(tableMetaData.getTableName(),
DBType.MYSQL))
+ .append(" SET ");
+ Map<String, StringBuilder> setClauses = new LinkedHashMap<>();
+ String primaryKey = keywordsFormat("id", DBType.MYSQL);
+ for (Map.Entry<String, String> entry :
fieldColumnMap.entrySet()) {
+ // Ignore primary key
+ if (Objects.equals(entry.getKey(),
tableMetaData.getPkProperty())) {
+ primaryKey = keywordsFormat(entry.getValue(),
DBType.MYSQL);
+ continue;
+ }
+
+ StringBuilder caseClause = new StringBuilder();
+ caseClause
+ .append(keywordsFormat(entry.getValue(),
DBType.MYSQL))
+ .append(" = CASE ");
+ for (Entity entity : entities) {
+ PropertyDescriptor ps =
BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
+ if (ps == null || ps.getReadMethod() == null) {
+ continue;
+ }
+ Field field = ReflectionUtils.findField(entityClass,
entry.getKey());
+ if (field == null || checkBaseField(field)) {
+ continue;
+ }
+ Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
+ PropertyDescriptor pkPs =
+ BeanUtils.getPropertyDescriptor(entityClass,
tableMetaData.getPkProperty());
+ if (pkPs == null || pkPs.getReadMethod() == null) {
+ continue;
+ }
+ Object pkValue =
ReflectionUtils.invokeMethod(pkPs.getReadMethod(), entity);
+
+ if (!ObjectUtils.isEmpty(value)) {
+ caseClause
+ .append("WHEN ")
+ .append(primaryKey)
+ .append(" = '")
+ .append(pkValue)
+ .append("' THEN '")
+
.append(escapeSingleQuote(value.toString()))
+ .append("' ");
+ } else if (!partial) {
+ Column column = field.getAnnotation(Column.class);
+ if (column != null && !column.nullable() && value
== null) {
+ continue;
+ }
+ caseClause
+ .append("WHEN ")
+ .append(primaryKey)
+ .append(" = '")
+ .append(pkValue)
+ .append("' THEN NULL ");
+ }
+ }
+ caseClause
+ .append("ELSE ")
+ .append(keywordsFormat(entry.getValue(),
DBType.MYSQL))
+ .append(" ");
+ caseClause.append("END");
+ setClauses.put(entry.getValue(), caseClause);
+ }
+ sqlBuilder.append(String.join(", ", setClauses.values()));
+
+ sqlBuilder.append(" WHERE ").append(primaryKey).append(" IN
(");
+ String pkValues = entities.stream()
+ .map(entity -> {
+ PropertyDescriptor pkPs =
+
BeanUtils.getPropertyDescriptor(entityClass, tableMetaData.getPkProperty());
+ Object pkValue =
ReflectionUtils.invokeMethod(pkPs.getReadMethod(), entity);
+ return "'" + pkValue.toString() + "'";
+ })
+ .collect(Collectors.joining(", "));
+
+ sqlBuilder.append(pkValues).append(")");
+ break;
+ }
+ case POSTGRESQL: {
+ sqlBuilder
+ .append("UPDATE ")
+ .append("\"")
+ .append(tableMetaData.getTableName())
+ .append("\"")
+ .append(" SET ");
+ Map<String, StringBuilder> setClauses = new LinkedHashMap<>();
+ String primaryKey = keywordsFormat("id", DBType.POSTGRESQL);
+ for (Map.Entry<String, String> entry :
fieldColumnMap.entrySet()) {
+ // Ignore primary key
+ if (Objects.equals(entry.getKey(),
tableMetaData.getPkProperty())) {
+ primaryKey = keywordsFormat(entry.getValue(),
DBType.POSTGRESQL);
+ continue;
+ }
+ Field field = ReflectionUtils.findField(entityClass,
entry.getKey());
+ if (field == null || checkBaseField(field)) {
+ continue;
+ }
+ StringBuilder caseClause = new StringBuilder();
+ caseClause
+ .append(keywordsFormat(entry.getValue(),
DBType.POSTGRESQL))
+ .append(" = CASE ");
+
+ for (Entity entity : entities) {
+ PropertyDescriptor ps =
BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
+ if (ps == null || ps.getReadMethod() == null) {
+ continue;
+ }
+ Object value =
ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
+ PropertyDescriptor pkPs =
+ BeanUtils.getPropertyDescriptor(entityClass,
tableMetaData.getPkProperty());
+ if (pkPs == null || pkPs.getReadMethod() == null) {
+ continue;
+ }
+ Object pkValue =
ReflectionUtils.invokeMethod(pkPs.getReadMethod(), entity);
+
+ if (!ObjectUtils.isEmpty(value)) {
+ caseClause
+ .append("WHEN ")
+ .append(primaryKey)
+ .append(" = '")
+ .append(pkValue)
+ .append("' THEN '")
+
.append(escapeSingleQuote(value.toString()))
+ .append("' ");
+ } else if (!partial) {
+ Column column = field.getAnnotation(Column.class);
+ if (column != null && !column.nullable() && value
== null) {
+ continue;
+ }
+ caseClause
+ .append("WHEN ")
+ .append(primaryKey)
+ .append(" = '")
+ .append(pkValue)
+ .append("' THEN NULL ");
+ }
+ }
+ if (caseClause.toString().endsWith("CASE ")) {
+ caseClause.append("WHEN TRUE THEN ");
+ } else {
+ caseClause.append("ELSE ");
+ }
+ caseClause
+ .append(keywordsFormat(entry.getValue(),
DBType.POSTGRESQL))
+ .append(" ");
+ caseClause.append("END");
+ setClauses.put(entry.getValue(), caseClause);
+ }
+ sqlBuilder.append(String.join(", ", setClauses.values()));
+
+ sqlBuilder.append(" WHERE ").append(primaryKey).append(" IN
(");
+ String pkValues = entities.stream()
+ .map(entity -> {
+ PropertyDescriptor pkPs =
+
BeanUtils.getPropertyDescriptor(entityClass, tableMetaData.getPkProperty());
+ Object pkValue =
ReflectionUtils.invokeMethod(pkPs.getReadMethod(), entity);
+ return "'" + pkValue.toString() + "'";
+ })
+ .collect(Collectors.joining(", "));
+
+ sqlBuilder.append(pkValues).append(")");
+ break;
+ }
+ default: {
+ log.error("Unsupported data source");
+ }
+ }
+
+ return sqlBuilder.toString();
+ }
+
public static String selectById(TableMetaData tableMetaData, String
databaseId, Serializable id) {
SQL sql = new SQL();
@@ -336,6 +634,20 @@ public class SQLBuilder {
return "#{" + property + "}";
}
+ private static String escapeSingleQuote(String input) {
+ if (input != null) {
+ return input.replace("'", "''");
+ }
+ return null;
+ }
+
+ private static boolean checkBaseField(Field field) {
+ return field.isAnnotationPresent(CreateBy.class)
+ || field.isAnnotationPresent(CreateTime.class)
+ || field.isAnnotationPresent(UpdateBy.class)
+ || field.isAnnotationPresent(UpdateTime.class);
+ }
+
private static <Condition> SQL mysqlCondition(Condition condition,
TableMetaData tableMetaData)
throws IllegalAccessException {
diff --git a/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
index 4c475a7..ea168af 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/HostMapper.xml
@@ -100,12 +100,4 @@
</where>
</select>
- <insert id="saveAll" useGeneratedKeys="true" keyProperty="id"
keyColumn="id">
- insert into host (hostname, ipv4, ipv6, os, arch,
available_processors, free_memory_size, total_memory_size, free_disk,
total_disk, state, cluster_id, create_by, update_by, create_time, update_time)
- values
- <foreach collection='hosts' item='host' separator=','>
- (#{host.hostname}, #{host.ipv4}, #{host.ipv6}, #{host.os},
#{host.arch}, #{host.availableProcessors}, #{host.freeMemorySize},
#{host.totalMemorySize}, #{host.freeDisk}, #{host.totalDisk}, #{host.state},
#{host.clusterId}
,#{host.createBy},#{host.updateBy},#{host.createTime},#{host.updateTime})
- </foreach>
- </insert>
-
</mapper>
\ No newline at end of file
diff --git a/bigtop-manager-dao/src/main/resources/mapper/mysql/RepoMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/mysql/RepoMapper.xml
index cee5e86..d1f0d35 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/RepoMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/RepoMapper.xml
@@ -40,14 +40,6 @@
limit 1
</select>
- <insert id="saveAll" useGeneratedKeys="true" keyProperty="id"
keyColumn="id">
- insert into repo (base_url, os, arch, repo_id, repo_name, repo_type,
cluster_id, create_by, update_by, create_time, update_time)
- values
- <foreach collection='clusters' item='cluster' separator=','>
-
(#{cluster.baseUrl},#{cluster.os},#{cluster.arch},#{cluster.repoId},#{cluster.repoName},#{cluster.repoType},#{cluster.clusterId},#{cluster.createBy},#{cluster.updateBy},#{cluster.createTime},#{cluster.updateTime})
- </foreach>
- </insert>
-
<select id="findAllByClusterId" parameterType="java.lang.Long"
resultType="org.apache.bigtop.manager.dao.po.RepoPO">
select
diff --git
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
index 4c475a7..ea168af 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/postgresql/HostMapper.xml
@@ -100,12 +100,4 @@
</where>
</select>
- <insert id="saveAll" useGeneratedKeys="true" keyProperty="id"
keyColumn="id">
- insert into host (hostname, ipv4, ipv6, os, arch,
available_processors, free_memory_size, total_memory_size, free_disk,
total_disk, state, cluster_id, create_by, update_by, create_time, update_time)
- values
- <foreach collection='hosts' item='host' separator=','>
- (#{host.hostname}, #{host.ipv4}, #{host.ipv6}, #{host.os},
#{host.arch}, #{host.availableProcessors}, #{host.freeMemorySize},
#{host.totalMemorySize}, #{host.freeDisk}, #{host.totalDisk}, #{host.state},
#{host.clusterId}
,#{host.createBy},#{host.updateBy},#{host.createTime},#{host.updateTime})
- </foreach>
- </insert>
-
</mapper>
\ No newline at end of file
diff --git
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/RepoMapper.xml
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/RepoMapper.xml
index cee5e86..d1f0d35 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/postgresql/RepoMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/postgresql/RepoMapper.xml
@@ -40,14 +40,6 @@
limit 1
</select>
- <insert id="saveAll" useGeneratedKeys="true" keyProperty="id"
keyColumn="id">
- insert into repo (base_url, os, arch, repo_id, repo_name, repo_type,
cluster_id, create_by, update_by, create_time, update_time)
- values
- <foreach collection='clusters' item='cluster' separator=','>
-
(#{cluster.baseUrl},#{cluster.os},#{cluster.arch},#{cluster.repoId},#{cluster.repoName},#{cluster.repoType},#{cluster.clusterId},#{cluster.createBy},#{cluster.updateBy},#{cluster.createTime},#{cluster.updateTime})
- </foreach>
- </insert>
-
<select id="findAllByClusterId" parameterType="java.lang.Long"
resultType="org.apache.bigtop.manager.dao.po.RepoPO">
select
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractJob.java
index 42f1248..6ae1ee8 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/AbstractJob.java
@@ -88,7 +88,7 @@ public abstract class AbstractJob implements Job {
@Override
public void beforeRun() {
jobPO.setState(JobState.PROCESSING.getName());
- jobDao.updateById(jobPO);
+ jobDao.partialUpdateById(jobPO);
}
@Override
@@ -124,7 +124,7 @@ public abstract class AbstractJob implements Job {
public void onSuccess() {
JobPO jobPO = getJobPO();
jobPO.setState(JobState.SUCCESSFUL.getName());
- jobDao.updateById(jobPO);
+ jobDao.partialUpdateById(jobPO);
}
@Override
@@ -154,7 +154,7 @@ public abstract class AbstractJob implements Job {
if (!stagePOList.isEmpty()) {
stageDao.updateStateByIds(stagePOList);
}
- jobDao.updateById(jobPO);
+ jobDao.partialUpdateById(jobPO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/ClusterCreateJob.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/ClusterCreateJob.java
index 47a2744..91a4c60 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/ClusterCreateJob.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/job/ClusterCreateJob.java
@@ -77,22 +77,22 @@ public class ClusterCreateJob extends AbstractJob {
// Update cluster state to installed
clusterPO.setState(MaintainState.INSTALLED.getName());
- clusterDao.updateById(clusterPO);
+ clusterDao.partialUpdateById(clusterPO);
// Link job to cluster after cluster successfully added
JobPO jobPO = getJobPO();
jobPO.setClusterId(clusterPO.getId());
- jobDao.updateById(jobPO);
+ jobDao.partialUpdateById(jobPO);
for (Stage stage : getStages()) {
StagePO stagePO = stage.getStagePO();
stagePO.setClusterId(clusterPO.getId());
- stageDao.updateById(stagePO);
+ stageDao.partialUpdateById(stagePO);
for (Task task : stage.getTasks()) {
TaskPO taskPO = task.getTaskPO();
taskPO.setClusterId(clusterPO.getId());
- taskDao.updateById(taskPO);
+ taskDao.partialUpdateById(taskPO);
}
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractStage.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractStage.java
index f0a7567..07259a3 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractStage.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/stage/AbstractStage.java
@@ -76,7 +76,7 @@ public abstract class AbstractStage implements Stage {
@Override
public void beforeRun() {
stagePO.setState(JobState.PROCESSING.getName());
- stageDao.updateById(stagePO);
+ stageDao.partialUpdateById(stagePO);
}
@Override
@@ -121,14 +121,14 @@ public abstract class AbstractStage implements Stage {
public void onSuccess() {
StagePO stagePO = getStagePO();
stagePO.setState(JobState.SUCCESSFUL.getName());
- stageDao.updateById(stagePO);
+ stageDao.partialUpdateById(stagePO);
}
@Override
public void onFailure() {
StagePO stagePO = getStagePO();
stagePO.setState(JobState.FAILED.getName());
- stageDao.updateById(stagePO);
+ stageDao.partialUpdateById(stagePO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractTask.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractTask.java
index 41f840c..e8767cb 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractTask.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/AbstractTask.java
@@ -68,7 +68,7 @@ public abstract class AbstractTask implements Task {
@Override
public void beforeRun() {
taskPO.setState(JobState.PROCESSING.getName());
- taskDao.updateById(taskPO);
+ taskDao.partialUpdateById(taskPO);
}
@Override
@@ -106,7 +106,7 @@ public abstract class AbstractTask implements Task {
TaskPO taskPO = getTaskPO();
taskPO.setContent(ProtobufUtil.toJson(commandRequest));
taskPO.setState(JobState.SUCCESSFUL.getName());
- taskDao.updateById(taskPO);
+ taskDao.partialUpdateById(taskPO);
}
@Override
@@ -114,7 +114,7 @@ public abstract class AbstractTask implements Task {
TaskPO taskPO = getTaskPO();
taskPO.setContent(ProtobufUtil.toJson(commandRequest));
taskPO.setState(JobState.FAILED.getName());
- taskDao.updateById(taskPO);
+ taskDao.partialUpdateById(taskPO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentInstallTask.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentInstallTask.java
index 91f003c..176a8e7 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentInstallTask.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentInstallTask.java
@@ -43,7 +43,7 @@ public class ComponentInstallTask extends
AbstractComponentTask {
HostComponentPO hostComponentPO =
hostComponentDao.findByClusterIdAndComponentNameAndHostname(clusterId,
componentName, hostname);
hostComponentPO.setState(MaintainState.INSTALLED.getName());
- hostComponentDao.updateById(hostComponentPO);
+ hostComponentDao.partialUpdateById(hostComponentPO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStartTask.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStartTask.java
index fca02aa..aed3898 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStartTask.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStartTask.java
@@ -43,7 +43,7 @@ public class ComponentStartTask extends AbstractComponentTask
{
HostComponentPO hostComponentPO =
hostComponentDao.findByClusterIdAndComponentNameAndHostname(clusterId,
componentName, hostname);
hostComponentPO.setState(MaintainState.STARTED.getName());
- hostComponentDao.updateById(hostComponentPO);
+ hostComponentDao.partialUpdateById(hostComponentPO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStopTask.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStopTask.java
index b779aa4..2b7ea99 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStopTask.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/command/task/ComponentStopTask.java
@@ -43,7 +43,7 @@ public class ComponentStopTask extends AbstractComponentTask {
HostComponentPO hostComponentPO =
hostComponentDao.findByClusterIdAndComponentNameAndHostname(clusterId,
componentName, hostname);
hostComponentPO.setState(MaintainState.STOPPED.getName());
- hostComponentDao.updateById(hostComponentPO);
+ hostComponentDao.partialUpdateById(hostComponentPO);
}
@Override
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/ComponentStatusScheduler.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/ComponentStatusScheduler.java
index 4c0d99c..141362c 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/ComponentStatusScheduler.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/ComponentStatusScheduler.java
@@ -71,13 +71,13 @@ public class ComponentStatusScheduler {
if (reply.getStatus() == 0
&& MaintainState.fromString(hostComponentPO.getState()) ==
MaintainState.STOPPED) {
hostComponentPO.setState(MaintainState.STARTED.getName());
- hostComponentDao.updateById(hostComponentPO);
+ hostComponentDao.partialUpdateById(hostComponentPO);
}
if (reply.getStatus() != 0
&& MaintainState.fromString(hostComponentPO.getState()) ==
MaintainState.STARTED) {
hostComponentPO.setState(MaintainState.STOPPED.getName());
- hostComponentDao.updateById(hostComponentPO);
+ hostComponentDao.partialUpdateById(hostComponentPO);
}
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/HostInfoScheduler.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/HostInfoScheduler.java
index f314661..33ebab0 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/HostInfoScheduler.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/scheduler/HostInfoScheduler.java
@@ -75,6 +75,6 @@ public class HostInfoScheduler {
hostPO.setState(MaintainState.STOPPED.getName());
}
- hostDao.updateById(hostPO);
+ hostDao.partialUpdateById(hostPO);
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
index 19604a1..d412236 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
@@ -87,7 +87,7 @@ public class ClusterServiceImpl implements ClusterService {
clusterDao.findByClusterName(clusterDTO.getClusterName()).orElse(new
ClusterPO());
if (oldClusterPO.getId() != null) {
clusterPO.setId(oldClusterPO.getId());
- clusterDao.updateById(clusterPO);
+ clusterDao.partialUpdateById(clusterPO);
} else {
clusterDao.save(clusterPO);
}
@@ -126,7 +126,7 @@ public class ClusterServiceImpl implements ClusterService {
public ClusterVO update(Long id, ClusterDTO clusterDTO) {
ClusterPO clusterPO = ClusterConverter.INSTANCE.fromDTO2PO(clusterDTO);
clusterPO.setId(id);
- clusterDao.updateById(clusterPO);
+ clusterDao.partialUpdateById(clusterPO);
return ClusterConverter.INSTANCE.fromEntity2VO(clusterPO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ConfigServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ConfigServiceImpl.java
index 1f5ac9f..1db6526 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ConfigServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ConfigServiceImpl.java
@@ -94,7 +94,7 @@ public class ConfigServiceImpl implements ConfigService {
if (shouldUpdateConfig(existConfigs, configs)) {
// Unselect current config
currentConfig.setSelected(false);
- serviceConfigDao.updateById(currentConfig);
+ serviceConfigDao.partialUpdateById(currentConfig);
// Create a new config
String configDesc = "Update config for " +
servicePO.getServiceName();
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
index 7127d0e..8bc79a3 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
@@ -99,7 +99,7 @@ public class HostServiceImpl implements HostService {
public HostVO update(Long id, HostDTO hostDTO) {
HostPO hostPO = HostConverter.INSTANCE.fromDTO2PO(hostDTO);
hostPO.setId(id);
- hostDao.updateById(hostPO);
+ hostDao.partialUpdateById(hostPO);
return HostConverter.INSTANCE.fromPO2VO(hostPO);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
index b6a30a3..fbf0bbe 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/JobServiceImpl.java
@@ -110,15 +110,15 @@ public class JobServiceImpl implements JobService {
for (StagePO stagePO : jobPO.getStages()) {
for (TaskPO taskPO : stagePO.getTasks()) {
taskPO.setState(JobState.PENDING.getName());
- taskDao.updateById(taskPO);
+ taskDao.partialUpdateById(taskPO);
}
stagePO.setState(JobState.PENDING.getName());
- stageDao.updateById(stagePO);
+ stageDao.partialUpdateById(stagePO);
}
jobPO.setState(JobState.PENDING.getName());
- jobDao.updateById(jobPO);
+ jobDao.partialUpdateById(jobPO);
}
private Job recreateJob(JobPO jobPO) {
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/UserServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/UserServiceImpl.java
index eaa01d2..61568d1 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/UserServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/UserServiceImpl.java
@@ -50,7 +50,7 @@ public class UserServiceImpl implements UserService {
Long id = SessionUserHolder.getUserId();
UserPO userPO = userDao.findOptionalById(id).orElseThrow(() -> new
ApiException(ApiExceptionEnum.NEED_LOGIN));
userPO.setNickname(userDTO.getNickname());
- userDao.updateById(userPO);
+ userDao.partialUpdateById(userPO);
return UserConverter.INSTANCE.fromPO2VO(userPO);
}
}