| 141 | } |
| 142 | |
| 143 | func newInstance(instanceID string, cfg Config, wal *wal.WAL, completeBlockEncoding encoding.VersionedEncoding, completeBlockLifecycle completeBlockLifecycle, overrides overrides.Interface, logger log.Logger) (*instance, error) { |
| 144 | logger = log.With(logger, "tenant", instanceID) |
| 145 | if completeBlockLifecycle == nil { |
| 146 | var err error |
| 147 | completeBlockLifecycle, err = newCompleteBlockLifecycle(cfg, nil, logger) |
| 148 | if err != nil { |
| 149 | return nil, err |
| 150 | } |
| 151 | } |
| 152 | i := &instance{ |
| 153 | tenantID: instanceID, |
| 154 | logger: logger, |
| 155 | Cfg: cfg, |
| 156 | wal: wal, |
| 157 | completeBlockEncoding: completeBlockEncoding, |
| 158 | completeBlockLifecycle: completeBlockLifecycle, |
| 159 | liveTraces: livetraces.New[*v1.ResourceSpans](func(rs *v1.ResourceSpans) uint64 { return uint64(rs.Size()) }, cfg.MaxTraceIdle, cfg.MaxTraceLive, instanceID), |
| 160 | traceSizes: tracesizes.New(), |
| 161 | maxTraceLogger: util_log.NewRateLimitedLogger(maxTraceLogLinesPerSecond, level.Warn(logger)), |
| 162 | overrides: overrides, |
| 163 | tracesCreatedTotal: metricTracesCreatedTotal.WithLabelValues(instanceID), |
| 164 | bytesReceivedTotal: metricBytesReceivedTotal, |
| 165 | reclaim: newQuarantine(cfg.BlockReclaimGrace), |
| 166 | } |
| 167 | i.blocks.Store(emptyBlockSnapshot()) |
| 168 | |
| 169 | err := i.resetHeadBlock() |
| 170 | if err != nil { |
| 171 | return nil, err |
| 172 | } |
| 173 | |
| 174 | return i, nil |
| 175 | } |
| 176 | |
| 177 | func (i *instance) waitBackpressure(ctx context.Context) { |
| 178 | span := oteltrace.SpanFromContext(ctx) |