This is an automated email from the ASF dual-hosted git repository.

weiraowang 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 93b0283dfe Set tenant as the the resource file owner (#13832)
93b0283dfe is described below

commit 93b0283dfe916a091cf24556eb2b03e6a8732ef5
Author: Wenjun Ruan <[email protected]>
AuthorDate: Fri Aug 11 00:57:47 2023 +0800

    Set tenant as the the resource file owner (#13832)
---
 .../dolphinscheduler/common/utils/FileUtils.java   | 28 ++++++++++++++
 .../worker/utils/TaskExecutionCheckerUtils.java    | 44 +++++-----------------
 2 files changed, 37 insertions(+), 35 deletions(-)

diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
index 463071a8b0..513da9b48e 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/FileUtils.java
@@ -25,6 +25,8 @@ import static 
org.apache.dolphinscheduler.common.constants.Constants.RESOURCE_VI
 import static org.apache.dolphinscheduler.common.constants.Constants.UTF_8;
 import static 
org.apache.dolphinscheduler.common.constants.DateConstants.YYYYMMDDHHMMSS;
 
+import org.apache.dolphinscheduler.common.constants.TenantConstants;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.SystemUtils;
 
@@ -35,12 +37,15 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.attribute.FileAttribute;
 import java.nio.file.attribute.PosixFilePermission;
 import java.nio.file.attribute.PosixFilePermissions;
+import java.nio.file.attribute.UserPrincipal;
+import java.nio.file.attribute.UserPrincipalLookupService;
 import java.util.Set;
 import java.util.zip.CRC32;
 import java.util.zip.CheckedInputStream;
@@ -323,6 +328,29 @@ public class FileUtils {
         return crcString;
     }
 
+    public static void setFileOwner(Path path, String tenant) {
+        try {
+            if (TenantConstants.DEFAULT_TENANT_CODE.equals(tenant)) {
+                log.debug("The current tenant: {} is the default tenant, no 
need to set the owner for file: {}", tenant,
+                        path);
+                return;
+            }
+            UserPrincipalLookupService userPrincipalLookupService =
+                    FileSystems.getDefault().getUserPrincipalLookupService();
+            UserPrincipal tenantPrincipal = 
userPrincipalLookupService.lookupPrincipalByName(tenant);
+            Files.setOwner(path, tenantPrincipal);
+        } catch (IOException e) {
+            log.error("Set file: {} owner to: {} failed", path, tenant, e);
+        }
+    }
+
+    public static void createDirectoryIfNotPresent(Path path) throws 
IOException {
+        if (Files.exists(path)) {
+            return;
+        }
+        Files.createDirectories(path);
+    }
+
     /**
      * Create a file with '755'.
      */
diff --git 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionCheckerUtils.java
 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionCheckerUtils.java
index c65f376039..a8beaa8356 100644
--- 
a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionCheckerUtils.java
+++ 
b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/utils/TaskExecutionCheckerUtils.java
@@ -34,13 +34,9 @@ import org.apache.commons.lang3.SystemUtils;
 import org.apache.commons.lang3.tuple.Pair;
 
 import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.attribute.UserPrincipal;
-import java.nio.file.attribute.UserPrincipalLookupService;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -97,9 +93,9 @@ public class TaskExecutionCheckerUtils {
             taskExecutionContext.setExecutePath(execLocalPath);
             
taskExecutionContext.setAppInfoPath(FileUtils.getAppInfoPath(execLocalPath));
             Path executePath = 
Paths.get(taskExecutionContext.getExecutePath());
-            createDirectory(executePath);
-            if 
(!TenantConstants.DEFAULT_TENANT_CODE.equals(taskExecutionContext.getTenantCode()))
 {
-                setOwner(executePath, taskExecutionContext.getTenantCode());
+            FileUtils.createDirectoryIfNotPresent(executePath);
+            if (OSUtils.isSudoEnable()) {
+                FileUtils.setFileOwner(executePath, 
taskExecutionContext.getTenantCode());
             }
         } catch (Throwable ex) {
             throw new TaskException("Cannot create process execute dir", ex);
@@ -126,7 +122,7 @@ public class TaskExecutionCheckerUtils {
             if (notExist) {
                 downloadFiles.add(Pair.of(fullName, fileName));
             } else {
-                log.info("file : {} exists ", resFile.getName());
+                log.warn("Resource file : {} already exists will not download 
again ", resFile.getName());
             }
         });
         if (!downloadFiles.isEmpty() && 
!PropertyUtils.isResourceStorageStartup()) {
@@ -141,8 +137,11 @@ public class TaskExecutionCheckerUtils {
                     log.info("get resource file from path:{}", fullName);
 
                     long resourceDownloadStartTime = 
System.currentTimeMillis();
-                    storageOperate.download(actualTenant, fullName,
-                            execLocalPath + File.separator + fileName, true);
+                    storageOperate.download(actualTenant, fullName, 
execLocalPath + File.separator + fileName, true);
+                    if (OSUtils.isSudoEnable()) {
+                        FileUtils.setFileOwner(Paths.get(execLocalPath, 
fileName),
+                                taskExecutionContext.getTenantCode());
+                    }
                     WorkerServerMetrics
                             
.recordWorkerResourceDownloadTime(System.currentTimeMillis() - 
resourceDownloadStartTime);
                     WorkerServerMetrics.recordWorkerResourceDownloadSize(
@@ -156,29 +155,4 @@ public class TaskExecutionCheckerUtils {
         }
     }
 
-    private static void createDirectory(Path filePath) {
-        if (Files.exists(filePath)) {
-            return;
-        }
-        try {
-            Files.createDirectories(filePath);
-        } catch (IOException e) {
-            throw new TaskException("Create directory " + filePath + " failed 
", e);
-        }
-    }
-
-    private static void setOwner(Path filePath, String tenant) {
-        try {
-            if (!OSUtils.isSudoEnable()) {
-                // we need to open sudo, then we can change the owner.
-                return;
-            }
-            UserPrincipalLookupService userPrincipalLookupService =
-                    FileSystems.getDefault().getUserPrincipalLookupService();
-            UserPrincipal tenantPrincipal = 
userPrincipalLookupService.lookupPrincipalByName(tenant);
-            Files.setOwner(filePath, tenantPrincipal);
-        } catch (IOException e) {
-            throw new TaskException("Set tenant directory " + filePath + " 
permission failed, tenant: " + tenant, e);
-        }
-    }
 }

Reply via email to