Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@ public enum Symbols implements Translatable {
/**
* ]
*/
RIGHT_BRACKET;
RIGHT_BRACKET,
/**
* ,
*/
COMMA;

@Override
public String code() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=Comment

com.oceanbase.odc.Symbols.LEFT_BRACKET=[
com.oceanbase.odc.Symbols.RIGHT_BRACKET=]
com.oceanbase.odc.Symbols.COMMA=,


#
Expand Down Expand Up @@ -850,6 +851,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】Channel verificatio
com.oceanbase.odc.builtin-resource.permission-apply.project.description=Requesting [{1}] permissions for project [{0}]
com.oceanbase.odc.builtin-resource.permission-apply.database.description=Requesting [{0}] permissions for databases

#
# Multiple Async
#
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=[{0}]multiple database change {1} batch no.{2} {3}.{4}
Comment thread
zijiacj marked this conversation as resolved.
Outdated
Comment thread
zijiacj marked this conversation as resolved.
Outdated

#
# ResourceRoleName
#
Expand All @@ -876,3 +882,5 @@ com.oceanbase.odc.PartitionPlanVariableKey.LAST_PARTITION_VALUE=The value of the
com.oceanbase.odc.partitionplan.TimeDataType=Time type
com.oceanbase.odc.partitionplan.NumberDataType=Number type

# DatabaseChangeTranslate:
com.oceanbase.odc.DatabaseChangeTranslate.BATCH_NUMBER=batch no.
Comment thread
zijiacj marked this conversation as resolved.
Outdated
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=备注

com.oceanbase.odc.Symbols.LEFT_BRACKET=【
com.oceanbase.odc.Symbols.RIGHT_BRACKET=】
com.oceanbase.odc.Symbols.COMMA=,

#
# LimitMetric
Expand Down Expand Up @@ -787,6 +788,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】消息通道验证
com.oceanbase.odc.builtin-resource.permission-apply.project.description=申请项目【{0}】的【{1}】权限
com.oceanbase.odc.builtin-resource.permission-apply.database.description=申请数据库的【{0}】权限

#
# Multiple Async
#
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=【{0}】多库变更 {1} 第{2}批 {3}.{4}

#
# ResourceRoleName
#
Expand All @@ -811,5 +817,4 @@ com.oceanbase.odc.DatabasePermissionType.EXPORT=导出
com.oceanbase.odc.PartitionPlanVariableKey.INTERVAL=间隔
com.oceanbase.odc.PartitionPlanVariableKey.LAST_PARTITION_VALUE=最后一个分区规则对应位置表达式的值
com.oceanbase.odc.partitionplan.TimeDataType=时间类型
com.oceanbase.odc.partitionplan.NumberDataType=数字类型

com.oceanbase.odc.partitionplan.NumberDataType=数字类型
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ com.oceanbase.odc.FieldName.USER_DESCRIPTION=備註

com.oceanbase.odc.Symbols.LEFT_BRACKET=【
com.oceanbase.odc.Symbols.RIGHT_BRACKET=】
com.oceanbase.odc.Symbols.COMMA=,

#
# LimitMetric
Expand Down Expand Up @@ -856,6 +857,11 @@ com.oceanbase.odc.notification.channel-test-message=【ODC】消息通道驗證
com.oceanbase.odc.builtin-resource.permission-apply.project.description=申請項目【{0}】的【{1}】權限
com.oceanbase.odc.builtin-resource.permission-apply.database.description=申請數據庫的【{0}】權限

#
# Multiple Async
#
com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description=【{0}】多庫變更 {1} 第{2}批 {3}.{4}

#
# ResourceRoleName
#
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@
package com.oceanbase.odc.service.databasechange;

import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;

import com.oceanbase.odc.core.shared.PreConditions;
import com.oceanbase.odc.core.shared.constant.ErrorCodes;
Expand Down Expand Up @@ -86,6 +88,9 @@ public void process(CreateFlowInstanceReq req) {
req.setProjectId(parameters.getProjectId());
req.setProjectName(project.getName());
DescriptionGenerator.generateDescription(req);
// Localization of father-son ticket is consistent
Locale locale = LocaleContextHolder.getLocale();
parameters.setLocale(locale);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.flowable.engine.delegate.DelegateExecution;
Expand All @@ -26,6 +28,7 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.oceanbase.odc.common.i18n.I18n;
import com.oceanbase.odc.common.json.JsonUtils;
import com.oceanbase.odc.core.shared.constant.FlowStatus;
import com.oceanbase.odc.core.shared.constant.TaskErrorStrategy;
Expand All @@ -46,6 +49,7 @@
import com.oceanbase.odc.service.flow.model.QueryFlowInstanceParams;
import com.oceanbase.odc.service.flow.task.model.MultipleDatabaseChangeParameters;
import com.oceanbase.odc.service.flow.task.model.MultipleDatabaseChangeTaskResult;
import com.oceanbase.odc.service.flow.util.DescriptionGenerator;
import com.oceanbase.odc.service.flow.util.FlowTaskUtil;
import com.oceanbase.odc.service.iam.model.User;
import com.oceanbase.odc.service.iam.util.SecurityContextUtils;
Expand Down Expand Up @@ -135,6 +139,9 @@ protected Void start(Long taskId, TaskService taskService, DelegateExecution exe
multipleDatabaseChangeParameters.getOrderedDatabaseIds().get(this.batchId);
List<Long> flowInstanceIds = new ArrayList<>();
this.taskCreator = FlowTaskUtil.getTaskCreator(execution);
Map<Long, DatabaseChangeDatabase> map = multipleDatabaseChangeParameters.getDatabases().stream()
.collect(Collectors.toMap(DatabaseChangeDatabase::getId, Function.identity()));
Locale locale = multipleDatabaseChangeParameters.getLocale();
for (Long batchDatabaseId : batchDatabaseIds) {
CreateFlowInstanceReq createFlowInstanceReq = new CreateFlowInstanceReq();
createFlowInstanceReq.setDatabaseId(batchDatabaseId);
Expand All @@ -143,6 +150,8 @@ protected Void start(Long taskId, TaskService taskService, DelegateExecution exe
createFlowInstanceReq.setParentFlowInstanceId(FlowTaskUtil.getFlowInstanceId(execution));
createFlowInstanceReq.setParameters(multipleDatabaseChangeParameters
.convertIntoDatabaseChangeParameters(multipleDatabaseChangeParameters));
createFlowInstanceReq.setDescription(
generateDescription(locale, map.get(batchDatabaseId), getFlowInstanceId(), this.batchId));
List<FlowInstanceDetailResp> individualFlowInstance = flowInstanceService.createWithoutApprovalNode(
createFlowInstanceReq);
flowInstanceIds.add(individualFlowInstance.get(0).getId());
Expand Down Expand Up @@ -325,4 +334,15 @@ public List<Class<? extends ExecutionListener>> getExecutionListenerClasses() {
return null;
}

private String generateDescription(Locale locale, DatabaseChangeDatabase database, Long flowInstanceId,
Integer batchId) {
String i18nKey = "com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description";
String description = I18n.translate(
i18nKey,
new Object[] {DescriptionGenerator.localEnvName(database.getEnvironment().getName(), locale),
flowInstanceId, batchId + 1,
database.getDataSource().getName(), database.getName()},
locale);
return description;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package com.oceanbase.odc.service.flow.task.model;

import java.util.List;
import java.util.Locale;

import com.oceanbase.odc.core.shared.constant.TaskErrorStrategy;
import com.oceanbase.odc.service.databasechange.model.DatabaseChangeDatabase;
Expand Down Expand Up @@ -52,6 +53,10 @@ public class MultipleDatabaseChangeParameters extends DatabaseChangeParameters {
* TimeoutMillis in multiple databases manual execution mode
*/
private Long manualTimeoutMillis = 1000 * 60 * 60 * 24 * 2L;// 2d for default
/**
* Use the same locale to localize parent and child ticket‘s description
*/
private Locale locale;

public DatabaseChangeParameters convertIntoDatabaseChangeParameters(MultipleDatabaseChangeParameters parameter) {
DatabaseChangeParameters databaseChangeParameters = new DatabaseChangeParameters();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,14 @@
package com.oceanbase.odc.service.flow.util;

import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;

import javax.validation.constraints.NotNull;

import org.springframework.context.i18n.LocaleContextHolder;

import com.oceanbase.odc.common.i18n.I18n;
import com.oceanbase.odc.common.util.StringUtils;
import com.oceanbase.odc.core.shared.constant.Symbols;
import com.oceanbase.odc.core.shared.constant.TaskType;
Expand All @@ -33,21 +39,30 @@
public class DescriptionGenerator {

public static void generateDescription(CreateFlowInstanceReq req) {
Locale locale = LocaleContextHolder.getLocale();
if (StringUtils.isEmpty(req.getDescription())) {
String descFormat = Symbols.LEFT_BRACKET.i18nKey() + "%s" + Symbols.RIGHT_BRACKET.i18nKey() + "%s.%s";
// descriptions is recommended for localization.Facilitate fuzzy query
String descFormat = Symbols.LEFT_BRACKET.getLocalizedMessage() + "%s"
+ Symbols.RIGHT_BRACKET.getLocalizedMessage() + "%s.%s";
if (req.getTaskType() == TaskType.MULTIPLE_ASYNC) {
MultipleDatabaseChangeParameters parameters = (MultipleDatabaseChangeParameters) req.getParameters();
List<DatabaseChangeDatabase> databases = parameters.getDatabases();
String description = databases.stream()
.map(db -> String.format(descFormat, db.getEnvironment().getName(),
.map(db -> String.format(descFormat, localEnvName(db.getEnvironment().getName(), locale),
db.getDataSource().getName(), db.getName()))
.collect(Collectors.joining(","));
.collect(Collectors.joining(Symbols.COMMA.getLocalizedMessage()));
req.setDescription(description);
} else {
req.setDescription(String.format(descFormat,
req.getEnvironmentName(), req.getConnectionName(), req.getDatabaseName()));
localEnvName(req.getEnvironmentName(), locale), req.getConnectionName(),
req.getDatabaseName()));
}
}
}

public static String localEnvName(@NotNull String envName, @NotNull Locale locale) {
String envKey = envName.substring(2, envName.length() - 1);
Comment thread
zijiacj marked this conversation as resolved.
Outdated
return I18n.translate(envKey, null, envKey, locale);
}

}