This is an automated email from the ASF dual-hosted git repository.
lidongdai 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 e41de35e17 [Fix-9856]Failed to upload the file but get misleading
error message (#9861)
e41de35e17 is described below
commit e41de35e17436646c3f551a93e53091e85d76d06
Author: litiliu <[email protected]>
AuthorDate: Wed May 4 21:20:14 2022 +0800
[Fix-9856]Failed to upload the file but get misleading error message (#9861)
* [fix-9856]Failed to upload the file because the full name was too long,
but get misleading message
* Update Status.java
Co-authored-by: litiliu <[email protected]>
Co-authored-by: lidongdai <[email protected]>
---
.../apache/dolphinscheduler/api/enums/Status.java | 3 +-
.../api/service/impl/ResourcesServiceImpl.java | 5 +++
.../api/service/ResourcesServiceTest.java | 50 ++++++++++++++++++----
.../apache/dolphinscheduler/common/Constants.java | 1 +
4 files changed, 49 insertions(+), 10 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 26d7eee0f2..a755a75e1c 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -400,7 +400,8 @@ public enum Status {
GRANT_K8S_NAMESPACE_ERROR(1300011, "grant namespace error", "授权资源错误"),
QUERY_UNAUTHORIZED_NAMESPACE_ERROR(1300012, "query unauthorized namespace
error", "查询未授权命名空间错误"),
QUERY_AUTHORIZED_NAMESPACE_ERROR(1300013, "query authorized namespace
error", "查询授权命名空间错误"),
- QUERY_CAN_USE_K8S_CLUSTER_ERROR(1300014, "login user query can used k8s
cluster list error", "查询可用k8s集群错误");
+ QUERY_CAN_USE_K8S_CLUSTER_ERROR(1300014, "login user query can used k8s
cluster list error", "查询可用k8s集群错误"),
+ RESOURCE_FULL_NAME_TOO_LONG_ERROR(1300015, "resource's fullname is too
long error", "资源文件名过长");
private final int code;
private final String enMsg;
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
index ae0b672ff9..200aeb1c65 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
@@ -219,6 +219,11 @@ public class ResourcesServiceImpl extends BaseServiceImpl
implements ResourcesSe
putMsg(result, Status.RESOURCE_EXIST);
return result;
}
+ if (fullName.length() > Constants.RESOURCE_FULL_NAME_MAX_LENGTH) {
+ logger.error("resource {}'s full name {}' is longer than the max
length {}", RegexUtils.escapeNRT(name), fullName,
Constants.RESOURCE_FULL_NAME_MAX_LENGTH);
+ putMsg(result, Status.RESOURCE_FULL_NAME_TOO_LONG_ERROR);
+ return result;
+ }
Date now = new Date();
Resource resource = new Resource(pid, name, fullName, false, desc,
file.getOriginalFilename(), loginUser.getId(), type, file.getSize(), now, now);
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
index 3a39154d14..939e439f7d 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
@@ -17,10 +17,8 @@
package org.apache.dolphinscheduler.api.service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.io.Files;
-import org.apache.commons.collections.CollectionUtils;
+import static org.mockito.ArgumentMatchers.eq;
+
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.impl.ResourcesServiceImpl;
import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -34,8 +32,25 @@ import org.apache.dolphinscheduler.dao.entity.Resource;
import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.UdfFunc;
import org.apache.dolphinscheduler.dao.entity.User;
-import org.apache.dolphinscheduler.dao.mapper.*;
+import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
+import org.apache.dolphinscheduler.dao.mapper.ResourceMapper;
+import org.apache.dolphinscheduler.dao.mapper.ResourceUserMapper;
+import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
+import org.apache.dolphinscheduler.dao.mapper.UdfFuncMapper;
+import org.apache.dolphinscheduler.dao.mapper.UserMapper;
import org.apache.dolphinscheduler.spi.enums.ResourceType;
+
+import org.apache.commons.collections.CollectionUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -51,10 +66,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mock.web.MockMultipartFile;
-import java.io.IOException;
-import java.util.*;
-
-import static org.mockito.ArgumentMatchers.eq;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.io.Files;
/**
* resources service test
@@ -140,6 +154,14 @@ public class ResourcesServiceTest {
logger.info(result.toString());
Assert.assertEquals(Status.UDF_RESOURCE_SUFFIX_NOT_JAR.getMsg(),
result.getMsg());
+ //FULL_FILE_NAME_TOO_LONG
+ String tooLongFileName =
getRandomStringWithLength(Constants.RESOURCE_FULL_NAME_MAX_LENGTH) + ".pdf";
+ mockMultipartFile = new MockMultipartFile(tooLongFileName,
tooLongFileName, "pdf", "test".getBytes());
+
PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+
PowerMockito.when(Files.getFileExtension(tooLongFileName)).thenReturn("pdf");
+ result = resourcesService.createResource(user, tooLongFileName,
tooLongFileName, ResourceType.FILE, mockMultipartFile, -1, "/");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_FULL_NAME_TOO_LONG_ERROR.getMsg(),
result.getMsg());
}
@Test
@@ -831,4 +853,14 @@ public class ResourcesServiceTest {
resources.add(resource);
return resources;
}
+
+ private static String getRandomStringWithLength(int length) {
+ Random r = new Random();
+ StringBuilder sb = new StringBuilder();
+ while (sb.length() < length) {
+ char c = (char) (r.nextInt(26) + 'a');
+ sb.append(c);
+ }
+ return sb.toString();
+ }
}
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index fc49132ccd..d1d240f28c 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -822,4 +822,5 @@ public final class Constants {
* schedule timezone
*/
public static final String SCHEDULE_TIMEZONE = "schedule_timezone";
+ public static final int RESOURCE_FULL_NAME_MAX_LENGTH = 128;
}