You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@samza.apache.org by pm...@apache.org on 2023/03/23 16:28:32 UTC

[samza] branch master updated: Only verify permissions for file owner after blob store restore. (#1659)

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

pmaheshwari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/samza.git


The following commit(s) were added to refs/heads/master by this push:
     new 03b187a6d Only verify permissions for file owner after blob store restore. (#1659)
03b187a6d is described below

commit 03b187a6de0e123568f3ce3af94c946e6380fc8d
Author: Prateek Maheshwari <pr...@utexas.edu>
AuthorDate: Thu Mar 23 09:28:24 2023 -0700

    Only verify permissions for file owner after blob store restore. (#1659)
---
 .../samza/storage/blobstore/util/DirDiffUtil.java   | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/samza-core/src/main/java/org/apache/samza/storage/blobstore/util/DirDiffUtil.java b/samza-core/src/main/java/org/apache/samza/storage/blobstore/util/DirDiffUtil.java
index f09b56f8a..4313d56b4 100644
--- a/samza-core/src/main/java/org/apache/samza/storage/blobstore/util/DirDiffUtil.java
+++ b/samza-core/src/main/java/org/apache/samza/storage/blobstore/util/DirDiffUtil.java
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.attribute.PosixFileAttributes;
+import java.nio.file.attribute.PosixFilePermission;
 import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -159,17 +160,27 @@ public class DirDiffUtil {
           throw new RuntimeException(String.format("Error reading attributes for file: %s", localFile.getAbsolutePath()));
         }
 
+        Set<PosixFilePermission> remoteFilePermissions =
+            PosixFilePermissions.fromString(remoteFileMetadata.getPermissions());
+
         // Don't compare file timestamps. The ctime of a local file just restored will be different than the
         // remote file, and will cause the file to be uploaded again during the first commit after restore.
-
         boolean areSameFiles =
             localFileAttrs.size() == remoteFileMetadata.getSize() &&
                 localFileAttrs.group().getName().equals(remoteFileMetadata.getGroup()) &&
-                localFileAttrs.owner().getName().equals(remoteFileMetadata.getOwner()) &&
-                PosixFilePermissions.toString(localFileAttrs.permissions()).equals(remoteFileMetadata.getPermissions());
+                localFileAttrs.owner().getName().equals(remoteFileMetadata.getOwner());
+
+        // only verify permissions for file owner
+        areSameFiles = areSameFiles &&
+            localFileAttrs.permissions().contains(PosixFilePermission.OWNER_READ) ==
+                remoteFilePermissions.contains(PosixFilePermission.OWNER_READ) &&
+            localFileAttrs.permissions().contains(PosixFilePermission.OWNER_WRITE) ==
+                remoteFilePermissions.contains(PosixFilePermission.OWNER_WRITE) &&
+            localFileAttrs.permissions().contains(PosixFilePermission.OWNER_EXECUTE) ==
+                remoteFilePermissions.contains(PosixFilePermission.OWNER_EXECUTE);
 
         if (!areSameFiles) {
-          LOG.debug("Local file: {} and remote file: {} are not same. " +
+          LOG.warn("Local file: {} and remote file: {} are not same. " +
                   "Local file attributes: {}. Remote file attributes: {}.",
               localFile.getAbsolutePath(), remoteFile.getFileName(),
               fileAttributesToString(localFileAttrs), remoteFile.getFileMetadata().toString());
@@ -200,7 +211,7 @@ public class DirDiffUtil {
 
             boolean areSameChecksum = localFileChecksum == remoteFile.getChecksum();
             if (!areSameChecksum) {
-              LOG.debug("Local file: {} and remote file: {} are not same. " +
+              LOG.warn("Local file: {} and remote file: {} are not same. " +
                       "Local checksum: {}. Remote checksum: {}",
                   localFile.getAbsolutePath(), remoteFile.getFileName(), localFileChecksum, remoteFile.getChecksum());
             } else {