aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2025-11-04 13:17:36 +0500
committerKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2025-11-04 13:17:36 +0500
commit8d768885c5e336bb5aee257dc2b8666ab3fc456f (patch)
treeca9b7fba8144d09fe5136e332b4fbe620c45d193
parentd1b5d95d842bf446fa7de0d6ac69a94d1777c4ed (diff)
downloadseaweedfs-8d768885c5e336bb5aee257dc2b8666ab3fc456f.tar.xz
seaweedfs-8d768885c5e336bb5aee257dc2b8666ab3fc456f.zip
move s3 delete expired entry to filer
-rw-r--r--weed/filer/filer.go7
-rw-r--r--weed/s3api/filer_multipart.go3
-rw-r--r--weed/s3api/s3api_object_handlers.go5
-rw-r--r--weed/s3api/s3api_object_handlers_list.go6
4 files changed, 9 insertions, 12 deletions
diff --git a/weed/filer/filer.go b/weed/filer/filer.go
index 6f498ce58..b61da85f6 100644
--- a/weed/filer/filer.go
+++ b/weed/filer/filer.go
@@ -372,7 +372,12 @@ func (f *Filer) doListDirectoryEntries(ctx context.Context, p util.FullPath, sta
return false
default:
if entry.TtlSec > 0 {
- if entry.Crtime.Add(time.Duration(entry.TtlSec) * time.Second).Before(time.Now()) {
+ if entry.IsExpireS3Enabled() {
+ if entry.GetS3ExpireTime().Before(time.Now()) {
+ f.Store.DeleteOneEntry(ctx, entry)
+ return true
+ }
+ } else if entry.Crtime.Add(time.Duration(entry.TtlSec) * time.Second).Before(time.Now()) {
f.Store.DeleteOneEntry(ctx, entry)
expiredCount++
return true
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
index cb4c73692..946e9b798 100644
--- a/weed/s3api/filer_multipart.go
+++ b/weed/s3api/filer_multipart.go
@@ -468,6 +468,9 @@ func (s3a *S3ApiServer) completeMultipartUpload(r *http.Request, input *s3.Compl
entry.Attributes.Mime = mime
}
entry.Attributes.FileSize = uint64(offset)
+ if s3a.option.AllowDeleteObjectsByTTL && entry.Attributes.TtlSec > 0 {
+ entry.Extended[s3_constants.SeaweedFSExpiresS3] = []byte("true")
+ }
})
if err != nil {
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go
index a7b6ed736..b6c04dcd7 100644
--- a/weed/s3api/s3api_object_handlers.go
+++ b/weed/s3api/s3api_object_handlers.go
@@ -348,11 +348,6 @@ func (s3a *S3ApiServer) GetObjectHandler(w http.ResponseWriter, r *http.Request)
// Add object lock metadata to response headers if present
s3a.addObjectLockHeadersToResponse(w, entry)
} else {
- if s3a.option.AllowDeleteObjectsByTTL && entry.IsExpired() {
- s3err.WriteErrorResponse(w, r, s3err.ErrNoSuchKey)
- s3a.removeExpiredObject(w, r, entry, bucket, object)
- return
- }
// Handle regular GET (non-versioned)
destUrl = s3a.toFilerUrl(bucket, object)
}
diff --git a/weed/s3api/s3api_object_handlers_list.go b/weed/s3api/s3api_object_handlers_list.go
index f6d24bc95..9e6376a0e 100644
--- a/weed/s3api/s3api_object_handlers_list.go
+++ b/weed/s3api/s3api_object_handlers_list.go
@@ -303,12 +303,6 @@ func (s3a *S3ApiServer) listFilerEntries(bucket string, originalPrefix string, m
}
}
}
- if s3a.option.AllowDeleteObjectsByTTL && entry.IsExpired() {
- if delErr := doDeleteEntry(client, dirName, entryName, true, false); delErr != nil {
- glog.Errorf("delete expired entries %s/%s: %v", dirName, entryName, delErr)
- }
- return
- }
if !delimiterFound {
contents = append(contents, newListEntry(entry, "", dirName, entryName, bucketPrefix, fetchOwner, false, false, s3a.iam))
cursor.maxKeys--