[#661] Fix updating cache when request fails
Signed-off-by: Denis Kirillov <denis@nspcc.ru>
This commit is contained in:
parent
1a580b6fa4
commit
fdc926e70b
3 changed files with 17 additions and 6 deletions
|
@ -122,6 +122,7 @@ const (
|
||||||
ErrInvalidBucketObjectLockConfiguration
|
ErrInvalidBucketObjectLockConfiguration
|
||||||
ErrObjectLockConfigurationNotFound
|
ErrObjectLockConfigurationNotFound
|
||||||
ErrObjectLockConfigurationNotAllowed
|
ErrObjectLockConfigurationNotAllowed
|
||||||
|
ErrObjectLockConfigurationVersioningCannotBeChanged
|
||||||
ErrNoSuchObjectLockConfiguration
|
ErrNoSuchObjectLockConfiguration
|
||||||
ErrObjectLocked
|
ErrObjectLocked
|
||||||
ErrInvalidRetentionDate
|
ErrInvalidRetentionDate
|
||||||
|
@ -831,6 +832,12 @@ var errorCodes = errorCodeMap{
|
||||||
Description: "Object Lock configuration cannot be enabled on existing buckets",
|
Description: "Object Lock configuration cannot be enabled on existing buckets",
|
||||||
HTTPStatusCode: http.StatusConflict,
|
HTTPStatusCode: http.StatusConflict,
|
||||||
},
|
},
|
||||||
|
ErrObjectLockConfigurationVersioningCannotBeChanged: {
|
||||||
|
ErrCode: ErrObjectLockConfigurationVersioningCannotBeChanged,
|
||||||
|
Code: "InvalidBucketState",
|
||||||
|
Description: "An Object Lock configuration is present on this bucket, so the versioning state cannot be changed.",
|
||||||
|
HTTPStatusCode: http.StatusConflict,
|
||||||
|
},
|
||||||
ErrNoSuchCORSConfiguration: {
|
ErrNoSuchCORSConfiguration: {
|
||||||
ErrCode: ErrNoSuchCORSConfiguration,
|
ErrCode: ErrNoSuchCORSConfiguration,
|
||||||
Code: "NoSuchCORSConfiguration",
|
Code: "NoSuchCORSConfiguration",
|
||||||
|
|
|
@ -56,11 +56,13 @@ func (h *handler) PutBucketObjectLockConfigHandler(w http.ResponseWriter, r *htt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.LockConfiguration = lockingConf
|
// settings pointer is stored in the cache, so modify a copy of the settings
|
||||||
|
newSettings := *settings
|
||||||
|
newSettings.LockConfiguration = lockingConf
|
||||||
|
|
||||||
sp := &layer.PutSettingsParams{
|
sp := &layer.PutSettingsParams{
|
||||||
BktInfo: bktInfo,
|
BktInfo: bktInfo,
|
||||||
Settings: settings,
|
Settings: &newSettings,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = h.obj.PutBucketSettings(r.Context(), sp); err != nil {
|
if err = h.obj.PutBucketSettings(r.Context(), sp); err != nil {
|
||||||
|
|
|
@ -2,7 +2,6 @@ package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-s3-gw/api"
|
"github.com/nspcc-dev/neofs-s3-gw/api"
|
||||||
|
@ -37,15 +36,18 @@ func (h *handler) PutBucketVersioningHandler(w http.ResponseWriter, r *http.Requ
|
||||||
h.logAndSendError(w, "invalid versioning configuration", reqInfo, errors.GetAPIError(errors.ErrMalformedXML))
|
h.logAndSendError(w, "invalid versioning configuration", reqInfo, errors.GetAPIError(errors.ErrMalformedXML))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
settings.Versioning = configuration.Status
|
|
||||||
|
// settings pointer is stored in the cache, so modify a copy of the settings
|
||||||
|
newSettings := *settings
|
||||||
|
newSettings.Versioning = configuration.Status
|
||||||
|
|
||||||
p := &layer.PutSettingsParams{
|
p := &layer.PutSettingsParams{
|
||||||
BktInfo: bktInfo,
|
BktInfo: bktInfo,
|
||||||
Settings: settings,
|
Settings: &newSettings,
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.Settings.VersioningSuspended() && bktInfo.ObjectLockEnabled {
|
if p.Settings.VersioningSuspended() && bktInfo.ObjectLockEnabled {
|
||||||
h.logAndSendError(w, "couldn't suspend bucket versioning", reqInfo, fmt.Errorf("object lock is enabled"))
|
h.logAndSendError(w, "couldn't suspend bucket versioning", reqInfo, errors.GetAPIError(errors.ErrObjectLockConfigurationVersioningCannotBeChanged))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue