Skip to content

Commit 05ba149

Browse files
committed
[exporter/awss3] Implement timeout
1 parent bef122e commit 05ba149

File tree

6 files changed

+72
-15
lines changed

6 files changed

+72
-15
lines changed

.chloggen/awss3exporter-timeout.yaml

+27
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: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: awss3exporter
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Implement timeout for S3 exporter
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: [36264]
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: [user]

exporter/awss3exporter/README.md

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ The following exporter configuration parameters are supported.
3737
| `disable_ssl` | set this to `true` to disable SSL when sending requests | false |
3838
| `compression` | should the file be compressed | none |
3939
| `sending_queue` | [exporters common queuing](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md) | disabled |
40+
| `timeout` | [exporters common timeout](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md) | 5s |
41+
4042

4143
### Marshaler
4244

@@ -76,6 +78,9 @@ exporters:
7678
enabled: true
7779
num_consumers: 10
7880
queue_size: 100
81+
82+
# Optional (5s by default)
83+
timeout: 20s
7984
```
8085
8186
Logs and traces will be stored inside 'databucket' in the following path format.

exporter/awss3exporter/config.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ const (
5353

5454
// Config contains the main configuration options for the s3 exporter
5555
type Config struct {
56-
QueueSettings exporterhelper.QueueConfig `mapstructure:"sending_queue"`
57-
58-
S3Uploader S3UploaderConfig `mapstructure:"s3uploader"`
59-
MarshalerName MarshalerType `mapstructure:"marshaler"`
56+
QueueSettings exporterhelper.QueueConfig `mapstructure:"sending_queue"`
57+
TimeoutSettings exporterhelper.TimeoutConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
58+
S3Uploader S3UploaderConfig `mapstructure:"s3uploader"`
59+
MarshalerName MarshalerType `mapstructure:"marshaler"`
6060

6161
// Encoding to apply. If present, overrides the marshaler configuration option.
6262
Encoding *component.ID `mapstructure:"encoding"`

exporter/awss3exporter/config_test.go

+29-10
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ func TestLoadConfig(t *testing.T) {
3434

3535
queueCfg := exporterhelper.NewDefaultQueueConfig()
3636
queueCfg.Enabled = false
37+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
3738

3839
assert.Equal(t, &Config{
3940
QueueSettings: queueCfg,
41+
TimeoutSettings: timeoutCfg,
4042
Encoding: &encoding,
4143
EncodingFileExtension: "baz",
4244
S3Uploader: S3UploaderConfig{
@@ -69,10 +71,15 @@ func TestConfig(t *testing.T) {
6971
QueueSize: 42,
7072
}
7173

74+
timeoutCfg := exporterhelper.TimeoutConfig{
75+
Timeout: 8,
76+
}
77+
7278
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
7379

7480
assert.Equal(t, &Config{
75-
QueueSettings: queueCfg,
81+
QueueSettings: queueCfg,
82+
TimeoutSettings: timeoutCfg,
7683
S3Uploader: S3UploaderConfig{
7784
Region: "us-east-1",
7885
S3Bucket: "foo",
@@ -103,6 +110,7 @@ func TestConfigS3StorageClass(t *testing.T) {
103110
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
104111
queueCfg := exporterhelper.NewDefaultQueueConfig()
105112
queueCfg.Enabled = false
113+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
106114

107115
assert.Equal(t, &Config{
108116
S3Uploader: S3UploaderConfig{
@@ -114,8 +122,9 @@ func TestConfigS3StorageClass(t *testing.T) {
114122
StorageClass: "STANDARD_IA",
115123
ACL: "private",
116124
},
117-
QueueSettings: queueCfg,
118-
MarshalerName: "otlp_json",
125+
QueueSettings: queueCfg,
126+
TimeoutSettings: timeoutCfg,
127+
MarshalerName: "otlp_json",
119128
}, e,
120129
)
121130
}
@@ -136,6 +145,7 @@ func TestConfigS3ACL(t *testing.T) {
136145
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
137146
queueCfg := exporterhelper.NewDefaultQueueConfig()
138147
queueCfg.Enabled = false
148+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
139149

140150
assert.Equal(t, &Config{
141151
S3Uploader: S3UploaderConfig{
@@ -147,8 +157,9 @@ func TestConfigS3ACL(t *testing.T) {
147157
StorageClass: "STANDARD_IA",
148158
ACL: "private",
149159
},
150-
QueueSettings: queueCfg,
151-
MarshalerName: "otlp_json",
160+
QueueSettings: queueCfg,
161+
TimeoutSettings: timeoutCfg,
162+
MarshalerName: "otlp_json",
152163
}, e,
153164
)
154165
}
@@ -167,11 +178,13 @@ func TestConfigForS3CompatibleSystems(t *testing.T) {
167178

168179
queueCfg := exporterhelper.NewDefaultQueueConfig()
169180
queueCfg.Enabled = false
181+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
170182

171183
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
172184

173185
assert.Equal(t, &Config{
174-
QueueSettings: queueCfg,
186+
QueueSettings: queueCfg,
187+
TimeoutSettings: timeoutCfg,
175188
S3Uploader: S3UploaderConfig{
176189
Region: "us-east-1",
177190
S3Bucket: "foo",
@@ -283,11 +296,13 @@ func TestMarshallerName(t *testing.T) {
283296

284297
queueCfg := exporterhelper.NewDefaultQueueConfig()
285298
queueCfg.Enabled = false
299+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
286300

287301
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
288302

289303
assert.Equal(t, &Config{
290-
QueueSettings: queueCfg,
304+
QueueSettings: queueCfg,
305+
TimeoutSettings: timeoutCfg,
291306
S3Uploader: S3UploaderConfig{
292307
Region: "us-east-1",
293308
S3Bucket: "foo",
@@ -302,7 +317,8 @@ func TestMarshallerName(t *testing.T) {
302317
e = cfg.Exporters[component.MustNewIDWithName("awss3", "proto")].(*Config)
303318

304319
assert.Equal(t, &Config{
305-
QueueSettings: queueCfg,
320+
QueueSettings: queueCfg,
321+
TimeoutSettings: timeoutCfg,
306322
S3Uploader: S3UploaderConfig{
307323
Region: "us-east-1",
308324
S3Bucket: "bar",
@@ -329,11 +345,13 @@ func TestCompressionName(t *testing.T) {
329345

330346
queueCfg := exporterhelper.NewDefaultQueueConfig()
331347
queueCfg.Enabled = false
348+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
332349

333350
e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
334351

335352
assert.Equal(t, &Config{
336-
QueueSettings: queueCfg,
353+
QueueSettings: queueCfg,
354+
TimeoutSettings: timeoutCfg,
337355
S3Uploader: S3UploaderConfig{
338356
Region: "us-east-1",
339357
S3Bucket: "foo",
@@ -349,7 +367,8 @@ func TestCompressionName(t *testing.T) {
349367
e = cfg.Exporters[component.MustNewIDWithName("awss3", "proto")].(*Config)
350368

351369
assert.Equal(t, &Config{
352-
QueueSettings: queueCfg,
370+
QueueSettings: queueCfg,
371+
TimeoutSettings: timeoutCfg,
353372
S3Uploader: S3UploaderConfig{
354373
Region: "us-east-1",
355374
S3Bucket: "bar",

exporter/awss3exporter/factory.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ func NewFactory() exporter.Factory {
2828
func createDefaultConfig() component.Config {
2929
queueCfg := exporterhelper.NewDefaultQueueConfig()
3030
queueCfg.Enabled = false
31+
timeoutCfg := exporterhelper.NewDefaultTimeoutConfig()
3132

3233
return &Config{
33-
QueueSettings: queueCfg,
34+
QueueSettings: queueCfg,
35+
TimeoutSettings: timeoutCfg,
3436
S3Uploader: S3UploaderConfig{
3537
Region: "us-east-1",
3638
S3PartitionFormat: "year=%Y/month=%m/day=%d/hour=%H/minute=%M",
@@ -57,6 +59,7 @@ func createLogsExporter(ctx context.Context,
5759
s3Exporter.ConsumeLogs,
5860
exporterhelper.WithStart(s3Exporter.start),
5961
exporterhelper.WithQueue(cfg.QueueSettings),
62+
exporterhelper.WithTimeout(cfg.TimeoutSettings),
6063
)
6164
}
6265

@@ -80,6 +83,7 @@ func createMetricsExporter(ctx context.Context,
8083
s3Exporter.ConsumeMetrics,
8184
exporterhelper.WithStart(s3Exporter.start),
8285
exporterhelper.WithQueue(cfg.QueueSettings),
86+
exporterhelper.WithTimeout(cfg.TimeoutSettings),
8387
)
8488
}
8589

@@ -104,6 +108,7 @@ func createTracesExporter(ctx context.Context,
104108
s3Exporter.ConsumeTraces,
105109
exporterhelper.WithStart(s3Exporter.start),
106110
exporterhelper.WithQueue(cfg.QueueSettings),
111+
exporterhelper.WithTimeout(cfg.TimeoutSettings),
107112
)
108113
}
109114

exporter/awss3exporter/testdata/config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ exporters:
77
enabled: true
88
num_consumers: 23
99
queue_size: 42
10+
timeout: 8
1011

1112
s3uploader:
1213
region: 'us-east-1'

0 commit comments

Comments
 (0)