Add retention option on bucket creation (#504)

This also deletes a bucket if it was created and an error occurred
This commit is contained in:
Cesar N
2020-12-11 10:22:25 -06:00
committed by GitHub
parent b495148a69
commit dd91c793e2
4 changed files with 52 additions and 0 deletions

View File

@@ -41,6 +41,9 @@ type MakeBucketRequest struct {
// quota
Quota *SetBucketQuota `json:"quota,omitempty"`
// retention
Retention *PutBucketRetentionRequest `json:"retention,omitempty"`
// versioning
Versioning bool `json:"versioning,omitempty"`
}
@@ -57,6 +60,10 @@ func (m *MakeBucketRequest) Validate(formats strfmt.Registry) error {
res = append(res, err)
}
if err := m.validateRetention(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
@@ -90,6 +97,24 @@ func (m *MakeBucketRequest) validateQuota(formats strfmt.Registry) error {
return nil
}
func (m *MakeBucketRequest) validateRetention(formats strfmt.Registry) error {
if swag.IsZero(m.Retention) { // not required
return nil
}
if m.Retention != nil {
if err := m.Retention.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("retention")
}
return err
}
}
return nil
}
// MarshalBinary interface implementation
func (m *MakeBucketRequest) MarshalBinary() ([]byte, error) {
if m == nil {

View File

@@ -3902,6 +3902,9 @@ func init() {
"quota": {
"$ref": "#/definitions/setBucketQuota"
},
"retention": {
"$ref": "#/definitions/putBucketRetentionRequest"
},
"versioning": {
"type": "boolean"
}
@@ -9502,6 +9505,9 @@ func init() {
"quota": {
"$ref": "#/definitions/setBucketQuota"
},
"retention": {
"$ref": "#/definitions/putBucketRetentionRequest"
},
"versioning": {
"type": "boolean"
}

View File

@@ -323,6 +323,16 @@ func getMakeBucketResponse(session *models.Principal, br *models.MakeBucketReque
return prepareError(err)
}
// make sure to delete bucket if an error occurs after bucket was created
defer func() {
if err != nil {
log.Println("error creating bucket:", err)
if err := removeBucket(minioClient, *br.Name); err != nil {
log.Println("error removing bucket:", err)
}
}
}()
// if it has support for
if br.Quota != nil && br.Quota.Enabled != nil && *br.Quota.Enabled {
mAdmin, err := newMAdminClient(session)
@@ -337,6 +347,14 @@ func getMakeBucketResponse(session *models.Principal, br *models.MakeBucketReque
log.Println("error versioning bucket:", err)
}
}
// Set Bucket Retention Configuration if defined
if br.Retention != nil {
err = setBucketRetentionConfig(ctx, minioClient, *br.Name, br.Retention.Mode, br.Retention.Unit, br.Retention.Validity)
if err != nil {
return prepareError(err)
}
}
return nil
}

View File

@@ -2083,6 +2083,9 @@ definitions:
type: boolean
quota:
$ref: "#/definitions/setBucketQuota"
retention:
$ref: "#/definitions/putBucketRetentionRequest"
error:
type: object
required: