Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
2eb77f5
lint
jmacd Apr 30, 2025
04380f4
close
jmacd Apr 30, 2025
7444153
readme
jmacd Apr 30, 2025
e597fa1
move multi-limiter
jmacd Apr 30, 2025
e6675c8
data-dep example
jmacd Apr 30, 2025
ac0d1ec
lint
jmacd Apr 30, 2025
b3e4554
lint
jmacd Apr 30, 2025
ffad28a
Merge branch 'main' of github.com:open-telemetry/opentelemetry-collec…
jmacd May 5, 2025
b8ed41d
wip split Checker (was Limiter)
jmacd May 5, 2025
d07da61
rename
jmacd May 5, 2025
f3a2f2f
move wrapper into limiterhelper
jmacd May 6, 2025
8b31cd6
style
jmacd May 6, 2025
40aee98
call checker once
jmacd May 6, 2025
137be27
checker all keys
jmacd May 6, 2025
4a44264
readme
jmacd May 6, 2025
f873ca8
Merge branch 'main' of github.com:open-telemetry/opentelemetry-collec…
jmacd May 12, 2025
3194963
Merge branch 'main' of github.com:open-telemetry/opentelemetry-collec…
jmacd May 15, 2025
0fcdf27
Checker to BaseLimiter
jmacd May 15, 2025
0348677
create config.go
jmacd May 15, 2025
144b866
weightset
jmacd May 16, 2025
3edd1d8
add non-blocking interface resembling x/time/rate
jmacd May 16, 2025
785e665
http
jmacd May 17, 2025
294dbc5
grpc
jmacd May 17, 2025
193bd60
draft with non-blocking limiters and blocking helpers
jmacd May 20, 2025
7bdee79
Work on readme
jmacd May 20, 2025
5ddab1c
wip
jmacd May 21, 2025
1fd254c
comments
jmacd May 21, 2025
68c4cce
goroutine -> AfterFunc
jmacd May 21, 2025
c11e76e
config middleware / otlp receiver update
jmacd May 22, 2025
ecdc9d5
memorylimiter extension
jmacd May 22, 2025
d529eb0
more readme; fewer open questions
jmacd May 22, 2025
54f587b
Merge branch 'main' of github.com:open-telemetry/opentelemetry-collec…
jmacd May 22, 2025
23b4f2c
bugs fixed
jmacd May 22, 2025
ba136de
readme
jmacd May 23, 2025
b4c619c
all tidy
jmacd Jun 13, 2025
a65bed4
linked
jmacd Jun 13, 2025
e64c494
readme
jmacd Jun 14, 2025
54d1fa9
again
jmacd Jun 14, 2025
adf2019
CheckSaturation
jmacd Jun 16, 2025
adf7e9d
MustDeny->
jmacd Jun 16, 2025
8779f9b
MemorySize->RequestSize
jmacd Jun 16, 2025
570a3a2
ftb
jmacd Jun 16, 2025
ca0a9f6
diagram
jmacd Jun 16, 2025
920236a
diagram
jmacd Jun 16, 2025
5e3ed39
diagram
jmacd Jun 16, 2025
abcca80
readme
jmacd Jun 16, 2025
2b0c9ae
address grpc todo
jmacd Jun 16, 2025
91456e4
mermaid
jmacd Jun 16, 2025
8f6c3aa
more
jmacd Jun 16, 2025
0beaf7c
renames
jmacd Jun 16, 2025
170dc94
eliminate Base
jmacd Jun 16, 2025
7790d40
request bytes
jmacd Jun 16, 2025
e354c1a
wip do not read
jmacd Jun 17, 2025
ce4803f
merge
jmacd Jun 17, 2025
965692b
wip
jmacd Jun 17, 2025
a0a15b4
Impl() style; removal of SaturationChecker
jmacd Jun 18, 2025
fb4fb2e
oops wrong branch
jmacd Jun 18, 2025
e63f1d3
yess
jmacd Jun 18, 2025
8f02b64
solid
jmacd Jun 19, 2025
746fbbd
consumer limiter
jmacd Jun 19, 2025
645ccef
test middleware config flattening
jmacd Jun 19, 2025
3ec8e19
network bytes in pipeline (for reuse
jmacd Jun 20, 2025
414b176
grpc uncompressed bytes
jmacd Jun 20, 2025
6f98ace
http is a todo
jmacd Jun 20, 2025
1274e19
document this
jmacd Jun 20, 2025
ec75814
edit pattern doc
jmacd Jun 20, 2025
f4b40cf
readme
jmacd Jun 20, 2025
f549b0a
pattern
jmacd Jun 20, 2025
8e5fe08
Merge branch 'main' of github.com:open-telemetry/opentelemetry-collec…
jmacd Jun 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/otelcorecol/builder-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
- go.opentelemetry.io/collector/extension/extensioncapabilities => ../../extension/extensioncapabilities
- go.opentelemetry.io/collector/extension/extensionmiddleware => ../../extension/extensionmiddleware
- go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../../extension/extensionmiddleware/extensionmiddlewaretest
- go.opentelemetry.io/collector/extension/extensionlimiter => ../../extension/extensionlimiter

Check warning on line 86 in cmd/otelcorecol/builder-config.yaml

View workflow job for this annotation

GitHub Actions / spell-check

Unknown word (extensionlimiter)

Check warning on line 86 in cmd/otelcorecol/builder-config.yaml

View workflow job for this annotation

GitHub Actions / spell-check

Unknown word (extensionlimiter)
- go.opentelemetry.io/collector/extension/extensiontest => ../../extension/extensiontest
- go.opentelemetry.io/collector/extension/memorylimiterextension => ../../extension/memorylimiterextension
- go.opentelemetry.io/collector/extension/xextension => ../../extension/xextension
Expand Down
8 changes: 6 additions & 2 deletions cmd/otelcorecol/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module go.opentelemetry.io/collector/cmd/otelcorecol

go 1.23.0

toolchain go1.23.10
toolchain go1.24.1

require (
go.opentelemetry.io/collector/component v1.34.0
Expand Down Expand Up @@ -111,7 +111,9 @@ require (
go.opentelemetry.io/collector/exporter/xexporter v0.128.0 // indirect
go.opentelemetry.io/collector/extension/extensionauth v1.34.0 // indirect
go.opentelemetry.io/collector/extension/extensioncapabilities v0.128.0 // indirect
go.opentelemetry.io/collector/extension/extensionmiddleware v0.128.0 // indirect
go.opentelemetry.io/collector/extension/extensionlimiter v0.0.0-00010101000000-000000000000 // indirect
go.opentelemetry.io/collector/extension/extensionmiddleware v1.30.0 // indirect
go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.128.0 // indirect
go.opentelemetry.io/collector/extension/extensiontest v0.128.0 // indirect
go.opentelemetry.io/collector/extension/xextension v0.128.0 // indirect
go.opentelemetry.io/collector/featuregate v1.34.0 // indirect
Expand Down Expand Up @@ -266,6 +268,8 @@ replace go.opentelemetry.io/collector/extension/extensionmiddleware => ../../ext

replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../../extension/extensionmiddleware/extensionmiddlewaretest

replace go.opentelemetry.io/collector/extension/extensionlimiter => ../../extension/extensionlimiter

replace go.opentelemetry.io/collector/extension/extensiontest => ../../extension/extensiontest

replace go.opentelemetry.io/collector/extension/memorylimiterextension => ../../extension/memorylimiterextension
Expand Down
32 changes: 32 additions & 0 deletions component/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,20 @@
return f(ctx)
}

type componentImpl struct {
StartFunc
ShutdownFunc
}

var _ Component = componentImpl{}

func NewComponentImpl(sf StartFunc, shf ShutdownFunc) Component {
return componentImpl{
StartFunc: sf,

Check failure on line 89 in component/component.go

View workflow job for this annotation

GitHub Actions / lint

File is not properly formatted (gofumpt)
ShutdownFunc: shf,
}
}

// Kind represents component kinds.
type Kind struct {
name string
Expand Down Expand Up @@ -110,6 +124,10 @@
StabilityLevelStable
)

func (sl *StabilityLevel) Self() StabilityLevel {
return *sl
}

func (sl *StabilityLevel) UnmarshalText(in []byte) error {
str := strings.ToLower(string(in))
switch str {
Expand Down Expand Up @@ -194,3 +212,17 @@
func (f CreateDefaultConfigFunc) CreateDefaultConfig() Config {
return f()
}

type factoryImpl struct {
TypeFunc
CreateDefaultConfigFunc
}

var _ Factory = factoryImpl{}

func NewFactoryImpl(tf TypeFunc, cf CreateDefaultConfigFunc) Factory {
return factoryImpl{
TypeFunc: tf,
CreateDefaultConfigFunc: cf,
}
}
15 changes: 15 additions & 0 deletions component/identifiable.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@
return t.name
}

// Self returns itself.
func (t Type) Self() Type {
return t
}

// MarshalText marshals returns the Type name.
func (t Type) MarshalText() ([]byte, error) {
return []byte(t.name), nil
Expand Down Expand Up @@ -71,6 +76,16 @@
return ty
}

// TypeFunc is ...
type TypeFunc func() Type

// Type gets the type of the component created by this factory.
func (f TypeFunc) Type() Type {
if f == nil {

Check failure on line 84 in component/identifiable.go

View workflow job for this annotation

GitHub Actions / lint

empty-block: this block is empty, you can remove it (revive)
}
return f()
}

// ID represents the identity for a component. It combines two values:
// * type - the Type of the component.
// * name - the name of that component.
Expand Down
12 changes: 3 additions & 9 deletions config/configgrpc/client_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ type testClientMiddleware struct {
}

func newTestMiddlewareConfig(name string) configmiddleware.Config {
return configmiddleware.Config{
ID: component.MustNewID(name),
}
return configmiddleware.Config(component.MustNewID(name))
}

func newTestClientMiddleware(name string) extension.Extension {
Expand Down Expand Up @@ -162,9 +160,7 @@ func TestClientMiddlewareToClientErrors(t *testing.T) {
Insecure: true,
},
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -182,9 +178,7 @@ func TestClientMiddlewareToClientErrors(t *testing.T) {
Insecure: true,
},
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "get options failed",
Expand Down
2 changes: 1 addition & 1 deletion config/configgrpc/configgrpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ type ServerConfig struct {
IncludeMetadata bool `mapstructure:"include_metadata,omitempty"`

// Middlewares for the gRPC server.
Middlewares []configmiddleware.Config `mapstructure:"middlewares,omitempty"`
Middlewares []configmiddleware.Config `mapstructure:"middleware,omitempty"`

// prevent unkeyed literal initialization
_ struct{}
Expand Down
8 changes: 7 additions & 1 deletion config/configgrpc/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require (
go.opentelemetry.io/collector/extension v1.34.0
go.opentelemetry.io/collector/extension/extensionauth v1.34.0
go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.128.0
go.opentelemetry.io/collector/extension/extensionmiddleware v0.128.0
go.opentelemetry.io/collector/extension/extensionmiddleware v1.30.0
go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.128.0
go.opentelemetry.io/collector/pdata v1.34.0
go.opentelemetry.io/collector/pdata/testdata v0.128.0
Expand All @@ -44,6 +44,7 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/extension/extensionlimiter v0.0.0-00010101000000-000000000000 // indirect
go.opentelemetry.io/collector/featuregate v1.34.0 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.128.0 // indirect
go.opentelemetry.io/collector/pdata/pprofile v0.128.0 // indirect
Expand All @@ -59,6 +60,7 @@ require (
golang.org/x/net v0.40.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/text v0.25.0 // indirect
golang.org/x/time v0.11.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand Down Expand Up @@ -105,3 +107,7 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline
replace go.opentelemetry.io/collector/featuregate => ../../featuregate

replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../../extension/extensionmiddleware/extensionmiddlewaretest

replace go.opentelemetry.io/collector/extension/extensionlimiter => ../../extension/extensionlimiter

replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer
2 changes: 2 additions & 0 deletions config/configgrpc/go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 2 additions & 6 deletions config/configgrpc/server_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,7 @@ func TestServerMiddlewareToServerErrors(t *testing.T) {
Transport: confignet.TransportTypeTCP,
},
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -142,9 +140,7 @@ func TestServerMiddlewareToServerErrors(t *testing.T) {
Transport: confignet.TransportTypeTCP,
},
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "get server options failed",
Expand Down
20 changes: 5 additions & 15 deletions config/confighttp/client_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,7 @@ func newTestClientMiddleware(name string) component.Component {
}

func newTestClientConfig(name string) configmiddleware.Config {
return configmiddleware.Config{
ID: component.MustNewID(name),
}
return configmiddleware.Config(component.MustNewID(name))
}

func TestClientMiddlewares(t *testing.T) {
Expand Down Expand Up @@ -162,9 +160,7 @@ func TestClientMiddlewareErrors(t *testing.T) {
config: ClientConfig{
Endpoint: server.URL,
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -179,9 +175,7 @@ func TestClientMiddlewareErrors(t *testing.T) {
config: ClientConfig{
Endpoint: server.URL,
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "http middleware error",
Expand Down Expand Up @@ -216,9 +210,7 @@ func TestGRPCClientMiddlewareErrors(t *testing.T) {
config: ClientConfig{
Endpoint: "localhost:1234",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -233,9 +225,7 @@ func TestGRPCClientMiddlewareErrors(t *testing.T) {
config: ClientConfig{
Endpoint: "localhost:1234",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "grpc middleware error",
Expand Down
9 changes: 8 additions & 1 deletion config/confighttp/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ require (
go.opentelemetry.io/collector/extension v1.34.0
go.opentelemetry.io/collector/extension/extensionauth v1.34.0
go.opentelemetry.io/collector/extension/extensionauth/extensionauthtest v0.128.0
go.opentelemetry.io/collector/extension/extensionmiddleware v0.128.0
go.opentelemetry.io/collector/extension/extensionmiddleware v1.30.0
go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest v0.128.0
go.opentelemetry.io/collector/featuregate v1.34.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0
Expand All @@ -42,6 +42,7 @@ require (
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/collector/extension/extensionlimiter v0.0.0-00010101000000-000000000000 // indirect
go.opentelemetry.io/collector/internal/telemetry v0.128.0 // indirect
go.opentelemetry.io/collector/pdata v1.34.0 // indirect
go.opentelemetry.io/contrib/bridges/otelzap v0.11.0 // indirect
Expand Down Expand Up @@ -72,6 +73,8 @@ replace go.opentelemetry.io/collector/config/configtls => ../configtls

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

replace go.opentelemetry.io/collector/extension/extensionlimiter => ../../extension/extensionlimiter

replace go.opentelemetry.io/collector/extension/extensionauth => ../../extension/extensionauth

replace go.opentelemetry.io/collector/extension/extensionmiddleware => ../../extension/extensionmiddleware
Expand All @@ -95,3 +98,7 @@ replace go.opentelemetry.io/collector/pipeline => ../../pipeline
replace go.opentelemetry.io/collector/featuregate => ../../featuregate

replace go.opentelemetry.io/collector/extension/extensionmiddleware/extensionmiddlewaretest => ../../extension/extensionmiddleware/extensionmiddlewaretest

replace go.opentelemetry.io/collector/consumer/xconsumer => ../../consumer/xconsumer

replace go.opentelemetry.io/collector/pdata/pprofile => ../../pdata/pprofile
20 changes: 5 additions & 15 deletions config/confighttp/server_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ func newTestServerMiddleware(name string) component.Component {
}

func newTestServerConfig(name string) configmiddleware.Config {
return configmiddleware.Config{
ID: component.MustNewID(name),
}
return configmiddleware.Config(component.MustNewID(name))
}

func TestServerMiddleware(t *testing.T) {
Expand Down Expand Up @@ -154,9 +152,7 @@ func TestServerMiddlewareErrors(t *testing.T) {
config: ServerConfig{
Endpoint: "localhost:0",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -171,9 +167,7 @@ func TestServerMiddlewareErrors(t *testing.T) {
config: ServerConfig{
Endpoint: "localhost:0",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "http middleware error",
Expand Down Expand Up @@ -209,9 +203,7 @@ func TestServerMiddlewareErrors(t *testing.T) {
config: ServerConfig{
Endpoint: "localhost:0",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("nonexistent"),
},
configmiddleware.Config(component.MustNewID("nonexistent")),
},
},
errText: "failed to resolve middleware \"nonexistent\": middleware not found",
Expand All @@ -226,9 +218,7 @@ func TestServerMiddlewareErrors(t *testing.T) {
config: ServerConfig{
Endpoint: "localhost:0",
Middlewares: []configmiddleware.Config{
{
ID: component.MustNewID("errormw"),
},
configmiddleware.Config(component.MustNewID("errormw")),
},
},
errText: "grpc middleware error",
Expand Down
Loading
Loading