From cc012235351fd466fd02ee1092ecb656d583f651 Mon Sep 17 00:00:00 2001 From: Janne Hellsten Date: Tue, 4 Apr 2023 18:19:16 +0300 Subject: [PATCH] fs: Implement PartialUploads feature flag Implement a Partialuploads feature flag to mark backends for which uploads are not atomic. This is set for the following backends - local - ftp - sftp See #3770 --- backend/ftp/ftp.go | 1 + backend/local/local.go | 1 + backend/sftp/sftp.go | 1 + fs/features.go | 1 + 4 files changed, 4 insertions(+) diff --git a/backend/ftp/ftp.go b/backend/ftp/ftp.go index 7aa9935c5..7db6437e3 100644 --- a/backend/ftp/ftp.go +++ b/backend/ftp/ftp.go @@ -580,6 +580,7 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (ff fs.Fs } f.features = (&fs.Features{ CanHaveEmptyDirectories: true, + PartialUploads: true, }).Fill(ctx, f) // set the pool drainer timer going if f.opt.IdleTimeout > 0 { diff --git a/backend/local/local.go b/backend/local/local.go index 4acb1b788..a83a3c455 100644 --- a/backend/local/local.go +++ b/backend/local/local.go @@ -303,6 +303,7 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e WriteMetadata: true, UserMetadata: xattrSupported, // can only R/W general purpose metadata if xattrs are supported FilterAware: true, + PartialUploads: true, }).Fill(ctx, f) if opt.FollowSymlinks { f.lstat = os.Stat diff --git a/backend/sftp/sftp.go b/backend/sftp/sftp.go index 6338534bf..6127a2333 100644 --- a/backend/sftp/sftp.go +++ b/backend/sftp/sftp.go @@ -994,6 +994,7 @@ func NewFsWithConnection(ctx context.Context, f *Fs, name string, root string, m f.features = (&fs.Features{ CanHaveEmptyDirectories: true, SlowHash: true, + PartialUploads: true, }).Fill(ctx, f) // Make a connection and pool it to return errors early c, err := f.getSftpConnection(ctx) diff --git a/fs/features.go b/fs/features.go index 8a85c0226..5820b1178 100644 --- a/fs/features.go +++ b/fs/features.go @@ -30,6 +30,7 @@ type Features struct { WriteMetadata bool // can write metadata to objects UserMetadata bool // can read/write general purpose metadata FilterAware bool // can make use of filters if provided for listing + PartialUploads bool // uploaded file can appear incomplete on the fs while it's being uploaded // Purge all files in the directory specified //