mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-14 18:40:48 +02:00
Ensure the .versions directory exists before uploading
This commit is contained in:
@@ -566,6 +566,17 @@ func (s3a *S3ApiServer) putVersionedObject(r *http.Request, bucket, object strin
|
||||
versionObjectPath := object + ".versions/" + versionFileName
|
||||
versionUploadUrl := s3a.toFilerUrl(bucket, versionObjectPath)
|
||||
|
||||
// Ensure the .versions directory exists before uploading
|
||||
bucketDir := s3a.option.BucketsPath + "/" + bucket
|
||||
versionsDir := object + ".versions"
|
||||
err := s3a.mkdir(bucketDir, versionsDir, func(entry *filer_pb.Entry) {
|
||||
entry.Attributes.Mime = s3_constants.FolderMimeType
|
||||
})
|
||||
if err != nil {
|
||||
glog.Errorf("putVersionedObject: failed to create .versions directory: %v", err)
|
||||
return "", "", s3err.ErrInternalError
|
||||
}
|
||||
|
||||
hash := md5.New()
|
||||
var body = io.TeeReader(dataReader, hash)
|
||||
if objectContentType == "" {
|
||||
@@ -636,25 +647,11 @@ func (s3a *S3ApiServer) updateLatestVersionInDirectory(bucket, object, versionId
|
||||
bucketDir := s3a.option.BucketsPath + "/" + bucket
|
||||
versionsObjectPath := object + ".versions"
|
||||
|
||||
// Get the current .versions directory entry, create if it doesn't exist
|
||||
// Get the current .versions directory entry
|
||||
versionsEntry, err := s3a.getEntry(bucketDir, versionsObjectPath)
|
||||
if err != nil {
|
||||
glog.V(2).Infof("updateLatestVersionInDirectory: .versions directory doesn't exist for %s/%s, creating it", bucket, object)
|
||||
// Create the .versions directory if it doesn't exist
|
||||
err = s3a.mkdir(bucketDir, versionsObjectPath, func(entry *filer_pb.Entry) {
|
||||
entry.Attributes.Mime = s3_constants.FolderMimeType
|
||||
if entry.Extended == nil {
|
||||
entry.Extended = make(map[string][]byte)
|
||||
}
|
||||
entry.Extended[s3_constants.ExtLatestVersionIdKey] = []byte(versionId)
|
||||
entry.Extended[s3_constants.ExtLatestVersionFileNameKey] = []byte(versionFileName)
|
||||
})
|
||||
if err != nil {
|
||||
glog.Errorf("updateLatestVersionInDirectory: failed to create .versions directory: %v", err)
|
||||
return fmt.Errorf("failed to create .versions directory: %w", err)
|
||||
}
|
||||
glog.V(2).Infof("updateLatestVersionInDirectory: created .versions directory for %s/%s with version %s", bucket, object, versionId)
|
||||
return nil
|
||||
glog.Errorf("updateLatestVersionInDirectory: failed to get .versions directory for %s/%s: %v", bucket, object, err)
|
||||
return fmt.Errorf("failed to get .versions directory: %w", err)
|
||||
}
|
||||
|
||||
// Add or update the latest version metadata
|
||||
|
||||
Reference in New Issue
Block a user