mirror of
https://github.com/minio/minio.git
synced 2025-04-01 02:03:42 -04:00
fix: a crash in RemoveReplication target (#19640)
calling a remote target remove with a perfectly well constructed ARN can lead to a crash for a bucket with no replication configured. This PR fixes, and adds a crash check for ImportMetadata as well.
This commit is contained in:
parent
f64dea2aac
commit
8161411c5d
@ -735,7 +735,7 @@ func (a adminAPIHandlers) ImportBucketMetadataHandler(w http.ResponseWriter, r *
|
|||||||
rpt.SetStatus(bucket, fileName, fmt.Errorf("An Object Lock configuration is present on this bucket, so the versioning state cannot be suspended."))
|
rpt.SetStatus(bucket, fileName, fmt.Errorf("An Object Lock configuration is present on this bucket, so the versioning state cannot be suspended."))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, err := getReplicationConfig(ctx, bucket); err == nil && v.Suspended() {
|
if rcfg, _ := getReplicationConfig(ctx, bucket); rcfg != nil && v.Suspended() {
|
||||||
rpt.SetStatus(bucket, fileName, fmt.Errorf("A replication configuration is present on this bucket, so the versioning state cannot be suspended."))
|
rpt.SetStatus(bucket, fileName, fmt.Errorf("A replication configuration is present on this bucket, so the versioning state cannot be suspended."))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -998,7 +998,7 @@ func replicateObject(ctx context.Context, ri ReplicateObjectInfo, objectAPI Obje
|
|||||||
object := ri.Name
|
object := ri.Name
|
||||||
|
|
||||||
cfg, err := getReplicationConfig(ctx, bucket)
|
cfg, err := getReplicationConfig(ctx, bucket)
|
||||||
if err != nil {
|
if err != nil || cfg == nil {
|
||||||
replLogOnceIf(ctx, err, "get-replication-config-"+bucket)
|
replLogOnceIf(ctx, err, "get-replication-config-"+bucket)
|
||||||
sendEvent(eventArgs{
|
sendEvent(eventArgs{
|
||||||
EventName: event.ObjectReplicationNotTracked,
|
EventName: event.ObjectReplicationNotTracked,
|
||||||
|
@ -428,7 +428,7 @@ func (sys *BucketTargetSys) RemoveTarget(ctx context.Context, bucket, arnStr str
|
|||||||
if arn.Type == madmin.ReplicationService {
|
if arn.Type == madmin.ReplicationService {
|
||||||
// reject removal of remote target if replication configuration is present
|
// reject removal of remote target if replication configuration is present
|
||||||
rcfg, err := getReplicationConfig(ctx, bucket)
|
rcfg, err := getReplicationConfig(ctx, bucket)
|
||||||
if err == nil {
|
if err == nil && rcfg != nil {
|
||||||
for _, tgtArn := range rcfg.FilterTargetArns(replication.ObjectOpts{OpType: replication.AllReplicationType}) {
|
for _, tgtArn := range rcfg.FilterTargetArns(replication.ObjectOpts{OpType: replication.AllReplicationType}) {
|
||||||
if err == nil && (tgtArn == arnStr || rcfg.RoleArn == arnStr) {
|
if err == nil && (tgtArn == arnStr || rcfg.RoleArn == arnStr) {
|
||||||
sys.RLock()
|
sys.RLock()
|
||||||
|
@ -958,7 +958,7 @@ func (i *scannerItem) applyLifecycle(ctx context.Context, o ObjectLayer, oi Obje
|
|||||||
var vc *versioning.Versioning
|
var vc *versioning.Versioning
|
||||||
var lr objectlock.Retention
|
var lr objectlock.Retention
|
||||||
var rcfg *replication.Config
|
var rcfg *replication.Config
|
||||||
if i.bucket != minioMetaBucket {
|
if !isMinioMetaBucketName(i.bucket) {
|
||||||
vc, err = globalBucketVersioningSys.Get(i.bucket)
|
vc, err = globalBucketVersioningSys.Get(i.bucket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scannerLogOnceIf(ctx, err, i.bucket)
|
scannerLogOnceIf(ctx, err, i.bucket)
|
||||||
|
@ -5781,7 +5781,7 @@ func (c *SiteReplicationSys) startResync(ctx context.Context, objAPI ObjectLayer
|
|||||||
|
|
||||||
for _, bi := range buckets {
|
for _, bi := range buckets {
|
||||||
bucket := bi.Name
|
bucket := bi.Name
|
||||||
if _, err := getReplicationConfig(ctx, bucket); err != nil {
|
if _, _, err := globalBucketMetadataSys.GetReplicationConfig(ctx, bucket); err != nil {
|
||||||
res.Buckets = append(res.Buckets, madmin.ResyncBucketStatus{
|
res.Buckets = append(res.Buckets, madmin.ResyncBucketStatus{
|
||||||
ErrDetail: err.Error(),
|
ErrDetail: err.Error(),
|
||||||
Bucket: bucket,
|
Bucket: bucket,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user