|
@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import org.apache.dolphinscheduler.api.dto.resources.ResourceComponent;
|
|
|
import org.apache.dolphinscheduler.api.dto.resources.visitor.ResourceTreeVisitor;
|
|
|
import org.apache.dolphinscheduler.api.enums.Status;
|
|
|
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
|
|
|
import org.apache.dolphinscheduler.api.utils.CheckUtils;
|
|
|
import org.apache.dolphinscheduler.api.utils.PageInfo;
|
|
|
import org.apache.dolphinscheduler.api.utils.Result;
|
|
@@ -37,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -338,9 +340,7 @@ public class UsersService extends BaseService {
|
|
|
if (CollectionUtils.isNotEmpty(fileResourcesList)) {
|
|
|
ResourceTreeVisitor resourceTreeVisitor = new ResourceTreeVisitor(fileResourcesList);
|
|
|
ResourceComponent resourceComponent = resourceTreeVisitor.visit();
|
|
|
- for (ResourceComponent resource : resourceComponent.getChildren()) {
|
|
|
- HadoopUtils.getInstance().copy(oldResourcePath + "/" + resource.getName(), newResourcePath, false, true);
|
|
|
- }
|
|
|
+ copyResourceFiles(resourceComponent, oldResourcePath, newResourcePath);
|
|
|
}
|
|
|
|
|
|
//udf resources
|
|
@@ -349,9 +349,7 @@ public class UsersService extends BaseService {
|
|
|
if (CollectionUtils.isNotEmpty(udfResourceList)) {
|
|
|
ResourceTreeVisitor resourceTreeVisitor = new ResourceTreeVisitor(udfResourceList);
|
|
|
ResourceComponent resourceComponent = resourceTreeVisitor.visit();
|
|
|
- for (ResourceComponent resource : resourceComponent.getChildren()) {
|
|
|
- HadoopUtils.getInstance().copy(oldUdfsPath + "/" + resource.getName(), newUdfsPath, false, true);
|
|
|
- }
|
|
|
+ copyResourceFiles(resourceComponent, oldUdfsPath, newUdfsPath);
|
|
|
}
|
|
|
|
|
|
//Delete the user from the old tenant directory
|
|
@@ -871,4 +869,40 @@ public class UsersService extends BaseService {
|
|
|
|
|
|
return msg;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * copy resource files
|
|
|
+ * @param resourceComponent resource component
|
|
|
+ * @param srcBasePath src base path
|
|
|
+ * @param dstBasePath dst base path
|
|
|
+ * @throws IOException io exception
|
|
|
+ */
|
|
|
+ private void copyResourceFiles(ResourceComponent resourceComponent, String srcBasePath, String dstBasePath) throws IOException {
|
|
|
+ List<ResourceComponent> components = resourceComponent.getChildren();
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(components)) {
|
|
|
+ for (ResourceComponent component:components) {
|
|
|
+ // verify whether exist
|
|
|
+ if (!HadoopUtils.getInstance().exists(String.format("%s/%s",srcBasePath,component.getFullName()))){
|
|
|
+ logger.error("resource file: {} not exist,copy error",component.getFullName());
|
|
|
+ throw new ServiceException(Status.RESOURCE_NOT_EXIST);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!component.isDirctory()) {
|
|
|
+ // copy it to dst
|
|
|
+ HadoopUtils.getInstance().copy(String.format("%s/%s",srcBasePath,component.getFullName()),String.format("%s/%s",dstBasePath,component.getFullName()),false,true);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(component.getChildren())) {
|
|
|
+ // if not exist,need create it
|
|
|
+ if (!HadoopUtils.getInstance().exists(String.format("%s/%s",dstBasePath,component.getFullName()))) {
|
|
|
+ HadoopUtils.getInstance().mkdir(String.format("%s/%s",dstBasePath,component.getFullName()));
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ copyResourceFiles(component,srcBasePath,dstBasePath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|