improve validation for replication resync API (#15964)

This commit is contained in:
Poorna 2022-10-28 23:21:33 -07:00 committed by GitHub
parent 6e4acf0504
commit d765b89a63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 4 deletions

View File

@ -276,7 +276,13 @@ func (api objectAPIHandlers) ResetBucketReplicationStartHandler(w http.ResponseW
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
return
}
if !config.HasExistingObjectReplication(arn) {
hasARN, hasExistingObjEnabled := config.HasExistingObjectReplication(arn)
if !hasARN {
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrRemoteTargetNotFoundError), r.URL)
return
}
if !hasExistingObjEnabled {
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrReplicationNoExistingObjects), r.URL)
return
}

View File

@ -162,15 +162,18 @@ type ObjectOpts struct {
}
// HasExistingObjectReplication returns true if any of the rule returns 'ExistingObjects' replication.
func (c Config) HasExistingObjectReplication(arn string) bool {
func (c Config) HasExistingObjectReplication(arn string) (hasARN, isEnabled bool) {
for _, rule := range c.Rules {
if rule.Destination.ARN == arn || c.RoleArn == arn {
if !hasARN {
hasARN = true
}
if rule.ExistingObjectReplication.Status == Enabled {
return true
return true, true
}
}
}
return false
return hasARN, false
}
// FilterActionableRules returns the rules actions that need to be executed