CompleteBlockWithBackend iterates the given WAL block but flushes it to the given backend instead of the default TempoDB backend. The new block will have the same ID as the input block.
(ctx context.Context, block common.WALBlock, r backend.Reader, w backend.Writer)
| 252 | // CompleteBlockWithBackend iterates the given WAL block but flushes it to the given backend instead of the default TempoDB backend. The |
| 253 | // new block will have the same ID as the input block. |
| 254 | func (rw *readerWriter) CompleteBlockWithBackend(ctx context.Context, block common.WALBlock, r backend.Reader, w backend.Writer) (common.BackendBlock, error) { |
| 255 | // The destination block format: |
| 256 | vers, err := encoding.FromVersionForWrites(rw.cfg.Block.Version) |
| 257 | if err != nil { |
| 258 | return nil, err |
| 259 | } |
| 260 | |
| 261 | // force flush anything left in the wal |
| 262 | err = block.Flush() |
| 263 | if err != nil { |
| 264 | return nil, fmt.Errorf("error flushing wal block: %w", err) |
| 265 | } |
| 266 | |
| 267 | iter, err := block.Iterator(ctx) |
| 268 | if err != nil { |
| 269 | return nil, err |
| 270 | } |
| 271 | defer iter.Close() |
| 272 | |
| 273 | walMeta := block.BlockMeta() |
| 274 | |
| 275 | inMeta := &backend.BlockMeta{ |
| 276 | // From the wal block |
| 277 | TenantID: walMeta.TenantID, |
| 278 | BlockID: walMeta.BlockID, |
| 279 | TotalObjects: walMeta.TotalObjects, |
| 280 | StartTime: walMeta.StartTime, |
| 281 | EndTime: walMeta.EndTime, |
| 282 | DedicatedColumns: walMeta.DedicatedColumns, |
| 283 | } |
| 284 | |
| 285 | newMeta, err := vers.CreateBlock(ctx, rw.cfg.Block, inMeta, iter, r, w) |
| 286 | if err != nil { |
| 287 | return nil, fmt.Errorf("error creating block: %w", err) |
| 288 | } |
| 289 | |
| 290 | backendBlock, err := encoding.OpenBlock(newMeta, r) |
| 291 | if err != nil { |
| 292 | return nil, fmt.Errorf("error opening new block: %w", err) |
| 293 | } |
| 294 | |
| 295 | return backendBlock, nil |
| 296 | } |
| 297 | |
| 298 | func (rw *readerWriter) DeleteNoCompactFlag(ctx context.Context, tenantID string, blockID backend.UUID) error { |
| 299 | return rw.w.DeleteNoCompactFlag(ctx, (uuid.UUID)(blockID), tenantID) |
no test coverage detected