From 9866287d8d3f50f6ad5fefc003e7651f67737607 Mon Sep 17 00:00:00 2001 From: chrislu Date: Wed, 5 Nov 2025 16:31:17 -0800 Subject: [PATCH] s3 TTL time --- weed/pb/filer_pb/filer_pb_helper.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/weed/pb/filer_pb/filer_pb_helper.go b/weed/pb/filer_pb/filer_pb_helper.go index 3ce494716..c8dd19d59 100644 --- a/weed/pb/filer_pb/filer_pb_helper.go +++ b/weed/pb/filer_pb/filer_pb_helper.go @@ -9,6 +9,7 @@ import ( "time" "github.com/seaweedfs/seaweedfs/weed/glog" + "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" "github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/viant/ptrie" "google.golang.org/protobuf/proto" @@ -25,11 +26,22 @@ func (entry *Entry) IsDirectoryKeyObject() bool { } func (entry *Entry) GetExpiryTime() (expiryTime int64) { - expiryTime = entry.Attributes.Mtime - if expiryTime == 0 { - expiryTime = entry.Attributes.Crtime + // For S3 objects with lifecycle expiration, use Mtime (modification time) + // For regular TTL entries, use Crtime (creation time) for backward compatibility + if entry.Extended != nil { + if _, hasS3Expiry := entry.Extended[s3_constants.SeaweedFSExpiresS3]; hasS3Expiry { + // S3 lifecycle expiration: base TTL on modification time + expiryTime = entry.Attributes.Mtime + if expiryTime == 0 { + expiryTime = entry.Attributes.Crtime + } + expiryTime += int64(entry.Attributes.TtlSec) + return expiryTime + } } - expiryTime += int64(entry.Attributes.TtlSec) + + // Regular TTL expiration: base on creation time only + expiryTime = entry.Attributes.Crtime + int64(entry.Attributes.TtlSec) return expiryTime }