This is an automated email from the ASF dual-hosted git repository.
journey pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 44770a8 [fix #2442] It will give a error tip that resource not exist
exwhen update resources. (#2483)
44770a8 is described below
commit 44770a876797394e544c69c31c0a87609bc25586
Author: lgcareer <[email protected]>
AuthorDate: Thu Apr 23 14:24:22 2020 +0800
[fix #2442] It will give a error tip that resource not exist exwhen update
resources. (#2483)
* fix #2442 and remove unavailable code
* revert verifyResourceName method
* Add ServiceException
* add ServiceExceptionTest
* update ServiceExceptionTest
* add ServiceExceptionTest in pom
---
.../api/exceptions/ServiceException.java | 56 +++++++++++++++++++++
.../api/service/ResourcesService.java | 58 ++++++----------------
.../api/exceptions/ServiceExceptionTest.java | 46 +++++++++++++++++
pom.xml | 1 +
4 files changed, 119 insertions(+), 42 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
new file mode 100644
index 0000000..5669e6c
--- /dev/null
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dolphinscheduler.api.exceptions;
+
+import org.apache.dolphinscheduler.api.enums.Status;
+
+
+/**
+ * service exception
+ */
+public class ServiceException extends RuntimeException {
+
+ /**
+ * code
+ */
+ private Integer code;
+
+ public ServiceException() {
+ }
+
+ public ServiceException(Status status) {
+ super(status.getMsg());
+ this.code = status.getCode();
+ }
+
+ public ServiceException(Integer code,String message) {
+ super(message);
+ this.code = code;
+ }
+
+ public ServiceException(String message) {
+ super(message);
+ }
+
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+}
\ No newline at end of file
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index c98b7c3..a2af47b 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -26,6 +26,7 @@ import
org.apache.dolphinscheduler.api.dto.resources.filter.ResourceFilter;
import
org.apache.dolphinscheduler.api.dto.resources.visitor.ResourceTreeVisitor;
import org.apache.dolphinscheduler.api.dto.resources.visitor.Visitor;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
@@ -234,9 +235,6 @@ public class ResourcesService extends BaseService {
}
Date now = new Date();
-
-
-
Resource resource = new
Resource(pid,name,fullName,false,desc,file.getOriginalFilename(),loginUser.getId(),type,file.getSize(),now,now);
try {
@@ -342,7 +340,6 @@ public class ResourcesService extends BaseService {
String originResourceName = resource.getAlias();
if (!resource.isDirectory()) {
//get the file suffix
-
String suffix =
originResourceName.substring(originResourceName.lastIndexOf("."));
//if the name without suffix then add it ,else use the origin name
@@ -352,7 +349,7 @@ public class ResourcesService extends BaseService {
}
// updateResource data
- List<Integer> childrenResource = listAllChildren(resource);
+ List<Integer> childrenResource = listAllChildren(resource,false);
String oldFullName = resource.getFullName();
Date now = new Date();
@@ -385,16 +382,16 @@ public class ResourcesService extends BaseService {
result.setData(resultMap);
} catch (Exception e) {
logger.error(Status.UPDATE_RESOURCE_ERROR.getMsg(), e);
- throw new RuntimeException(Status.UPDATE_RESOURCE_ERROR.getMsg());
+ throw new ServiceException(Status.UPDATE_RESOURCE_ERROR);
}
// if name unchanged, return directly without moving on HDFS
if (originResourceName.equals(name)) {
return result;
}
- // get file hdfs path
- // delete hdfs file by type
+ // get the path of origin file in hdfs
String originHdfsFileName =
HadoopUtils.getHdfsFileName(resource.getType(),tenantCode,originFullName);
+ // get the path of dest file in hdfs
String destHdfsFileName =
HadoopUtils.getHdfsFileName(resource.getType(),tenantCode,fullName);
try {
@@ -408,6 +405,7 @@ public class ResourcesService extends BaseService {
} catch (Exception e) {
logger.error(MessageFormat.format("hdfs copy {0} -> {1} fail",
originHdfsFileName, destHdfsFileName), e);
putMsg(result,Status.HDFS_COPY_FAIL);
+ throw new ServiceException(Status.HDFS_COPY_FAIL);
}
return result;
@@ -543,34 +541,6 @@ public class ResourcesService extends BaseService {
}
/**
- * get all resources
- * @param loginUser login user
- * @return all resource set
- */
- /*private Set<Resource> getAllResources(User loginUser, ResourceType type)
{
- int userId = loginUser.getId();
- boolean listChildren = true;
- if(isAdmin(loginUser)){
- userId = 0;
- listChildren = false;
- }
- List<Resource> resourceList =
resourcesMapper.queryResourceListAuthored(userId, type.ordinal());
- Set<Resource> allResourceList = new HashSet<>(resourceList);
- if (listChildren) {
- Set<Integer> authorizedIds = new HashSet<>();
- List<Resource> authorizedDirecoty =
resourceList.stream().filter(t->t.getUserId() != loginUser.getId() &&
t.isDirectory()).collect(Collectors.toList());
- if (CollectionUtils.isNotEmpty(authorizedDirecoty)) {
- for(Resource resource : authorizedDirecoty){
- authorizedIds.addAll(listAllChildren(resource));
- }
- List<Resource> childrenResources =
resourcesMapper.listResourceByIds(authorizedIds.toArray(new
Integer[authorizedIds.size()]));
- allResourceList.addAll(childrenResources);
- }
- }
- return allResourceList;
- }*/
-
- /**
* query resource list
*
* @param loginUser login user
@@ -580,8 +550,11 @@ public class ResourcesService extends BaseService {
public Map<String, Object> queryResourceJarList(User loginUser,
ResourceType type) {
Map<String, Object> result = new HashMap<>(5);
-
- List<Resource> allResourceList =
resourcesMapper.queryResourceListAuthored(loginUser.getId(), type.ordinal(),0);
+ int userId = loginUser.getId();
+ if(isAdmin(loginUser)){
+ userId = 0;
+ }
+ List<Resource> allResourceList =
resourcesMapper.queryResourceListAuthored(userId, type.ordinal(),0);
List<Resource> resources = new ResourceFilter(".jar",new
ArrayList<>(allResourceList)).filter();
Visitor resourceTreeVisitor = new ResourceTreeVisitor(resources);
result.put(Constants.DATA_LIST,
resourceTreeVisitor.visit().getChildren());
@@ -631,7 +604,7 @@ public class ResourcesService extends BaseService {
Map<Integer, Set<Integer>> resourceProcessMap =
ResourceProcessDefinitionUtils.getResourceProcessDefinitionMap(list);
Set<Integer> resourceIdSet = resourceProcessMap.keySet();
// get all children of the resource
- List<Integer> allChildren = listAllChildren(resource);
+ List<Integer> allChildren = listAllChildren(resource,true);
Integer[] needDeleteResourceIdArray = allChildren.toArray(new
Integer[allChildren.size()]);
//if resource type is UDF,need check whether it is bound by UDF functon
@@ -1193,12 +1166,13 @@ public class ResourcesService extends BaseService {
/**
* list all children id
- * @param resource resource
+ * @param resource resource
+ * @param containSelf whether add self to children list
* @return all children id
*/
- List<Integer> listAllChildren(Resource resource){
+ List<Integer> listAllChildren(Resource resource,boolean containSelf){
List<Integer> childList = new ArrayList<>();
- if (resource.getId() != -1) {
+ if (resource.getId() != -1 && containSelf) {
childList.add(resource.getId());
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/exceptions/ServiceExceptionTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/exceptions/ServiceExceptionTest.java
new file mode 100644
index 0000000..a574253
--- /dev/null
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/exceptions/ServiceExceptionTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dolphinscheduler.api.exceptions;
+
+import org.apache.dolphinscheduler.api.enums.Status;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ServiceExceptionTest {
+ @Test
+ public void getCodeTest(){
+ ServiceException serviceException = new ServiceException();
+ Assert.assertNull(serviceException.getCode());
+
+ serviceException = new ServiceException(Status.ALERT_GROUP_EXIST);
+ Assert.assertNotNull(serviceException.getCode());
+
+ serviceException = new ServiceException(10012, "alarm group already
exists");
+ Assert.assertNotNull(serviceException.getCode());
+ }
+ @Test
+ public void getMessageTest(){
+ ServiceException serviceException = new ServiceException();
+ Assert.assertNull(serviceException.getMessage());
+
+ serviceException = new ServiceException(Status.ALERT_GROUP_EXIST);
+ Assert.assertNotNull(serviceException.getMessage());
+
+ serviceException = new ServiceException(10012, "alarm group already
exists");
+ Assert.assertNotNull(serviceException.getMessage());
+ }
+}
diff --git a/pom.xml b/pom.xml
index 053652f..8f81e2a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -695,6 +695,7 @@
<include>**/api/enums/testGetEnum.java</include>
<include>**/api/enums/StatusTest.java</include>
<include>**/api/exceptions/ApiExceptionHandlerTest.java</include>
+
<include>**/api/exceptions/ServiceExceptionTest.java</include>
<include>**/api/interceptor/LoginHandlerInterceptorTest.java</include>
<include>**/api/security/PasswordAuthenticatorTest.java</include>
<include>**/api/security/SecurityConfigTest.java</include>