aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2024-01-03 22:52:51 +0500
committerGitHub <noreply@github.com>2024-01-03 09:52:51 -0800
commit3e43778869ccbb1ddab207e48f58e5be5d37fd53 (patch)
tree1be0a4db7dea726195117a6dd283f329d0a04fdc
parentb832ddd1ef949a99f60f4bf1fd321b70ee592626 (diff)
downloadseaweedfs-3e43778869ccbb1ddab207e48f58e5be5d37fd53.tar.xz
seaweedfs-3e43778869ccbb1ddab207e48f58e5be5d37fd53.zip
fix: webdav avoid create empty files (#5160)
-rw-r--r--weed/server/webdav_server.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/weed/server/webdav_server.go b/weed/server/webdav_server.go
index 217caa59b..c4b1a1c03 100644
--- a/weed/server/webdav_server.go
+++ b/weed/server/webdav_server.go
@@ -241,7 +241,7 @@ func (fs *WebDavFileSystem) OpenFile(ctx context.Context, fullFilePath string, f
Name: name,
IsDirectory: perm&os.ModeDir > 0,
Attributes: &filer_pb.FuseAttributes{
- Mtime: time.Now().Unix(),
+ Mtime: 0,
Crtime: time.Now().Unix(),
FileMode: uint32(perm),
Uid: fs.option.Uid,
@@ -429,12 +429,13 @@ func (f *WebDavFile) Write(buf []byte) (int, error) {
glog.V(2).Infof("WebDavFileSystem.Write %v", f.name)
- dir, _ := util.FullPath(f.name).DirAndName()
+ fullPath := util.FullPath(f.name)
+ dir, _ := fullPath.DirAndName()
var getErr error
ctx := context.Background()
if f.entry == nil {
- f.entry, getErr = filer_pb.GetEntry(f.fs, util.FullPath(f.name))
+ f.entry, getErr = filer_pb.GetEntry(f.fs, fullPath)
}
if f.entry == nil {
@@ -451,6 +452,11 @@ func (f *WebDavFile) Write(buf []byte) (int, error) {
chunk, flushErr = f.saveDataAsChunk(util.NewBytesReader(data), f.name, offset, time.Now().UnixNano())
if flushErr != nil {
+ if f.entry.Attributes.Mtime == 0 {
+ if err := f.fs.removeAll(ctx, f.name); err != nil {
+ glog.Errorf("bufWriter.Flush remove file error: %+v", f.name)
+ }
+ }
return fmt.Errorf("%s upload result: %v", f.name, flushErr)
}