Skip to content

Commit 46d0f73

Browse files
mx-psievan-bradley
andauthored
[extension] Move optional interfaces to extensioncapabilities (#11000)
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue. Ex. Adding a feature - Explain what this achieves.--> #### Description <!-- Issue number if applicable --> Moves extension optional interfaces to a new module, `extensioncapabilities`. The intent is to be able to evolve these interfaces independently from the core interfaces on core. These are used by at most one component/project, so I think they are not mature yet for 1.0 --------- Co-authored-by: Evan Bradley <[email protected]>
1 parent a26068b commit 46d0f73

File tree

22 files changed

+297
-44
lines changed

22 files changed

+297
-44
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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: deprecation
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: extension
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Deprecate `extension.ConfigWatcher`, `extension.PipelineWatcher` and `extension.Dependent` in favor of equivalents in the `extensioncapabilities` module.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [11000]
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+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: [api]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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: new_component
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: extensioncapabilities
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Create a new module for optional extension capabilities.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [11000]
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+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: [api]

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ check-contrib:
293293
-replace go.opentelemetry.io/collector/extension=$(CURDIR)/extension \
294294
-replace go.opentelemetry.io/collector/extension/auth=$(CURDIR)/extension/auth \
295295
-replace go.opentelemetry.io/collector/extension/experimental/storage=$(CURDIR)/extension/experimental/storage \
296+
-replace go.opentelemetry.io/collector/extension/extensioncapabilities=$(CURDIR)/extension/extensioncapabilities \
296297
-replace go.opentelemetry.io/collector/extension/memorylimiterextension=$(CURDIR)/extension/memorylimiterextension \
297298
-replace go.opentelemetry.io/collector/extension/zpagesextension=$(CURDIR)/extension/zpagesextension \
298299
-replace go.opentelemetry.io/collector/featuregate=$(CURDIR)/featuregate \

cmd/builder/internal/builder/main_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ var (
7474
"/extension",
7575
"/extension/auth",
7676
"/extension/experimental/storage",
77+
"/extension/extensioncapabilities",
7778
"/extension/zpagesextension",
7879
"/featuregate",
7980
"/internal/globalgates",

cmd/builder/test/core.builder.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ replaces:
5050
- go.opentelemetry.io/collector/extension => ${WORKSPACE_DIR}/extension
5151
- go.opentelemetry.io/collector/extension/auth => ${WORKSPACE_DIR}/extension/auth
5252
- go.opentelemetry.io/collector/extension/experimental/storage => ${WORKSPACE_DIR}/extension/experimental/storage
53+
- go.opentelemetry.io/collector/extension/extensioncapabilities => ${WORKSPACE_DIR}/extension/extensioncapabilities
5354
- go.opentelemetry.io/collector/extension/zpagesextension => ${WORKSPACE_DIR}/extension/zpagesextension
5455
- go.opentelemetry.io/collector/featuregate => ${WORKSPACE_DIR}/featuregate
5556
- go.opentelemetry.io/collector/internal/globalgates => ${WORKSPACE_DIR}/internal/globalgates

cmd/otelcorecol/builder-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ replaces:
7878
- go.opentelemetry.io/collector/extension => ../../extension
7979
- go.opentelemetry.io/collector/extension/auth => ../../extension/auth
8080
- go.opentelemetry.io/collector/extension/experimental/storage => ../../extension/experimental/storage
81+
- go.opentelemetry.io/collector/extension/extensioncapabilities => ../../extension/extensioncapabilities
8182
- go.opentelemetry.io/collector/extension/memorylimiterextension => ../../extension/memorylimiterextension
8283
- go.opentelemetry.io/collector/extension/zpagesextension => ../../extension/zpagesextension
8384
- go.opentelemetry.io/collector/featuregate => ../../featuregate

cmd/otelcorecol/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ require (
100100
go.opentelemetry.io/collector/exporter/exporterprofiles v0.108.1 // indirect
101101
go.opentelemetry.io/collector/extension/auth v0.108.1 // indirect
102102
go.opentelemetry.io/collector/extension/experimental/storage v0.0.0-20240902085631-cd1f7623fe67 // indirect
103+
go.opentelemetry.io/collector/extension/extensioncapabilities v0.108.1 // indirect
103104
go.opentelemetry.io/collector/featuregate v1.14.1 // indirect
104105
go.opentelemetry.io/collector/internal/globalgates v0.108.1 // indirect
105106
go.opentelemetry.io/collector/pdata v1.14.1 // indirect
@@ -223,6 +224,8 @@ replace go.opentelemetry.io/collector/extension/auth => ../../extension/auth
223224

224225
replace go.opentelemetry.io/collector/extension/experimental/storage => ../../extension/experimental/storage
225226

227+
replace go.opentelemetry.io/collector/extension/extensioncapabilities => ../../extension/extensioncapabilities
228+
226229
replace go.opentelemetry.io/collector/extension/memorylimiterextension => ../../extension/memorylimiterextension
227230

228231
replace go.opentelemetry.io/collector/extension/zpagesextension => ../../extension/zpagesextension

extension/extension.go

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,48 +8,22 @@ import (
88
"fmt"
99

1010
"go.opentelemetry.io/collector/component"
11-
"go.opentelemetry.io/collector/confmap"
11+
"go.opentelemetry.io/collector/extension/internal"
1212
)
1313

1414
// Extension is the interface for objects hosted by the OpenTelemetry Collector that
1515
// don't participate directly on data pipelines but provide some functionality
1616
// to the service, examples: health check endpoint, z-pages, etc.
17-
type Extension = component.Component
18-
19-
// Dependent is an optional interface that can be implemented by extensions
20-
// that depend on other extensions and must be started only after their dependencies.
21-
// See https://github.com/open-telemetry/opentelemetry-collector/pull/8768 for examples.
22-
type Dependent interface {
23-
Extension
24-
Dependencies() []component.ID
25-
}
17+
type Extension = internal.Extension
2618

27-
// PipelineWatcher is an extra interface for Extension hosted by the OpenTelemetry
28-
// Collector that is to be implemented by extensions interested in changes to pipeline
29-
// states. Typically this will be used by extensions that change their behavior if data is
30-
// being ingested or not, e.g.: a k8s readiness probe.
31-
type PipelineWatcher interface {
32-
// Ready notifies the Extension that all pipelines were built and the
33-
// receivers were started, i.e.: the service is ready to receive data
34-
// (note that it may already have received data when this method is called).
35-
Ready() error
36-
37-
// NotReady notifies the Extension that all receivers are about to be stopped,
38-
// i.e.: pipeline receivers will not accept new data.
39-
// This is sent before receivers are stopped, so the Extension can take any
40-
// appropriate actions before that happens.
41-
NotReady() error
42-
}
19+
// Deprecated: [v0.109.0] Use [extensioncapabilities.Dependent] instead.
20+
type Dependent = internal.Dependent
4321

44-
// ConfigWatcher is an interface that should be implemented by an extension that
45-
// wishes to be notified of the Collector's effective configuration.
46-
type ConfigWatcher interface {
47-
// NotifyConfig notifies the extension of the Collector's current effective configuration.
48-
// The extension owns the `confmap.Conf`. Callers must ensure that it's safe for
49-
// extensions to store the `conf` pointer and use it concurrently with any other
50-
// instances of `conf`.
51-
NotifyConfig(ctx context.Context, conf *confmap.Conf) error
52-
}
22+
// Deprecated: [v0.109.0] Use [extensioncapabilities.PipelineWatcher] instead.
23+
type PipelineWatcher = internal.PipelineWatcher
24+
25+
// Deprecated: [v0.109.0] Use [extensioncapabilities.ConfigWatcher] instead.
26+
type ConfigWatcher = internal.ConfigWatcher
5327

5428
// ModuleInfo describes the go module for each component.
5529
type ModuleInfo struct {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include ../../Makefile.Common
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
module go.opentelemetry.io/collector/extension/extensioncapabilities
2+
3+
go 1.22.0
4+
5+
require go.opentelemetry.io/collector/extension v0.108.0
6+
7+
require (
8+
github.com/go-viper/mapstructure/v2 v2.1.0 // indirect
9+
github.com/gogo/protobuf v1.3.2 // indirect
10+
github.com/knadh/koanf/maps v0.1.1 // indirect
11+
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
12+
github.com/knadh/koanf/v2 v2.1.1 // indirect
13+
github.com/mitchellh/copystructure v1.2.0 // indirect
14+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
15+
go.opentelemetry.io/collector/component v0.108.1 // indirect
16+
go.opentelemetry.io/collector/config/configtelemetry v0.108.1 // indirect
17+
go.opentelemetry.io/collector/confmap v1.14.1 // indirect
18+
go.opentelemetry.io/collector/pdata v1.14.1 // indirect
19+
go.opentelemetry.io/otel v1.29.0 // indirect
20+
go.opentelemetry.io/otel/metric v1.29.0 // indirect
21+
go.opentelemetry.io/otel/trace v1.29.0 // indirect
22+
go.uber.org/multierr v1.11.0 // indirect
23+
go.uber.org/zap v1.27.0 // indirect
24+
golang.org/x/net v0.27.0 // indirect
25+
golang.org/x/sys v0.24.0 // indirect
26+
golang.org/x/text v0.16.0 // indirect
27+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
28+
google.golang.org/grpc v1.66.0 // indirect
29+
google.golang.org/protobuf v1.34.2 // indirect
30+
gopkg.in/yaml.v3 v3.0.1 // indirect
31+
)
32+
33+
replace go.opentelemetry.io/collector/extension => ../
34+
35+
replace go.opentelemetry.io/collector/pdata => ../../pdata
36+
37+
replace go.opentelemetry.io/collector/confmap => ../../confmap
38+
39+
replace go.opentelemetry.io/collector/config/configtelemetry => ../../config/configtelemetry
40+
41+
replace go.opentelemetry.io/collector/component => ../../component
42+
43+
replace go.opentelemetry.io/collector/component/componentstatus => ../../component/componentstatus

0 commit comments

Comments
 (0)