From 0e8a54f6f67e534d3af01d70ce45bd9cbfe87d42 Mon Sep 17 00:00:00 2001 From: skycope Date: Fri, 12 Jan 2024 12:23:46 +0800 Subject: [PATCH] fix write volume over size MaxPossibleVolumeSize (#5190) Co-authored-by: Yang Wang --- weed/storage/needle/needle_write.go | 2 +- weed/storage/volume_write.go | 13 ------------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/weed/storage/needle/needle_write.go b/weed/storage/needle/needle_write.go index 60b6e7adb..6546f35a6 100644 --- a/weed/storage/needle/needle_write.go +++ b/weed/storage/needle/needle_write.go @@ -127,7 +127,7 @@ func (n *Needle) Append(w backend.BackendStorageFile, version Version) (offset u err = fmt.Errorf("Cannot Read Current Volume Position: %v", e) return } - if offset >= MaxPossibleVolumeSize && n.Size.IsValid() { + if offset >= MaxPossibleVolumeSize && len(n.Data) != 0 { err = fmt.Errorf("Volume Size %d Exceeded %d", offset, MaxPossibleVolumeSize) return } diff --git a/weed/storage/volume_write.go b/weed/storage/volume_write.go index 56010cea2..8b731e028 100644 --- a/weed/storage/volume_write.go +++ b/weed/storage/volume_write.go @@ -107,16 +107,9 @@ func (v *Volume) asyncRequestAppend(request *needle.AsyncRequest) { func (v *Volume) syncWrite(n *needle.Needle, checkCookie bool) (offset uint64, size Size, isUnchanged bool, err error) { // glog.V(4).Infof("writing needle %s", needle.NewFileIdFromNeedle(v.Id, n).String()) - actualSize := needle.GetActualSize(Size(len(n.Data)), v.Version()) - v.dataFileAccessLock.Lock() defer v.dataFileAccessLock.Unlock() - if MaxPossibleVolumeSize < v.nm.ContentSize()+uint64(actualSize) { - err = fmt.Errorf("volume size limit %d exceeded! current size is %d", MaxPossibleVolumeSize, v.nm.ContentSize()) - return - } - return v.doWriteRequest(n, checkCookie) } @@ -193,7 +186,6 @@ func (v *Volume) doWriteRequest(n *needle.Needle, checkCookie bool) (offset uint func (v *Volume) syncDelete(n *needle.Needle) (Size, error) { // glog.V(4).Infof("delete needle %s", needle.NewFileIdFromNeedle(v.Id, n).String()) - actualSize := needle.GetActualSize(0, v.Version()) v.dataFileAccessLock.Lock() defer v.dataFileAccessLock.Unlock() @@ -201,11 +193,6 @@ func (v *Volume) syncDelete(n *needle.Needle) (Size, error) { return 0, nil } - if MaxPossibleVolumeSize < v.nm.ContentSize()+uint64(actualSize) { - err := fmt.Errorf("volume size limit %d exceeded! current size is %d", MaxPossibleVolumeSize, v.nm.ContentSize()) - return 0, err - } - return v.doDeleteRequest(n) }