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;
 }

Reply via email to