Skip to content

Commit 5b28ee0

Browse files
authored
[receiver/kafka][exporter/kafka] Do not expose programmatic API via NewFactory (#38874)
#### Description It seems suspect to offer a FactoryFunc func on both kafka receivers and exporters, when they don't offer any changes to the factory struct, given that it has no fields and no exposed functions that can be overridden. This PR removes the vararg used by NewFactory for both components, bringing the API in line with what is expected of components. The change is considered a breaking change, however the API signature is the same if the vararg is not used.
1 parent a8f308e commit 5b28ee0

File tree

5 files changed

+71
-38
lines changed

5 files changed

+71
-38
lines changed

.chloggen/implement_factory_api.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: kakfaexporter
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Disable exposing factory options programmatically on NewFactory.
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [38874]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [api]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: breaking
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: kafkareceiver
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Disable exposing factory options programmatically on NewFactory.
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [38874]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [api]

exporter/kafkaexporter/factory.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,14 @@ const (
2727
defaultPartitionLogsByResourceAttributesEnabled = false
2828
)
2929

30-
// FactoryOption applies changes to kafkaExporterFactory.
31-
type FactoryOption func(factory *kafkaExporterFactory)
32-
3330
// NewFactory creates Kafka exporter factory.
34-
func NewFactory(options ...FactoryOption) exporter.Factory {
35-
f := &kafkaExporterFactory{}
36-
for _, o := range options {
37-
o(f)
38-
}
31+
func NewFactory() exporter.Factory {
3932
return exporter.NewFactory(
4033
metadata.Type,
4134
createDefaultConfig,
42-
exporter.WithTraces(f.createTracesExporter, metadata.TracesStability),
43-
exporter.WithMetrics(f.createMetricsExporter, metadata.MetricsStability),
44-
exporter.WithLogs(f.createLogsExporter, metadata.LogsStability),
35+
exporter.WithTraces(createTracesExporter, metadata.TracesStability),
36+
exporter.WithMetrics(createMetricsExporter, metadata.MetricsStability),
37+
exporter.WithLogs(createLogsExporter, metadata.LogsStability),
4538
)
4639
}
4740

@@ -60,9 +53,7 @@ func createDefaultConfig() component.Config {
6053
}
6154
}
6255

63-
type kafkaExporterFactory struct{}
64-
65-
func (f *kafkaExporterFactory) createTracesExporter(
56+
func createTracesExporter(
6657
ctx context.Context,
6758
set exporter.Settings,
6859
cfg component.Config,
@@ -90,7 +81,7 @@ func (f *kafkaExporterFactory) createTracesExporter(
9081
exporterhelper.WithShutdown(exp.Close))
9182
}
9283

93-
func (f *kafkaExporterFactory) createMetricsExporter(
84+
func createMetricsExporter(
9485
ctx context.Context,
9586
set exporter.Settings,
9687
cfg component.Config,
@@ -118,7 +109,7 @@ func (f *kafkaExporterFactory) createMetricsExporter(
118109
exporterhelper.WithShutdown(exp.Close))
119110
}
120111

121-
func (f *kafkaExporterFactory) createLogsExporter(
112+
func createLogsExporter(
122113
ctx context.Context,
123114
set exporter.Settings,
124115
cfg component.Config,

receiver/kafkareceiver/factory.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,14 @@ const (
4444

4545
var errUnrecognizedEncoding = errors.New("unrecognized encoding")
4646

47-
// FactoryOption applies changes to kafkaExporterFactory.
48-
type FactoryOption func(factory *kafkaReceiverFactory)
49-
5047
// NewFactory creates Kafka receiver factory.
51-
func NewFactory(options ...FactoryOption) receiver.Factory {
52-
f := &kafkaReceiverFactory{}
53-
for _, o := range options {
54-
o(f)
55-
}
48+
func NewFactory() receiver.Factory {
5649
return receiver.NewFactory(
5750
metadata.Type,
5851
createDefaultConfig,
59-
receiver.WithTraces(f.createTracesReceiver, metadata.TracesStability),
60-
receiver.WithMetrics(f.createMetricsReceiver, metadata.MetricsStability),
61-
receiver.WithLogs(f.createLogsReceiver, metadata.LogsStability),
52+
receiver.WithTraces(createTracesReceiver, metadata.TracesStability),
53+
receiver.WithMetrics(createMetricsReceiver, metadata.MetricsStability),
54+
receiver.WithLogs(createLogsReceiver, metadata.LogsStability),
6255
)
6356
}
6457

@@ -89,9 +82,7 @@ func createDefaultConfig() component.Config {
8982
}
9083
}
9184

92-
type kafkaReceiverFactory struct{}
93-
94-
func (f *kafkaReceiverFactory) createTracesReceiver(
85+
func createTracesReceiver(
9586
_ context.Context,
9687
set receiver.Settings,
9788
cfg component.Config,
@@ -109,7 +100,7 @@ func (f *kafkaReceiverFactory) createTracesReceiver(
109100
return r, nil
110101
}
111102

112-
func (f *kafkaReceiverFactory) createMetricsReceiver(
103+
func createMetricsReceiver(
113104
_ context.Context,
114105
set receiver.Settings,
115106
cfg component.Config,
@@ -127,7 +118,7 @@ func (f *kafkaReceiverFactory) createMetricsReceiver(
127118
return r, nil
128119
}
129120

130-
func (f *kafkaReceiverFactory) createLogsReceiver(
121+
func createLogsReceiver(
131122
_ context.Context,
132123
set receiver.Settings,
133124
cfg component.Config,

receiver/kafkareceiver/factory_test.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ func TestCreateTraces(t *testing.T) {
3939
cfg := createDefaultConfig().(*Config)
4040
cfg.Brokers = []string{"invalid:9092"}
4141
cfg.ProtocolVersion = "2.0.0"
42-
f := kafkaReceiverFactory{}
43-
r, err := f.createTracesReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
42+
r, err := createTracesReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
4443
require.NoError(t, err)
4544
// no available broker
4645
require.Error(t, r.Start(context.Background(), componenttest.NewNopHost()))
@@ -78,8 +77,7 @@ func TestCreateMetrics(t *testing.T) {
7877
cfg := createDefaultConfig().(*Config)
7978
cfg.Brokers = []string{"invalid:9092"}
8079
cfg.ProtocolVersion = "2.0.0"
81-
f := kafkaReceiverFactory{}
82-
r, err := f.createMetricsReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
80+
r, err := createMetricsReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
8381
require.NoError(t, err)
8482
// no available broker
8583
require.Error(t, r.Start(context.Background(), componenttest.NewNopHost()))
@@ -117,8 +115,7 @@ func TestCreateLogs(t *testing.T) {
117115
cfg := createDefaultConfig().(*Config)
118116
cfg.Brokers = []string{"invalid:9092"}
119117
cfg.ProtocolVersion = "2.0.0"
120-
f := kafkaReceiverFactory{}
121-
r, err := f.createLogsReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
118+
r, err := createLogsReceiver(context.Background(), receivertest.NewNopSettings(metadata.Type), cfg, nil)
122119
require.NoError(t, err)
123120
// no available broker
124121
require.Error(t, r.Start(context.Background(), componenttest.NewNopHost()))

0 commit comments

Comments
 (0)