diff --git a/.chloggen/enable-pull-based-exporter.yaml b/.chloggen/enable-pull-based-exporter.yaml new file mode 100644 index 00000000000..a0260967cd2 --- /dev/null +++ b/.chloggen/enable-pull-based-exporter.yaml @@ -0,0 +1,25 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver) +component: exporterhelper + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Enable the new pull-based batcher in exporterhelper + +# One or more tracking issues or pull requests related to the change +issues: [12291] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [user] diff --git a/exporter/exporterhelper/internal/batch_sender_test.go b/exporter/exporterhelper/internal/batch_sender_test.go index 9b3a12e462a..d6b49745bc0 100644 --- a/exporter/exporterhelper/internal/batch_sender_test.go +++ b/exporter/exporterhelper/internal/batch_sender_test.go @@ -376,6 +376,14 @@ func TestBatchSender_ConcurrencyLimitReached(t *testing.T) { expectedItems: 51, }, } + + // Why do we not expect the same behavior when usePullingBasedExporterQueueBatcher is true? + // This test checks that when concurrency limit of batch_sender is reached, the batch_sender will flush immediately. + // To avoid blocking, the concurrency limit is set to the number of concurrent goroutines that are in charge of + // reading from the queue and adding to batch. With the new model, we are pulling instead of pushing so we don't + // block the reading goroutine anymore. + defer setFeatureGateForTest(t, usePullingBasedExporterQueueBatcher, false)() + for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { qCfg := exporterqueue.NewDefaultConfig() diff --git a/exporter/exporterhelper/internal/queue_sender.go b/exporter/exporterhelper/internal/queue_sender.go index 1b7d569ac3f..093c39a5591 100644 --- a/exporter/exporterhelper/internal/queue_sender.go +++ b/exporter/exporterhelper/internal/queue_sender.go @@ -19,7 +19,7 @@ import ( var usePullingBasedExporterQueueBatcher = featuregate.GlobalRegistry().MustRegister( "exporter.UsePullingBasedExporterQueueBatcher", - featuregate.StageAlpha, + featuregate.StageBeta, featuregate.WithRegisterFromVersion("v0.115.0"), featuregate.WithRegisterDescription("if set to true, turns on the pulling-based exporter queue bathcer"), )