Skip to content

Commit 357ed87

Browse files
committed
review feedback
1 parent 7f8952f commit 357ed87

File tree

2 files changed

+31
-46
lines changed

2 files changed

+31
-46
lines changed

exporter/otelarrowexporter/metadata.go

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import (
2828
var (
2929
// errTooManyExporters is returned when the MetadataCardinalityLimit has been reached.
3030
errTooManyExporters = consumererror.NewPermanent(errors.New("too many exporter metadata-value combinations"))
31-
// errUnexpectedType is returned when the object in the map isn't the expected type
32-
errUnexpectedType = errors.New("unexpected type in map")
3331
)
3432

3533
type metadataExporter struct {
@@ -95,11 +93,7 @@ func (e *metadataExporter) start(_ context.Context, host component.Host) (err er
9593
func (e *metadataExporter) shutdown(ctx context.Context) error {
9694
var err error
9795
e.exporters.Range(func(_ any, value any) bool {
98-
be, ok := value.(exp)
99-
if !ok {
100-
err = multierr.Append(err, fmt.Errorf("%w: %T", errUnexpectedType, value))
101-
return true
102-
}
96+
be := value.(exp)
10397
err = multierr.Append(err, be.shutdown(ctx))
10498
return true
10599
})
@@ -140,45 +134,42 @@ func (e *metadataExporter) pushLogs(ctx context.Context, ld plog.Logs) error {
140134

141135
func (e *metadataExporter) getOrCreateExporter(ctx context.Context, s attribute.Set, md metadata.MD) (exp, error) {
142136
v, ok := e.exporters.Load(s)
143-
if !ok {
144-
e.lock.Lock()
145-
if e.config.MetadataCardinalityLimit != 0 && e.size >= int(e.config.MetadataCardinalityLimit) {
146-
e.lock.Unlock()
147-
return nil, errTooManyExporters
148-
}
137+
if ok {
138+
return v.(exp), nil
139+
}
149140

150-
newExp, err := newExporter(e.config, e.settings, e.scf)
151-
if err != nil {
152-
return nil, fmt.Errorf("failed to create exporter: %w", err)
153-
}
141+
e.lock.Lock()
142+
defer e.lock.Unlock()
154143

155-
var loaded bool
156-
v, loaded = e.exporters.LoadOrStore(s, newExp)
157-
if !loaded {
158-
// Start the goroutine only if we added the object to the map, otherwise is already started.
159-
be, valid := newExp.(*baseExporter)
160-
if !valid {
161-
return nil, fmt.Errorf("%w: %T", errUnexpectedType, newExp)
162-
}
163-
// set metadata keys for base exporter to add them to the outgoing context.
164-
be.setMetadata(md)
165-
166-
err = newExp.start(ctx, e.host)
167-
if err != nil {
168-
e.exporters.Delete(s)
169-
return nil, fmt.Errorf("failed to start exporter: %w", err)
170-
}
171-
e.size++
172-
}
173-
e.lock.Unlock()
144+
if e.config.MetadataCardinalityLimit != 0 && e.size >= int(e.config.MetadataCardinalityLimit) {
145+
return nil, errTooManyExporters
146+
}
147+
148+
newExp, err := newExporter(e.config, e.settings, e.scf)
149+
if err != nil {
150+
return nil, fmt.Errorf("failed to create exporter: %w", err)
174151
}
175-
val, ok := v.(exp)
176-
if !ok {
177-
return nil, fmt.Errorf("%w: %T", errUnexpectedType, v)
152+
153+
var loaded bool
154+
v, loaded = e.exporters.LoadOrStore(s, newExp)
155+
if !loaded {
156+
// set metadata keys for base exporter to add them to the outgoing context.
157+
newExp.(*baseExporter).setMetadata(md)
158+
159+
// Start the goroutine only if we added the object to the map, otherwise is already started.
160+
err = newExp.start(ctx, e.host)
161+
if err != nil {
162+
e.exporters.Delete(s)
163+
return nil, fmt.Errorf("failed to start exporter: %w", err)
164+
}
165+
e.size++
178166
}
179-
return val, nil
167+
168+
return v.(exp), nil
180169
}
181170

171+
// getAttrSet is code taken from the core collector's batchprocessor multibatch logic.
172+
// https://github.com/open-telemetry/opentelemetry-collector/blob/v0.107.0/processor/batchprocessor/batch_processor.go#L298
182173
func (e *metadataExporter) getAttrSet(ctx context.Context, keys []string) (attribute.Set, metadata.MD) {
183174
// Get each metadata key value, form the corresponding
184175
// attribute set for use as a map lookup key.

exporter/otelarrowexporter/metadata_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,12 @@ func TestSendTracesWithMetadata(t *testing.T) {
8282

8383
requestCount := 3
8484
spansPerRequest := 33
85-
// sentResourceSpans := ptrace.NewTraces().ResourceSpans()
8685
for requestNum := 0; requestNum < requestCount; requestNum++ {
8786
td := testdata.GenerateTraces(spansPerRequest)
8887
spans := td.ResourceSpans().At(0).ScopeSpans().At(0).Spans()
8988
for spanIndex := 0; spanIndex < spansPerRequest; spanIndex++ {
9089
spans.At(spanIndex).SetName(fmt.Sprintf("%d-%d", requestNum, spanIndex))
9190
}
92-
// td.ResourceSpans().At(0).CopyTo(sentResourceSpans.AppendEmpty())
9391

9492
num := requestNum % len(callCtxs)
9593
expectByContext[num] += spansPerRequest
@@ -99,13 +97,9 @@ func TestSendTracesWithMetadata(t *testing.T) {
9997
}
10098

10199
assert.Eventually(t, func() bool {
102-
// rcv.mux.Lock()
103-
// defer rcv.mux.Unlock()
104100
return rcv.requestCount.Load() == int32(requestCount)
105101
}, 1*time.Second, 5*time.Millisecond)
106102
assert.Eventually(t, func() bool {
107-
// rcv.mux.Lock()
108-
// defer rcv.mux.Unlock()
109103
return rcv.totalItems.Load() == int32(requestCount*spansPerRequest)
110104
}, 1*time.Second, 5*time.Millisecond)
111105
assert.Eventually(t, func() bool {

0 commit comments

Comments
 (0)