MCPcopy
hub / github.com/grafana/tempo / CreateBlock

Function CreateBlock

tempodb/encoding/vparquet5/create.go:38–123  ·  view source on GitHub ↗
(ctx context.Context, cfg *common.BlockConfig, meta *backend.BlockMeta, i common.Iterator, r backend.Reader, to backend.Writer)

Source from the content-addressed store, hash-verified

36}
37
38func CreateBlock(ctx context.Context, cfg *common.BlockConfig, meta *backend.BlockMeta, i common.Iterator, r backend.Reader, to backend.Writer) (*backend.BlockMeta, error) {
39 s, newMeta := newStreamingBlock(ctx, cfg, meta, r, to, tempo_io.NewBufferedWriter)
40
41 var next func(context.Context) error
42
43 if ii, ok := i.(*commonIterator); ok {
44 next = func(ctx context.Context) error {
45 // Use interal iterator and avoid translation to/from proto
46 id, row, err := ii.NextRow(ctx)
47 if err != nil {
48 return err
49 }
50 if row == nil {
51 return io.EOF
52 }
53 err = s.AddRaw(id, row, 0, 0) // start and end time of the wal meta are used.
54 if err != nil {
55 return err
56 }
57
58 completeBlockRowPool.Put(row)
59 return nil
60 }
61 } else {
62 // Need to convert from proto->parquet obj
63 var (
64 buffer = &Trace{}
65 connected bool
66 resMapping = dedicatedColumnsToColumnMapping(newMeta.DedicatedColumns, backend.DedicatedColumnScopeResource)
67 spanMapping = dedicatedColumnsToColumnMapping(newMeta.DedicatedColumns, backend.DedicatedColumnScopeSpan)
68 eventMapping = dedicatedColumnsToColumnMapping(newMeta.DedicatedColumns, backend.DedicatedColumnScopeEvent)
69 )
70 next = func(context.Context) error {
71 id, tr, err := i.Next(ctx)
72 if err != nil {
73 return err
74 }
75 if tr == nil {
76 return io.EOF
77 }
78
79 // Copy ID to allow it to escape the iterator.
80 id = append([]byte(nil), id...)
81
82 buffer, connected = traceToParquetWithMapping(id, tr, buffer, resMapping, spanMapping, eventMapping)
83 if !connected {
84 dataquality.WarnDisconnectedTrace(meta.TenantID, dataquality.PhaseTraceWalToComplete)
85 }
86 if buffer.RootSpanName == "" {
87 dataquality.WarnRootlessTrace(meta.TenantID, dataquality.PhaseTraceWalToComplete)
88 }
89
90 err = s.Add(buffer, 0, 0) // start and end time are set outside
91 if err != nil {
92 return err
93 }
94
95 return nil

Callers 4

RunMethod · 0.92
CreateBlockMethod · 0.70
validBlockFunction · 0.70

Calls 14

WarnDisconnectedTraceFunction · 0.92
WarnRootlessTraceFunction · 0.92
nextFunction · 0.85
newStreamingBlockFunction · 0.70
NextMethod · 0.65
AddMethod · 0.65
FlushMethod · 0.65
NextRowMethod · 0.45
AddRawMethod · 0.45
PutMethod · 0.45

Tested by 2

validBlockFunction · 0.56