mirror of
https://github.com/minio/minio.git
synced 2025-04-16 00:49:09 -04:00
Add a warning when the total size of an object versions exceeds 1 TiB (#19435)
This commit is contained in:
parent
78f177b8ee
commit
c6f8dc431e
@ -66,6 +66,7 @@ var (
|
|||||||
scannerCycle = uatomic.NewDuration(dataScannerStartDelay)
|
scannerCycle = uatomic.NewDuration(dataScannerStartDelay)
|
||||||
scannerIdleMode = uatomic.NewInt32(0) // default is throttled when idle
|
scannerIdleMode = uatomic.NewInt32(0) // default is throttled when idle
|
||||||
scannerExcessObjectVersions = uatomic.NewInt64(100)
|
scannerExcessObjectVersions = uatomic.NewInt64(100)
|
||||||
|
scannerExcessObjectVersionsTotalSize = uatomic.NewInt64(1024 * 1024 * 1024 * 1024) // 1 TB
|
||||||
scannerExcessFolders = uatomic.NewInt64(50000)
|
scannerExcessFolders = uatomic.NewInt64(50000)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1065,7 +1066,7 @@ func (i *scannerItem) applyVersionActions(ctx context.Context, o ObjectLayer, fi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if we have many versions after applyNewerNoncurrentVersionLimit.
|
// Check if we have many versions after applyNewerNoncurrentVersionLimit.
|
||||||
if len(objInfos) > int(scannerExcessObjectVersions.Load()) {
|
if len(objInfos) >= int(scannerExcessObjectVersions.Load()) {
|
||||||
// Notify object accessed via a GET request.
|
// Notify object accessed via a GET request.
|
||||||
sendEvent(eventArgs{
|
sendEvent(eventArgs{
|
||||||
EventName: event.ObjectManyVersions,
|
EventName: event.ObjectManyVersions,
|
||||||
@ -1089,6 +1090,39 @@ func (i *scannerItem) applyVersionActions(ctx context.Context, o ObjectLayer, fi
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cumulativeSize := int64(0)
|
||||||
|
for _, objInfo := range objInfos {
|
||||||
|
cumulativeSize += objInfo.Size
|
||||||
|
}
|
||||||
|
// Check if the cumulative size of all versions of this object is high.
|
||||||
|
if cumulativeSize >= scannerExcessObjectVersionsTotalSize.Load() {
|
||||||
|
// Notify object accessed via a GET request.
|
||||||
|
sendEvent(eventArgs{
|
||||||
|
EventName: event.ObjectLargeVersions,
|
||||||
|
BucketName: i.bucket,
|
||||||
|
Object: ObjectInfo{
|
||||||
|
Name: i.objectPath(),
|
||||||
|
},
|
||||||
|
UserAgent: "Scanner",
|
||||||
|
Host: globalLocalNodeName,
|
||||||
|
RespElements: map[string]string{
|
||||||
|
"x-minio-versions-count": strconv.Itoa(len(objInfos)),
|
||||||
|
"x-minio-versions-size": strconv.FormatInt(cumulativeSize, 10),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
auditLogInternal(context.Background(), AuditLogOptions{
|
||||||
|
Event: "scanner:largeversions",
|
||||||
|
APIName: "Scanner",
|
||||||
|
Bucket: i.bucket,
|
||||||
|
Object: i.objectPath(),
|
||||||
|
Tags: map[string]interface{}{
|
||||||
|
"x-minio-versions-count": strconv.Itoa(len(objInfos)),
|
||||||
|
"x-minio-versions-size": strconv.FormatInt(cumulativeSize, 10),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return objInfos, nil
|
return objInfos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ const (
|
|||||||
ObjectTransitionFailed
|
ObjectTransitionFailed
|
||||||
ObjectTransitionComplete
|
ObjectTransitionComplete
|
||||||
ObjectManyVersions
|
ObjectManyVersions
|
||||||
|
ObjectLargeVersions
|
||||||
PrefixManyFolders
|
PrefixManyFolders
|
||||||
|
|
||||||
objectSingleTypesEnd
|
objectSingleTypesEnd
|
||||||
@ -124,6 +125,7 @@ func (name Name) Expand() []Name {
|
|||||||
case ObjectScannerAll:
|
case ObjectScannerAll:
|
||||||
return []Name{
|
return []Name{
|
||||||
ObjectManyVersions,
|
ObjectManyVersions,
|
||||||
|
ObjectLargeVersions,
|
||||||
PrefixManyFolders,
|
PrefixManyFolders,
|
||||||
}
|
}
|
||||||
case Everything:
|
case Everything:
|
||||||
@ -223,6 +225,9 @@ func (name Name) String() string {
|
|||||||
return "s3:ObjectTransition:Complete"
|
return "s3:ObjectTransition:Complete"
|
||||||
case ObjectManyVersions:
|
case ObjectManyVersions:
|
||||||
return "s3:Scanner:ManyVersions"
|
return "s3:Scanner:ManyVersions"
|
||||||
|
case ObjectLargeVersions:
|
||||||
|
return "s3:Scanner:LargeVersions"
|
||||||
|
|
||||||
case PrefixManyFolders:
|
case PrefixManyFolders:
|
||||||
return "s3:Scanner:BigPrefix"
|
return "s3:Scanner:BigPrefix"
|
||||||
}
|
}
|
||||||
@ -345,6 +350,8 @@ func ParseName(s string) (Name, error) {
|
|||||||
return ObjectTransitionAll, nil
|
return ObjectTransitionAll, nil
|
||||||
case "s3:Scanner:ManyVersions":
|
case "s3:Scanner:ManyVersions":
|
||||||
return ObjectManyVersions, nil
|
return ObjectManyVersions, nil
|
||||||
|
case "s3:Scanner:LargeVersions":
|
||||||
|
return ObjectLargeVersions, nil
|
||||||
case "s3:Scanner:BigPrefix":
|
case "s3:Scanner:BigPrefix":
|
||||||
return PrefixManyFolders, nil
|
return PrefixManyFolders, nil
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user