You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by ab...@apache.org on 2026/03/06 07:13:45 UTC
(gobblin) branch master updated: Skip Permission Check for files existing in target, (#4162)
This is an automated email from the ASF dual-hosted git repository.
abhijain pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git
The following commit(s) were added to refs/heads/master by this push:
new 1c875ce798 Skip Permission Check for files existing in target, (#4162)
1c875ce798 is described below
commit 1c875ce7982851779abb711136a421df1f1bec6c
Author: Vyom Aggarwal <ag...@gmail.com>
AuthorDate: Thu Mar 5 23:13:38 2026 -0800
Skip Permission Check for files existing in target, (#4162)
- Added skipPermissionCheck flag to skip I/O operations for files that already exist in the target location
- When enabled, skips expensive file status checks and permission resolutions for existing files
- Improves performance for discovery by avoiding unnecessary I/O operations
- Disabled by default to maintain backward compatibility
---
.../apache/gobblin/data/management/copy/ManifestBasedDataset.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/ManifestBasedDataset.java b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/ManifestBasedDataset.java
index 531f506bf8..cab65f1275 100644
--- a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/ManifestBasedDataset.java
+++ b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/ManifestBasedDataset.java
@@ -69,8 +69,10 @@ public class ManifestBasedDataset implements IterableCopyableDataset {
// Enable setting permission post publish to reset permission bits, default is true
private static final String ENABLE_SET_PERMISSION_POST_PUBLISH = ManifestBasedDatasetFinder.CONFIG_PREFIX + ".enableSetPermissionPostPublish";
+ public static final String SKIP_PERMISSION_CHECK = ManifestBasedDatasetFinder.CONFIG_PREFIX + ".skipPermissionCheck";
private static final String DEFAULT_PERMISSION_CACHE_TTL_SECONDS = "30";
private static final String DEFAULT_COMMON_FILES_PARENT = "/";
+ private static final boolean DEFAULT_SKIP_PERMISSION_CHECK = false;
private final FileSystem srcFs;
private final FileSystem manifestReadFs;
private final Path manifestPath;
@@ -80,6 +82,7 @@ public class ManifestBasedDataset implements IterableCopyableDataset {
private final int permissionCacheTTLSeconds;
private final boolean enableSetPermissionPostPublish;
+ private final boolean skipPermissionCheck;
public ManifestBasedDataset(final FileSystem srcFs, final FileSystem manifestReadFs, final Path manifestPath, final Properties properties) {
this.srcFs = srcFs;
@@ -90,6 +93,7 @@ public class ManifestBasedDataset implements IterableCopyableDataset {
this.commonFilesParent = properties.getProperty(COMMON_FILES_PARENT, DEFAULT_COMMON_FILES_PARENT);
this.permissionCacheTTLSeconds = Integer.parseInt(properties.getProperty(PERMISSION_CACHE_TTL_SECONDS, DEFAULT_PERMISSION_CACHE_TTL_SECONDS));
this.enableSetPermissionPostPublish = Boolean.parseBoolean(properties.getProperty(ENABLE_SET_PERMISSION_POST_PUBLISH, "true"));
+ this.skipPermissionCheck = Boolean.parseBoolean(properties.getProperty(SKIP_PERMISSION_CHECK, String.valueOf(DEFAULT_SKIP_PERMISSION_CHECK)));
}
@Override
@@ -132,6 +136,10 @@ public class ManifestBasedDataset implements IterableCopyableDataset {
Path fileToCopy = new Path(file.fileName);
if (srcFs.exists(fileToCopy)) {
boolean existOnTarget = targetFs.exists(fileToCopy);
+ if (this.skipPermissionCheck && existOnTarget) {
+ // Skip Permission Check for files that already exist in the target when skipPermissionCheck is true
+ continue;
+ }
FileStatus srcFile = srcFs.getFileStatus(fileToCopy);
OwnerAndPermission replicatedPermission = CopyableFile.resolveReplicatedOwnerAndPermission(srcFs, srcFile, configuration);
if (!existOnTarget || shouldCopy(targetFs, srcFile, targetFs.getFileStatus(fileToCopy), replicatedPermission)) {