|
|
|
@ -135,7 +135,7 @@ func (s3a *S3ApiServer) PutObjectHandler(w http.ResponseWriter, r *http.Request) |
|
|
|
versioningEnabled := (versioningState == s3_constants.VersioningEnabled) |
|
|
|
versioningConfigured := (versioningState != "") |
|
|
|
|
|
|
|
glog.V(0).Infof("PutObjectHandler: bucket=%s, object=%s, versioningState='%s', versioningEnabled=%v, versioningConfigured=%v", bucket, object, versioningState, versioningEnabled, versioningConfigured) |
|
|
|
glog.V(2).Infof("PutObjectHandler: bucket=%s, object=%s, versioningState='%s', versioningEnabled=%v, versioningConfigured=%v", bucket, object, versioningState, versioningEnabled, versioningConfigured) |
|
|
|
|
|
|
|
// Validate object lock headers before processing
|
|
|
|
if err := s3a.validateObjectLockHeaders(r, versioningEnabled); err != nil { |
|
|
|
@ -155,7 +155,8 @@ func (s3a *S3ApiServer) PutObjectHandler(w http.ResponseWriter, r *http.Request) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if versioningState == s3_constants.VersioningEnabled { |
|
|
|
switch versioningState { |
|
|
|
case s3_constants.VersioningEnabled: |
|
|
|
// Handle enabled versioning - create new versions with real version IDs
|
|
|
|
glog.V(0).Infof("PutObjectHandler: ENABLED versioning detected for %s/%s, calling putVersionedObject", bucket, object) |
|
|
|
versionId, etag, errCode := s3a.putVersionedObject(r, bucket, object, dataReader, objectContentType) |
|
|
|
@ -177,7 +178,7 @@ func (s3a *S3ApiServer) PutObjectHandler(w http.ResponseWriter, r *http.Request) |
|
|
|
|
|
|
|
// Set ETag in response
|
|
|
|
setEtag(w, etag) |
|
|
|
} else if versioningState == s3_constants.VersioningSuspended { |
|
|
|
case s3_constants.VersioningSuspended: |
|
|
|
// Handle suspended versioning - overwrite with "null" version ID but preserve existing versions
|
|
|
|
etag, errCode := s3a.putSuspendedVersioningObject(r, bucket, object, dataReader, objectContentType) |
|
|
|
if errCode != s3err.ErrNone { |
|
|
|
@ -190,7 +191,7 @@ func (s3a *S3ApiServer) PutObjectHandler(w http.ResponseWriter, r *http.Request) |
|
|
|
|
|
|
|
// Set ETag in response
|
|
|
|
setEtag(w, etag) |
|
|
|
} else { |
|
|
|
default: |
|
|
|
// Handle regular PUT (never configured versioning)
|
|
|
|
uploadUrl := s3a.toFilerUrl(bucket, object) |
|
|
|
if objectContentType == "" { |
|
|
|
|