mirror of
https://github.com/minio/minio.git
synced 2025-01-25 21:53:16 -05:00
fix: add healing metric type for heal tracing (#15631)
changes the `heal.checkBucket` to `heal.Bucket` instead since the latter is more meaningful.
This commit is contained in:
parent
8e4a45ec41
commit
bcedc2b0d9
2
Makefile
2
Makefile
@ -20,7 +20,7 @@ help: ## print this help
|
|||||||
getdeps: ## fetch necessary dependencies
|
getdeps: ## fetch necessary dependencies
|
||||||
@mkdir -p ${GOPATH}/bin
|
@mkdir -p ${GOPATH}/bin
|
||||||
@echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin
|
@echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin
|
||||||
@echo "Installing msgp" && go install -v github.com/tinylib/msgp@v1.1.7-0.20211026165309-e818a1881b0e
|
@echo "Installing msgp" && go install -v github.com/tinylib/msgp@f3635b96e4838a6c773babb65ef35297fe5fe2f9
|
||||||
@echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest
|
@echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest
|
||||||
|
|
||||||
crosscompile: ## cross compile minio
|
crosscompile: ## cross compile minio
|
||||||
|
@ -651,6 +651,7 @@ func (z *dataUsageCacheInfo) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(5)
|
zb0001Len := uint32(5)
|
||||||
var zb0001Mask uint8 /* 5 bits */
|
var zb0001Mask uint8 /* 5 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.BloomFilter == nil {
|
if z.BloomFilter == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x10
|
zb0001Mask |= 0x10
|
||||||
@ -724,6 +725,7 @@ func (z *dataUsageCacheInfo) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(5)
|
zb0001Len := uint32(5)
|
||||||
var zb0001Mask uint8 /* 5 bits */
|
var zb0001Mask uint8 /* 5 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.BloomFilter == nil {
|
if z.BloomFilter == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x10
|
zb0001Mask |= 0x10
|
||||||
@ -1652,6 +1654,7 @@ func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(8)
|
zb0001Len := uint32(8)
|
||||||
var zb0001Mask uint8 /* 8 bits */
|
var zb0001Mask uint8 /* 8 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ReplicationStats == nil {
|
if z.ReplicationStats == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x20
|
zb0001Mask |= 0x20
|
||||||
@ -1782,6 +1785,7 @@ func (z *dataUsageEntry) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(8)
|
zb0001Len := uint32(8)
|
||||||
var zb0001Mask uint8 /* 8 bits */
|
var zb0001Mask uint8 /* 8 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ReplicationStats == nil {
|
if z.ReplicationStats == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x20
|
zb0001Mask |= 0x20
|
||||||
@ -2774,6 +2778,7 @@ func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(2)
|
zb0001Len := uint32(2)
|
||||||
var zb0001Mask uint8 /* 2 bits */
|
var zb0001Mask uint8 /* 2 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.Targets == nil {
|
if z.Targets == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x1
|
zb0001Mask |= 0x1
|
||||||
@ -2835,6 +2840,7 @@ func (z *replicationAllStats) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(2)
|
zb0001Len := uint32(2)
|
||||||
var zb0001Mask uint8 /* 2 bits */
|
var zb0001Mask uint8 /* 2 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.Targets == nil {
|
if z.Targets == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x1
|
zb0001Mask |= 0x1
|
||||||
|
@ -33,6 +33,15 @@ import (
|
|||||||
|
|
||||||
const reservedMetadataPrefixLowerDataShardFix = ReservedMetadataPrefixLower + "data-shard-fix"
|
const reservedMetadataPrefixLowerDataShardFix = ReservedMetadataPrefixLower + "data-shard-fix"
|
||||||
|
|
||||||
|
//go:generate stringer -type=healingMetric -trimprefix=healingMetric $GOFILE
|
||||||
|
|
||||||
|
type healingMetric uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
healingMetricBucket healingMetric = iota
|
||||||
|
healingMetricObject
|
||||||
|
)
|
||||||
|
|
||||||
// AcceptableDelta returns 'true' if the fi.DiskMTime is under
|
// AcceptableDelta returns 'true' if the fi.DiskMTime is under
|
||||||
// acceptable delta of "delta" duration with maxTime.
|
// acceptable delta of "delta" duration with maxTime.
|
||||||
//
|
//
|
||||||
@ -84,7 +93,7 @@ func (er erasureObjects) healBucket(ctx context.Context, storageDisks []StorageA
|
|||||||
if globalTrace.NumSubscribers(madmin.TraceHealing) > 0 {
|
if globalTrace.NumSubscribers(madmin.TraceHealing) > 0 {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
healTrace("heal.checkBucket", startTime, bucket, "", "", opts, err, &res)
|
healTrace(healingMetricBucket, startTime, bucket, "", "", opts, err, &res)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,7 +304,7 @@ func (er erasureObjects) healObject(ctx context.Context, bucket string, object s
|
|||||||
if globalTrace.NumSubscribers(madmin.TraceHealing) > 0 {
|
if globalTrace.NumSubscribers(madmin.TraceHealing) > 0 {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
healTrace("heal.checkVersion", startTime, bucket, object, versionID, opts, err, &result)
|
healTrace(healingMetricObject, startTime, bucket, object, versionID, opts, err, &result)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
// Initialize heal result object
|
// Initialize heal result object
|
||||||
@ -1013,18 +1022,18 @@ func (er erasureObjects) HealObject(ctx context.Context, bucket, object, version
|
|||||||
}
|
}
|
||||||
|
|
||||||
// healTrace sends healing results to trace output.
|
// healTrace sends healing results to trace output.
|
||||||
func healTrace(funcName string, startTime time.Time, bucket, object, versionID string, opts madmin.HealOpts, err error, result *madmin.HealResultItem) {
|
func healTrace(funcName healingMetric, startTime time.Time, bucket, object, versionID string, opts madmin.HealOpts, err error, result *madmin.HealResultItem) {
|
||||||
tr := madmin.TraceInfo{
|
tr := madmin.TraceInfo{
|
||||||
TraceType: madmin.TraceHealing,
|
TraceType: madmin.TraceHealing,
|
||||||
Time: startTime,
|
Time: startTime,
|
||||||
NodeName: globalLocalNodeName,
|
NodeName: globalLocalNodeName,
|
||||||
FuncName: funcName,
|
FuncName: "heal." + funcName.String(),
|
||||||
Duration: time.Since(startTime),
|
Duration: time.Since(startTime),
|
||||||
Message: fmt.Sprintf("dry:%v, rm:%v, recreate:%v mode:%v", opts.DryRun, opts.Remove, opts.Recreate, opts.ScanMode),
|
Message: fmt.Sprintf("dry:%v, rm:%v, recreate:%v mode:%v", opts.DryRun, opts.Remove, opts.Recreate, opts.ScanMode),
|
||||||
Path: fmt.Sprintf("%s/%s", bucket, object),
|
Path: pathJoin(bucket, decodeDirObject(object)),
|
||||||
}
|
}
|
||||||
if versionID != "" && versionID != "null" {
|
if versionID != "" && versionID != "null" {
|
||||||
tr.Path += " v-" + versionID
|
tr.Path += " v=" + versionID
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tr.Error = err.Error()
|
tr.Error = err.Error()
|
||||||
|
24
cmd/healingmetric_string.go
Normal file
24
cmd/healingmetric_string.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Code generated by "stringer -type=healingMetric -trimprefix=healingMetric erasure-healing.go"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
// Re-run the stringer command to generate them again.
|
||||||
|
var x [1]struct{}
|
||||||
|
_ = x[healingMetricBucket-0]
|
||||||
|
_ = x[healingMetricObject-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
const _healingMetric_name = "BucketObject"
|
||||||
|
|
||||||
|
var _healingMetric_index = [...]uint8{0, 6, 12}
|
||||||
|
|
||||||
|
func (i healingMetric) String() string {
|
||||||
|
if i >= healingMetric(len(_healingMetric_index)-1) {
|
||||||
|
return "healingMetric(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
|
}
|
||||||
|
return _healingMetric_name[_healingMetric_index[i]:_healingMetric_index[i+1]]
|
||||||
|
}
|
@ -651,6 +651,7 @@ func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(7)
|
zb0001Len := uint32(7)
|
||||||
var zb0001Mask uint8 /* 7 bits */
|
var zb0001Mask uint8 /* 7 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.Index == nil {
|
if z.Index == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x20
|
zb0001Mask |= 0x20
|
||||||
@ -762,6 +763,7 @@ func (z *ObjectPartInfo) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(7)
|
zb0001Len := uint32(7)
|
||||||
var zb0001Mask uint8 /* 7 bits */
|
var zb0001Mask uint8 /* 7 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.Index == nil {
|
if z.Index == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x20
|
zb0001Mask |= 0x20
|
||||||
|
@ -343,6 +343,7 @@ func (z *xlMetaDataDirDecoder) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(1)
|
zb0001Len := uint32(1)
|
||||||
var zb0001Mask uint8 /* 1 bits */
|
var zb0001Mask uint8 /* 1 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ObjectV2 == nil {
|
if z.ObjectV2 == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x1
|
zb0001Mask |= 0x1
|
||||||
@ -389,6 +390,7 @@ func (z *xlMetaDataDirDecoder) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(1)
|
zb0001Len := uint32(1)
|
||||||
var zb0001Mask uint8 /* 1 bits */
|
var zb0001Mask uint8 /* 1 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ObjectV2 == nil {
|
if z.ObjectV2 == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x1
|
zb0001Mask |= 0x1
|
||||||
@ -572,6 +574,7 @@ func (z *xlMetaV2DeleteMarker) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(3)
|
zb0001Len := uint32(3)
|
||||||
var zb0001Mask uint8 /* 3 bits */
|
var zb0001Mask uint8 /* 3 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.MetaSys == nil {
|
if z.MetaSys == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x4
|
zb0001Mask |= 0x4
|
||||||
@ -637,6 +640,7 @@ func (z *xlMetaV2DeleteMarker) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(3)
|
zb0001Len := uint32(3)
|
||||||
var zb0001Mask uint8 /* 3 bits */
|
var zb0001Mask uint8 /* 3 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.MetaSys == nil {
|
if z.MetaSys == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x4
|
zb0001Mask |= 0x4
|
||||||
@ -1060,6 +1064,7 @@ func (z *xlMetaV2Object) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(18)
|
zb0001Len := uint32(18)
|
||||||
var zb0001Mask uint32 /* 18 bits */
|
var zb0001Mask uint32 /* 18 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.PartIndices == nil {
|
if z.PartIndices == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x2000
|
zb0001Mask |= 0x2000
|
||||||
@ -1357,6 +1362,7 @@ func (z *xlMetaV2Object) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(18)
|
zb0001Len := uint32(18)
|
||||||
var zb0001Mask uint32 /* 18 bits */
|
var zb0001Mask uint32 /* 18 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.PartIndices == nil {
|
if z.PartIndices == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x2000
|
zb0001Mask |= 0x2000
|
||||||
@ -1890,6 +1896,7 @@ func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(5)
|
zb0001Len := uint32(5)
|
||||||
var zb0001Mask uint8 /* 5 bits */
|
var zb0001Mask uint8 /* 5 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ObjectV1 == nil {
|
if z.ObjectV1 == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x2
|
zb0001Mask |= 0x2
|
||||||
@ -1996,6 +2003,7 @@ func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) {
|
|||||||
// omitempty: check for empty values
|
// omitempty: check for empty values
|
||||||
zb0001Len := uint32(5)
|
zb0001Len := uint32(5)
|
||||||
var zb0001Mask uint8 /* 5 bits */
|
var zb0001Mask uint8 /* 5 bits */
|
||||||
|
_ = zb0001Mask
|
||||||
if z.ObjectV1 == nil {
|
if z.ObjectV1 == nil {
|
||||||
zb0001Len--
|
zb0001Len--
|
||||||
zb0001Mask |= 0x2
|
zb0001Mask |= 0x2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user