This is an automated email from the ASF dual-hosted git repository.
zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new e62cc030a4 [Fix-17969][API] No tenant validation for workflow (#17970)
e62cc030a4 is described below
commit e62cc030a4afe3f8fe4d25137985942f254107d8
Author: Wenjun Ruan <[email protected]>
AuthorDate: Sun Feb 22 13:51:28 2026 +0800
[Fix-17969][API] No tenant validation for workflow (#17970)
---
.../api/service/impl/ExecutorServiceImpl.java | 1 +
.../api/service/impl/SchedulerServiceImpl.java | 24 ++++-------------
.../api/validator/TenantExistValidator.java | 30 ++++++++++++++--------
.../workflow/BackfillWorkflowDTOValidator.java | 8 ++++++
.../workflow/TriggerWorkflowDTOValidator.java | 8 ++++++
.../api/service/SchedulerServiceTest.java | 16 +++---------
.../dolphinscheduler/dao/repository/TenantDao.java | 4 +++
.../dao/repository/impl/TenantDaoImpl.java | 6 +++++
8 files changed, 55 insertions(+), 42 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
index c93c237915..c308c7f420 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ExecutorServiceImpl.java
@@ -163,6 +163,7 @@ public class ExecutorServiceImpl extends BaseServiceImpl
implements ExecutorServ
@Transactional
public Integer triggerWorkflowDefinition(final WorkflowTriggerRequest
triggerRequest) {
final TriggerWorkflowDTO triggerWorkflowDTO =
triggerWorkflowRequestTransformer.transform(triggerRequest);
+ // todo: use validator chain
triggerWorkflowDTOValidator.validate(triggerWorkflowDTO);
return
executorClient.triggerWorkflowDefinition().execute(triggerWorkflowDTO);
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
index a87d36c7af..4d97ff771a 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java
@@ -31,6 +31,7 @@ import org.apache.dolphinscheduler.api.service.ProjectService;
import org.apache.dolphinscheduler.api.service.SchedulerService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.api.validator.TenantExistValidator;
import org.apache.dolphinscheduler.api.vo.ScheduleVO;
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.FailureStrategy;
@@ -43,13 +44,11 @@ import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.Environment;
import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.Schedule;
-import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.entity.WorkflowDefinition;
import org.apache.dolphinscheduler.dao.mapper.EnvironmentMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
-import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionMapper;
import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
import org.apache.dolphinscheduler.service.cron.CronUtils;
@@ -107,7 +106,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl
implements SchedulerSe
private EnvironmentMapper environmentMapper;
@Autowired
- private TenantMapper tenantMapper;
+ private TenantExistValidator tenantExistValidator;
/**
* save schedule
@@ -166,7 +165,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl
implements SchedulerSe
Schedule scheduleObj = new Schedule();
Date now = new Date();
- checkValidTenant(tenantCode);
+ tenantExistValidator.validate(tenantCode);
scheduleObj.setTenantCode(tenantCode);
scheduleObj.setProjectName(project.getName());
@@ -276,7 +275,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl
implements SchedulerSe
scheduleExists.getId());
}
- checkValidTenant(scheduleCreateRequest.getTenantCode());
+ tenantExistValidator.validate(scheduleCreateRequest.getTenantCode());
Schedule schedule = scheduleCreateRequest.convert2Schedule();
Environment environment =
environmentMapper.queryByEnvironmentCode(schedule.getEnvironmentCode());
@@ -759,7 +758,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl
implements SchedulerSe
Date now = new Date();
- checkValidTenant(tenantCode);
+ tenantExistValidator.validate(tenantCode);
schedule.setTenantCode(tenantCode);
// updateWorkflowInstance param
@@ -818,17 +817,4 @@ public class SchedulerServiceImpl extends BaseServiceImpl
implements SchedulerSe
putMsg(result, Status.SUCCESS);
}
- /**
- * check valid tenant
- *
- * @param tenantCode
- */
- private void checkValidTenant(String tenantCode) {
- if (!Constants.DEFAULT.equals(tenantCode)) {
- Tenant tenant = tenantMapper.queryByTenantCode(tenantCode);
- if (tenant == null) {
- throw new ServiceException(Status.TENANT_NOT_EXIST,
tenantCode);
- }
- }
- }
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/TenantExistValidator.java
similarity index 53%
copy from
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
copy to
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/TenantExistValidator.java
index 45f9a5fcba..d37257d22a 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/TenantExistValidator.java
@@ -15,22 +15,32 @@
* limitations under the License.
*/
-package org.apache.dolphinscheduler.dao.repository.impl;
+package org.apache.dolphinscheduler.api.validator;
-import org.apache.dolphinscheduler.dao.entity.Tenant;
-import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
-import org.apache.dolphinscheduler.dao.repository.BaseDao;
import org.apache.dolphinscheduler.dao.repository.TenantDao;
-import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Component;
-@Repository
-public class TenantDaoImpl extends BaseDao<Tenant, TenantMapper> implements
TenantDao {
+/**
+ * This validator is used to validate whether the tenant exists.
+ * <p> If the tenant does not exist, an {@link IllegalArgumentException} will
be thrown. </p>
+ */
+@Slf4j
+@Component
+public class TenantExistValidator implements IValidator<String> {
+
+ private final TenantDao tenantDao;
- public TenantDaoImpl(@NonNull TenantMapper tenantMapper) {
- super(tenantMapper);
+ public TenantExistValidator(TenantDao tenantDao) {
+ this.tenantDao = tenantDao;
}
+ @Override
+ public void validate(String tenantCode) {
+ if (!tenantDao.queryByCode(tenantCode).isPresent()) {
+ throw new IllegalArgumentException(String.format("Tenant: [%s] not
exists", tenantCode));
+ }
+ }
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java
index 634d964a12..0b5da7e85a 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/BackfillWorkflowDTOValidator.java
@@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.api.validator.workflow;
import org.apache.dolphinscheduler.api.validator.IValidator;
+import org.apache.dolphinscheduler.api.validator.TenantExistValidator;
import org.apache.dolphinscheduler.common.enums.CommandType;
import org.apache.dolphinscheduler.common.enums.ReleaseState;
@@ -31,6 +32,12 @@ import org.springframework.stereotype.Component;
@Component
public class BackfillWorkflowDTOValidator implements
IValidator<BackfillWorkflowDTO> {
+ private final TenantExistValidator tenantExistValidator;
+
+ public BackfillWorkflowDTOValidator(TenantExistValidator
tenantExistValidator) {
+ this.tenantExistValidator = tenantExistValidator;
+ }
+
@Override
public void validate(final BackfillWorkflowDTO backfillWorkflowDTO) {
final BackfillWorkflowDTO.BackfillParamsDTO backfillParams =
backfillWorkflowDTO.getBackfillParams();
@@ -52,5 +59,6 @@ public class BackfillWorkflowDTOValidator implements
IValidator<BackfillWorkflow
if (backfillWorkflowDTO.getWorkflowDefinition().getReleaseState() !=
ReleaseState.ONLINE) {
throw new IllegalStateException("The workflowDefinition should be
online");
}
+ tenantExistValidator.validate(backfillWorkflowDTO.getTenantCode());
}
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/TriggerWorkflowDTOValidator.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/TriggerWorkflowDTOValidator.java
index e994120e9d..b753714d97 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/TriggerWorkflowDTOValidator.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/validator/workflow/TriggerWorkflowDTOValidator.java
@@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.api.validator.workflow;
import org.apache.dolphinscheduler.api.validator.IValidator;
+import org.apache.dolphinscheduler.api.validator.TenantExistValidator;
import org.apache.dolphinscheduler.common.enums.CommandType;
import org.apache.dolphinscheduler.common.enums.ReleaseState;
@@ -29,6 +30,12 @@ import org.springframework.stereotype.Component;
@Component
public class TriggerWorkflowDTOValidator implements
IValidator<TriggerWorkflowDTO> {
+ private final TenantExistValidator tenantExistValidator;
+
+ public TriggerWorkflowDTOValidator(TenantExistValidator
tenantExistValidator) {
+ this.tenantExistValidator = tenantExistValidator;
+ }
+
@Override
public void validate(final TriggerWorkflowDTO triggerWorkflowDTO) {
if (triggerWorkflowDTO.getExecType() != CommandType.START_PROCESS) {
@@ -40,5 +47,6 @@ public class TriggerWorkflowDTOValidator implements
IValidator<TriggerWorkflowDT
if (triggerWorkflowDTO.getWorkflowDefinition().getReleaseState() !=
ReleaseState.ONLINE) {
throw new IllegalStateException("The workflowDefinition should be
online");
}
+ tenantExistValidator.validate(triggerWorkflowDTO.getTenantCode());
}
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SchedulerServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SchedulerServiceTest.java
index bb49fa4e7a..9323efaa17 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SchedulerServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/SchedulerServiceTest.java
@@ -26,6 +26,7 @@ import
org.apache.dolphinscheduler.api.dto.schedule.ScheduleUpdateRequest;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.service.impl.SchedulerServiceImpl;
+import org.apache.dolphinscheduler.api.validator.TenantExistValidator;
import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.ReleaseState;
import org.apache.dolphinscheduler.dao.entity.Environment;
@@ -36,11 +37,8 @@ import
org.apache.dolphinscheduler.dao.entity.WorkflowDefinition;
import org.apache.dolphinscheduler.dao.mapper.EnvironmentMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
-import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionMapper;
-import org.apache.dolphinscheduler.dao.mapper.WorkflowTaskRelationMapper;
import org.apache.dolphinscheduler.scheduler.api.SchedulerApi;
-import org.apache.dolphinscheduler.service.process.ProcessService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -63,15 +61,6 @@ public class SchedulerServiceTest extends
BaseServiceTestTool {
@InjectMocks
private SchedulerServiceImpl schedulerService;
- @Mock
- private WorkflowTaskRelationMapper workflowTaskRelationMapper;
-
- @Mock
- private MonitorService monitorService;
-
- @Mock
- private ProcessService processService;
-
@Mock
private ScheduleMapper scheduleMapper;
@@ -94,7 +83,7 @@ public class SchedulerServiceTest extends BaseServiceTestTool
{
private EnvironmentMapper environmentMapper;
@Mock
- private TenantMapper tenantMapper;
+ private TenantExistValidator tenantExistValidator;
protected static User user;
protected Exception exception;
@@ -128,6 +117,7 @@ public class SchedulerServiceTest extends
BaseServiceTestTool {
scheduleCreateRequest.setWorkflowDefinitionCode(processDefinitionCode);
scheduleCreateRequest.setEnvironmentCode(environmentCode);
scheduleCreateRequest.setTenantCode(Constants.DEFAULT);
+ scheduleCreateRequest.setStartTime(startTime);
// error process definition not exists
exception = Assertions.assertThrows(ServiceException.class,
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TenantDao.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TenantDao.java
index 9f48f372da..731a852819 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TenantDao.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TenantDao.java
@@ -19,6 +19,10 @@ package org.apache.dolphinscheduler.dao.repository;
import org.apache.dolphinscheduler.dao.entity.Tenant;
+import java.util.Optional;
+
public interface TenantDao extends IDao<Tenant> {
+ Optional<Tenant> queryByCode(String tenantCode);
+
}
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
index 45f9a5fcba..25cca1dab8 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TenantDaoImpl.java
@@ -22,6 +22,8 @@ import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.repository.BaseDao;
import org.apache.dolphinscheduler.dao.repository.TenantDao;
+import java.util.Optional;
+
import lombok.NonNull;
import org.springframework.stereotype.Repository;
@@ -33,4 +35,8 @@ public class TenantDaoImpl extends BaseDao<Tenant,
TenantMapper> implements Tena
super(tenantMapper);
}
+ @Override
+ public Optional<Tenant> queryByCode(String tenantCode) {
+ return
Optional.ofNullable(mybatisMapper.queryByTenantCode(tenantCode));
+ }
}