Browse Source

Fix remote.meta.sync TTL issue (#8021) (#8030)

* Fix remote.meta.sync TTL issue (#8021)

Remote entries should not have TTL applied because they represent files
in remote storage, not local SeaweedFS files. When TTL was configured on
a prefix, remote.meta.sync would create entries that immediately expired,
causing them to be deleted and recreated on each sync.

Changes:
- Set TtlSec=0 explicitly when creating remote entries in remote.meta.sync
- Skip TTL application in CreateEntry handler for entries with Remote field set

Fixes #8021

* Add TTL protection for remote entries in update path

- Set TtlSec=0 in doSaveRemoteEntry before calling UpdateEntry
- Add server-side TTL protection in UpdateEntry handler for remote entries
- Ensures remote entries don't inherit or preserve TTL when updated
fix-s3-configure-consistency
Chris Lu 1 day ago
committed by GitHub
parent
commit
f47bc8c539
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 12
      weed/server/filer_grpc_server.go
  2. 1
      weed/shell/command_remote_meta_sync.go
  3. 1
      weed/shell/command_remote_mount.go

12
weed/server/filer_grpc_server.go

@ -153,7 +153,12 @@ func (fs *FilerServer) CreateEntry(ctx context.Context, req *filer_pb.CreateEntr
}
newEntry := filer.FromPbEntry(req.Directory, req.Entry)
newEntry.Chunks = chunks
newEntry.TtlSec = so.TtlSeconds
// Don't apply TTL to remote entries - they're managed by remote storage
if newEntry.Remote == nil {
newEntry.TtlSec = so.TtlSeconds
} else {
newEntry.TtlSec = 0
}
createErr := fs.filer.CreateEntry(ctx, newEntry, req.OExcl, req.IsFromOtherCluster, req.Signatures, req.SkipCheckParentDirectory, so.MaxFileNameLength)
@ -185,6 +190,11 @@ func (fs *FilerServer) UpdateEntry(ctx context.Context, req *filer_pb.UpdateEntr
newEntry := filer.FromPbEntry(req.Directory, req.Entry)
newEntry.Chunks = chunks
// Don't apply TTL to remote entries - they're managed by remote storage
if newEntry.Remote != nil {
newEntry.TtlSec = 0
}
if filer.EqualEntry(entry, newEntry) {
return &filer_pb.UpdateEntryResponse{}, err
}

1
weed/shell/command_remote_meta_sync.go

@ -160,6 +160,7 @@ func pullMetadata(commandEnv *CommandEnv, writer io.Writer, localMountedDir util
FileSize: uint64(remoteEntry.RemoteSize),
Mtime: remoteEntry.RemoteMtime,
FileMode: uint32(0644),
TtlSec: 0, // Remote entries should not have TTL
},
RemoteEntry: remoteEntry,
},

1
weed/shell/command_remote_mount.go

@ -188,6 +188,7 @@ func doSaveRemoteEntry(client filer_pb.SeaweedFilerClient, localDir string, exis
existingEntry.Attributes.FileSize = uint64(remoteEntry.RemoteSize)
existingEntry.Attributes.Mtime = remoteEntry.RemoteMtime
existingEntry.Attributes.Md5 = nil
existingEntry.Attributes.TtlSec = 0 // Remote entries should not have TTL
existingEntry.Chunks = nil
existingEntry.Content = nil
_, updateErr := client.UpdateEntry(context.Background(), &filer_pb.UpdateEntryRequest{

Loading…
Cancel
Save