satellite/repair/repairer: if not enough nodes for repair order limits, increment metric and log as irreparable segment

Change-Id: I4bd46f28d64278c8d463e885ad221aafb6ce7cf3
This commit is contained in:
Cameron Ayer 2021-08-17 12:59:23 -04:00 committed by Cameron Ayer
parent 2340429ea8
commit 26f839a445
2 changed files with 13 additions and 1 deletions

View File

@ -379,7 +379,7 @@ func (service *Service) CreateGetRepairOrderLimits(ctx context.Context, bucket m
}
if limitsCount < redundancy.RequiredCount() {
err = Error.New("not enough nodes available: got %d, required %d", limitsCount, redundancy.RequiredCount())
err = ErrDownloadFailedNotEnoughPieces.New("not enough nodes available: got %d, required %d", limitsCount, redundancy.RequiredCount())
return nil, storj.PiecePrivateKey{}, nil, errs.Combine(err, nodeErrors.Err())
}

View File

@ -221,6 +221,18 @@ func (repairer *SegmentRepairer) Repair(ctx context.Context, queueSegment *queue
// Create the order limits for the GET_REPAIR action
getOrderLimits, getPrivateKey, cachedIPsAndPorts, err := repairer.orders.CreateGetRepairOrderLimits(ctx, metabase.BucketLocation{}, segment, healthyPieces)
if err != nil {
if orders.ErrDownloadFailedNotEnoughPieces.Has(err) {
mon.Counter("repairer_segments_below_min_req").Inc(1) //mon:locked
stats.repairerSegmentsBelowMinReq.Inc(1)
mon.Meter("repair_nodes_unavailable").Mark(1) //mon:locked
stats.repairerNodesUnavailable.Mark(1)
repairer.log.Warn("irreparable segment",
zap.String("StreamID", queueSegment.StreamID.String()),
zap.Uint64("Position", queueSegment.Position.Encode()),
zap.Error(err),
)
}
return false, orderLimitFailureError.New("could not create GET_REPAIR order limits: %w", err)
}