mirror of
https://github.com/minio/minio.git
synced 2025-11-07 12:52:58 -05:00
reduce all major allocations in replication path (#18032)
- remove targetClient for passing around via replicationObjectInfo{}
- remove cloing to object info unnecessarily
- remove objectInfo from replicationObjectInfo{} (only require necessary fields)
This commit is contained in:
@@ -68,6 +68,34 @@ type PoolDecommissionInfo struct {
|
||||
BytesFailed int64 `json:"bytesDecommissionedFailed" msg:"bf"`
|
||||
}
|
||||
|
||||
// Clone make a copy of PoolDecommissionInfo
|
||||
func (pd *PoolDecommissionInfo) Clone() *PoolDecommissionInfo {
|
||||
if pd == nil {
|
||||
return nil
|
||||
}
|
||||
if pd.StartTime.IsZero() {
|
||||
return nil
|
||||
}
|
||||
return &PoolDecommissionInfo{
|
||||
StartTime: pd.StartTime,
|
||||
StartSize: pd.StartSize,
|
||||
TotalSize: pd.TotalSize,
|
||||
CurrentSize: pd.CurrentSize,
|
||||
Complete: pd.Complete,
|
||||
Failed: pd.Failed,
|
||||
Canceled: pd.Canceled,
|
||||
QueuedBuckets: pd.QueuedBuckets,
|
||||
DecommissionedBuckets: pd.DecommissionedBuckets,
|
||||
Bucket: pd.Bucket,
|
||||
Prefix: pd.Prefix,
|
||||
Object: pd.Object,
|
||||
ItemsDecommissioned: pd.ItemsDecommissioned,
|
||||
ItemsDecommissionFailed: pd.ItemsDecommissionFailed,
|
||||
BytesDone: pd.BytesDone,
|
||||
BytesFailed: pd.BytesFailed,
|
||||
}
|
||||
}
|
||||
|
||||
// bucketPop should be called when a bucket is done decommissioning.
|
||||
// Adds the bucket to the list of decommissioned buckets and updates resume numbers.
|
||||
func (pd *PoolDecommissionInfo) bucketPop(bucket string) {
|
||||
@@ -118,6 +146,16 @@ type PoolStatus struct {
|
||||
Decommission *PoolDecommissionInfo `json:"decommissionInfo,omitempty" msg:"dec"`
|
||||
}
|
||||
|
||||
// Clone returns a copy of PoolStatus
|
||||
func (ps PoolStatus) Clone() PoolStatus {
|
||||
return PoolStatus{
|
||||
ID: ps.ID,
|
||||
CmdLine: ps.CmdLine,
|
||||
LastUpdate: ps.LastUpdate,
|
||||
Decommission: ps.Decommission.Clone(),
|
||||
}
|
||||
}
|
||||
|
||||
//go:generate msgp -file $GOFILE -unexported
|
||||
type poolMeta struct {
|
||||
Version int `msg:"v"`
|
||||
@@ -375,16 +413,17 @@ func (p *poolMeta) load(ctx context.Context, pool *erasureSets, pools []*erasure
|
||||
|
||||
func (p *poolMeta) CountItem(idx int, size int64, failed bool) {
|
||||
pd := p.Pools[idx].Decommission
|
||||
if pd != nil {
|
||||
if failed {
|
||||
pd.ItemsDecommissionFailed++
|
||||
pd.BytesFailed += size
|
||||
} else {
|
||||
pd.ItemsDecommissioned++
|
||||
pd.BytesDone += size
|
||||
}
|
||||
p.Pools[idx].Decommission = pd
|
||||
if pd == nil {
|
||||
return
|
||||
}
|
||||
if failed {
|
||||
pd.ItemsDecommissionFailed++
|
||||
pd.BytesFailed += size
|
||||
} else {
|
||||
pd.ItemsDecommissioned++
|
||||
pd.BytesDone += size
|
||||
}
|
||||
p.Pools[idx].Decommission = pd
|
||||
}
|
||||
|
||||
func (p *poolMeta) updateAfter(ctx context.Context, idx int, pools []*erasureSets, duration time.Duration) (bool, error) {
|
||||
@@ -1185,15 +1224,15 @@ func (z *erasureServerPools) Status(ctx context.Context, idx int) (PoolStatus, e
|
||||
return PoolStatus{}, errInvalidArgument
|
||||
}
|
||||
|
||||
z.poolMetaMutex.RLock()
|
||||
defer z.poolMetaMutex.RUnlock()
|
||||
|
||||
pi, err := z.getDecommissionPoolSpaceInfo(idx)
|
||||
if err != nil {
|
||||
return PoolStatus{}, err
|
||||
}
|
||||
|
||||
poolInfo := z.poolMeta.Pools[idx]
|
||||
z.poolMetaMutex.RLock()
|
||||
defer z.poolMetaMutex.RUnlock()
|
||||
|
||||
poolInfo := z.poolMeta.Pools[idx].Clone()
|
||||
if poolInfo.Decommission != nil {
|
||||
poolInfo.Decommission.TotalSize = pi.Total
|
||||
if poolInfo.Decommission.Failed || poolInfo.Decommission.Canceled {
|
||||
|
||||
Reference in New Issue
Block a user