mirror of
https://github.com/minio/minio.git
synced 2025-02-09 12:48:08 -05:00
simplify sort.Sort by using sort.Slice (#17066)
This commit is contained in:
parent
6addc7a35d
commit
8fd07bcd51
@ -479,8 +479,8 @@ func TestTopLockEntries(t *testing.T) {
|
|||||||
if len(exp) != len(got) {
|
if len(exp) != len(got) {
|
||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
sort.Sort(byResourceUID{exp})
|
sort.Slice(exp, byResourceUID{exp}.Less)
|
||||||
sort.Sort(byResourceUID{got})
|
sort.Slice(got, byResourceUID{got}.Less)
|
||||||
// printEntries(exp)
|
// printEntries(exp)
|
||||||
// printEntries(got)
|
// printEntries(got)
|
||||||
for i, e := range exp {
|
for i, e := range exp {
|
||||||
|
@ -42,13 +42,6 @@ const minIOErasureUpgraded = "x-minio-internal-erasure-upgraded"
|
|||||||
|
|
||||||
const erasureAlgorithm = "rs-vandermonde"
|
const erasureAlgorithm = "rs-vandermonde"
|
||||||
|
|
||||||
// byObjectPartNumber is a collection satisfying sort.Interface.
|
|
||||||
type byObjectPartNumber []ObjectPartInfo
|
|
||||||
|
|
||||||
func (t byObjectPartNumber) Len() int { return len(t) }
|
|
||||||
func (t byObjectPartNumber) Swap(i, j int) { t[i], t[j] = t[j], t[i] }
|
|
||||||
func (t byObjectPartNumber) Less(i, j int) bool { return t[i].Number < t[j].Number }
|
|
||||||
|
|
||||||
// AddChecksumInfo adds a checksum of a part.
|
// AddChecksumInfo adds a checksum of a part.
|
||||||
func (e *ErasureInfo) AddChecksumInfo(ckSumInfo ChecksumInfo) {
|
func (e *ErasureInfo) AddChecksumInfo(ckSumInfo ChecksumInfo) {
|
||||||
for i, sum := range e.Checksums {
|
for i, sum := range e.Checksums {
|
||||||
@ -308,7 +301,7 @@ func (fi *FileInfo) AddObjectPart(partNumber int, partETag string, partSize, act
|
|||||||
fi.Parts = append(fi.Parts, partInfo)
|
fi.Parts = append(fi.Parts, partInfo)
|
||||||
|
|
||||||
// Parts in FileInfo should be in sorted order by part number.
|
// Parts in FileInfo should be in sorted order by part number.
|
||||||
sort.Sort(byObjectPartNumber(fi.Parts))
|
sort.Slice(fi.Parts, func(i, j int) bool { return fi.Parts[i].Number < fi.Parts[j].Number })
|
||||||
}
|
}
|
||||||
|
|
||||||
// ObjectToPartOffset - translate offset of an object to offset of its individual part.
|
// ObjectToPartOffset - translate offset of an object to offset of its individual part.
|
||||||
|
@ -94,15 +94,6 @@ func (er erasureObjects) defaultWQuorum() int {
|
|||||||
return dataCount
|
return dataCount
|
||||||
}
|
}
|
||||||
|
|
||||||
// byDiskTotal is a collection satisfying sort.Interface.
|
|
||||||
type byDiskTotal []madmin.Disk
|
|
||||||
|
|
||||||
func (d byDiskTotal) Len() int { return len(d) }
|
|
||||||
func (d byDiskTotal) Swap(i, j int) { d[i], d[j] = d[j], d[i] }
|
|
||||||
func (d byDiskTotal) Less(i, j int) bool {
|
|
||||||
return d[i].TotalSpace < d[j].TotalSpace
|
|
||||||
}
|
|
||||||
|
|
||||||
func diskErrToDriveState(err error) (state string) {
|
func diskErrToDriveState(err error) (state string) {
|
||||||
switch {
|
switch {
|
||||||
case errors.Is(err, errDiskNotFound) || errors.Is(err, context.DeadlineExceeded):
|
case errors.Is(err, errDiskNotFound) || errors.Is(err, context.DeadlineExceeded):
|
||||||
@ -245,7 +236,9 @@ func getStorageInfo(disks []StorageAPI, endpoints []Endpoint) StorageInfo {
|
|||||||
disksInfo := getDisksInfo(disks, endpoints)
|
disksInfo := getDisksInfo(disks, endpoints)
|
||||||
|
|
||||||
// Sort so that the first element is the smallest.
|
// Sort so that the first element is the smallest.
|
||||||
sort.Sort(byDiskTotal(disksInfo))
|
sort.Slice(disksInfo, func(i, j int) bool {
|
||||||
|
return disksInfo[i].TotalSpace < disksInfo[j].TotalSpace
|
||||||
|
})
|
||||||
|
|
||||||
storageInfo := StorageInfo{
|
storageInfo := StorageInfo{
|
||||||
Disks: disksInfo,
|
Disks: disksInfo,
|
||||||
|
32
cmd/net.go
32
cmd/net.go
@ -111,25 +111,6 @@ func getHostIP(host string) (ipList set.StringSet, err error) {
|
|||||||
return ipList, err
|
return ipList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// byLastOctetValue implements sort.Interface used in sorting a list
|
|
||||||
// of ip address by their last octet value in descending order.
|
|
||||||
type byLastOctetValue []net.IP
|
|
||||||
|
|
||||||
func (n byLastOctetValue) Len() int { return len(n) }
|
|
||||||
func (n byLastOctetValue) Swap(i, j int) { n[i], n[j] = n[j], n[i] }
|
|
||||||
func (n byLastOctetValue) Less(i, j int) bool {
|
|
||||||
// This case is needed when all ips in the list
|
|
||||||
// have same last octets, Following just ensures that
|
|
||||||
// 127.0.0.1 is moved to the end of the list.
|
|
||||||
if n[i].IsLoopback() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if n[j].IsLoopback() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return []byte(n[i].To4())[3] > []byte(n[j].To4())[3]
|
|
||||||
}
|
|
||||||
|
|
||||||
// sortIPs - sort ips based on higher octects.
|
// sortIPs - sort ips based on higher octects.
|
||||||
// The logic to sort by last octet is implemented to
|
// The logic to sort by last octet is implemented to
|
||||||
// prefer CIDRs with higher octects, this in-turn skips the
|
// prefer CIDRs with higher octects, this in-turn skips the
|
||||||
@ -152,7 +133,18 @@ func sortIPs(ipList []string) []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(byLastOctetValue(ipV4s))
|
sort.Slice(ipV4s, func(i, j int) bool {
|
||||||
|
// This case is needed when all ips in the list
|
||||||
|
// have same last octets, Following just ensures that
|
||||||
|
// 127.0.0.1 is moved to the end of the list.
|
||||||
|
if ipV4s[i].IsLoopback() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if ipV4s[j].IsLoopback() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return []byte(ipV4s[i].To4())[3] > []byte(ipV4s[j].To4())[3]
|
||||||
|
})
|
||||||
|
|
||||||
var ips []string
|
var ips []string
|
||||||
for _, ip := range ipV4s {
|
for _, ip := range ipV4s {
|
||||||
|
@ -552,13 +552,6 @@ type CompletePart struct {
|
|||||||
ChecksumSHA256 string
|
ChecksumSHA256 string
|
||||||
}
|
}
|
||||||
|
|
||||||
// CompletedParts - is a collection satisfying sort.Interface.
|
|
||||||
type CompletedParts []CompletePart
|
|
||||||
|
|
||||||
func (a CompletedParts) Len() int { return len(a) }
|
|
||||||
func (a CompletedParts) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
||||||
func (a CompletedParts) Less(i, j int) bool { return a[i].PartNumber < a[j].PartNumber }
|
|
||||||
|
|
||||||
// CompleteMultipartUpload - represents list of parts which are completed, this is sent by the
|
// CompleteMultipartUpload - represents list of parts which are completed, this is sent by the
|
||||||
// client during CompleteMultipartUpload request.
|
// client during CompleteMultipartUpload request.
|
||||||
type CompleteMultipartUpload struct {
|
type CompleteMultipartUpload struct {
|
||||||
|
@ -890,7 +890,9 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
|
|||||||
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMalformedXML), r.URL)
|
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrMalformedXML), r.URL)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !sort.IsSorted(CompletedParts(complMultipartUpload.Parts)) {
|
if !sort.SliceIsSorted(complMultipartUpload.Parts, func(i, j int) bool {
|
||||||
|
return complMultipartUpload.Parts[i].PartNumber < complMultipartUpload.Parts[j].PartNumber
|
||||||
|
}) {
|
||||||
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrInvalidPartOrder), r.URL)
|
writeErrorResponse(ctx, w, errorCodes.ToAPIErr(ErrInvalidPartOrder), r.URL)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -293,35 +293,6 @@ type Event struct {
|
|||||||
StorageClass string
|
StorageClass string
|
||||||
}
|
}
|
||||||
|
|
||||||
type lifecycleEvents []Event
|
|
||||||
|
|
||||||
func (es lifecycleEvents) Len() int {
|
|
||||||
return len(es)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (es lifecycleEvents) Swap(i, j int) {
|
|
||||||
es[i], es[j] = es[j], es[i]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (es lifecycleEvents) Less(i, j int) bool {
|
|
||||||
if es[i].Due.Equal(es[j].Due) {
|
|
||||||
// Prefer Expiration over Transition for both current and noncurrent
|
|
||||||
// versions
|
|
||||||
switch es[i].Action {
|
|
||||||
case DeleteAction, DeleteVersionAction:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
switch es[j].Action {
|
|
||||||
case DeleteAction, DeleteVersionAction:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prefer earlier occurring event
|
|
||||||
return es[i].Due.Before(es[j].Due)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Eval returns the lifecycle event applicable now.
|
// Eval returns the lifecycle event applicable now.
|
||||||
func (lc Lifecycle) Eval(obj ObjectOpts) Event {
|
func (lc Lifecycle) Eval(obj ObjectOpts) Event {
|
||||||
return lc.eval(obj, time.Now().UTC())
|
return lc.eval(obj, time.Now().UTC())
|
||||||
@ -451,7 +422,24 @@ func (lc Lifecycle) eval(obj ObjectOpts, now time.Time) Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(events) > 0 {
|
if len(events) > 0 {
|
||||||
sort.Sort(lifecycleEvents(events))
|
sort.Slice(events, func(i, j int) bool {
|
||||||
|
if events[i].Due.Equal(events[j].Due) {
|
||||||
|
// Prefer Expiration over Transition for both current
|
||||||
|
// and noncurrent versions
|
||||||
|
switch events[i].Action {
|
||||||
|
case DeleteAction, DeleteVersionAction:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
switch events[j].Action {
|
||||||
|
case DeleteAction, DeleteVersionAction:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefer earlier occurring event
|
||||||
|
return events[i].Due.Before(events[j].Due)
|
||||||
|
})
|
||||||
return events[0]
|
return events[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user