(op *completeOp, span oteltrace.Span, msg string, err error)
| 160 | } |
| 161 | |
| 162 | func (s *LiveStore) retryCompleteOp(op *completeOp, span oteltrace.Span, msg string, err error) { |
| 163 | level.Error(s.logger).Log("msg", msg, "tenant", op.tenantID, "block", op.blockID, "err", err) |
| 164 | observeFailedOp(op) |
| 165 | span.RecordError(err) |
| 166 | |
| 167 | delay := op.backoff() |
| 168 | op.at = time.Now().Add(delay) |
| 169 | |
| 170 | metricCompletionRetries.Inc() |
| 171 | |
| 172 | go func() { |
| 173 | time.Sleep(delay) |
| 174 | |
| 175 | if err := s.requeueOp(op); err != nil { |
| 176 | _ = level.Error(s.logger).Log("msg", "failed to requeue block for flushing", "tenant", op.tenantID, "block", op.blockID, "err", err) |
| 177 | } |
| 178 | }() |
| 179 | } |
| 180 | |
| 181 | func (s *LiveStore) startPerTenantCutToWalLoop(inst *instance) { |
| 182 | s.cutToWalWg.Add(1) |
no test coverage detected