| 262 | } |
| 263 | |
| 264 | func (vs *ValidationService) writeValidationTrace( |
| 265 | _ context.Context, |
| 266 | writer TraceWriter, |
| 267 | ) (*util.TraceInfo, *tempopb.Trace, error) { |
| 268 | traceInfo := util.NewTraceInfoWithMaxLongWrites( |
| 269 | vs.clock.Now(), |
| 270 | 0, |
| 271 | vs.config.TempoOrgID, |
| 272 | ) |
| 273 | |
| 274 | // Construct the trace structure BEFORE writing |
| 275 | traceStructure, err := traceInfo.ConstructTraceFromEpoch() |
| 276 | if err != nil { |
| 277 | return nil, nil, err |
| 278 | } |
| 279 | |
| 280 | writeErr := traceInfo.EmitAllBatches(writer) |
| 281 | if writeErr != nil { |
| 282 | return nil, nil, fmt.Errorf("failed to write trace, error: %w", writeErr) // Any write failure is critical |
| 283 | } |
| 284 | |
| 285 | return traceInfo, traceStructure, nil |
| 286 | } |
| 287 | |
| 288 | func (vs *ValidationService) validateTraceRetrieval( |
| 289 | ctx context.Context, |