Deprecated everything in exporterqueue, alias from exporterhelper (#12706)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
parent
622ce90d91
commit
2bc783c7d3
|
|
@ -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: deprecation
|
||||
|
||||
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
|
||||
component: exporterqueue
|
||||
|
||||
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
|
||||
note: Deprecated Config, NewDefaultConfig, Encoding, ErrQueueFull. Use alias from exporterhelper.
|
||||
|
||||
# One or more tracking issues or pull requests related to the change
|
||||
issues: [12706]
|
||||
|
||||
# (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: [api]
|
||||
|
|
@ -7,7 +7,6 @@ import (
|
|||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/config/configretry"
|
||||
"go.opentelemetry.io/collector/consumer"
|
||||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
)
|
||||
|
||||
|
|
@ -38,25 +37,9 @@ func WithRetry(config configretry.BackOffConfig) Option {
|
|||
return internal.WithRetry(config)
|
||||
}
|
||||
|
||||
// WithQueue overrides the default QueueConfig for an exporter.
|
||||
// The default QueueConfig is to disable queueing.
|
||||
// This option cannot be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
func WithQueue(config QueueConfig) Option {
|
||||
return internal.WithQueue(config)
|
||||
}
|
||||
|
||||
// WithCapabilities overrides the default Capabilities() function for a Consumer.
|
||||
// The default is non-mutable data.
|
||||
// TODO: Verify if we can change the default to be mutable as we do for processors.
|
||||
func WithCapabilities(capabilities consumer.Capabilities) Option {
|
||||
return internal.WithCapabilities(capabilities)
|
||||
}
|
||||
|
||||
// WithBatcher enables batching for an exporter based on custom request types.
|
||||
// For now, it can be used only with the New[Traces|Metrics|Logs]RequestExporter exporter helpers and
|
||||
// WithRequestBatchFuncs provided.
|
||||
// This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
func WithBatcher(cfg exporterbatcher.Config) Option {
|
||||
return internal.WithBatcher(cfg)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sender"
|
||||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
||||
|
|
@ -49,7 +48,7 @@ type BaseExporter struct {
|
|||
retryCfg configretry.BackOffConfig
|
||||
|
||||
queueBatchSettings QueueBatchSettings[request.Request]
|
||||
queueCfg exporterqueue.Config
|
||||
queueCfg QueueConfig
|
||||
batcherCfg exporterbatcher.Config
|
||||
}
|
||||
|
||||
|
|
@ -195,7 +194,7 @@ func WithRetry(config configretry.BackOffConfig) Option {
|
|||
// WithQueue overrides the default QueueConfig for an exporter.
|
||||
// The default QueueConfig is to disable queueing.
|
||||
// This option cannot be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
func WithQueue(cfg exporterqueue.Config) Option {
|
||||
func WithQueue(cfg QueueConfig) Option {
|
||||
return func(o *BaseExporter) error {
|
||||
if o.queueBatchSettings.Encoding == nil {
|
||||
return errors.New("WithQueue option is not available for the new request exporters, use WithQueueBatch instead")
|
||||
|
|
@ -208,7 +207,7 @@ func WithQueue(cfg exporterqueue.Config) Option {
|
|||
// This option should be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
// Experimental: This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
func WithQueueBatch(cfg exporterqueue.Config, set QueueBatchSettings[request.Request]) Option {
|
||||
func WithQueueBatch(cfg QueueConfig, set QueueBatchSettings[request.Request]) Option {
|
||||
return func(o *BaseExporter) error {
|
||||
if !cfg.Enabled {
|
||||
o.ExportFailureMessage += " Try enabling sending_queue to survive temporary failures."
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest"
|
||||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
|
@ -51,10 +50,10 @@ func TestQueueOptionsWithRequestExporter(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
require.Nil(t, bs.queueBatchSettings.Encoding)
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(exportertest.NopType), pipeline.SignalMetrics, noopExport,
|
||||
WithRetry(configretry.NewDefaultBackOffConfig()), WithQueue(exporterqueue.NewDefaultConfig()))
|
||||
WithRetry(configretry.NewDefaultBackOffConfig()), WithQueue(NewDefaultQueueConfig()))
|
||||
require.Error(t, err)
|
||||
|
||||
qCfg := exporterqueue.NewDefaultConfig()
|
||||
qCfg := NewDefaultQueueConfig()
|
||||
storageID := component.NewID(component.MustNewType("test"))
|
||||
qCfg.StorageID = &storageID
|
||||
_, err = NewBaseExporter(exportertest.NewNopSettings(exportertest.NopType), pipeline.SignalMetrics, noopExport,
|
||||
|
|
@ -70,7 +69,7 @@ func TestBaseExporterLogging(t *testing.T) {
|
|||
set.Logger = zap.New(logger)
|
||||
rCfg := configretry.NewDefaultBackOffConfig()
|
||||
rCfg.Enabled = false
|
||||
qCfg := exporterqueue.NewDefaultConfig()
|
||||
qCfg := NewDefaultQueueConfig()
|
||||
qCfg.Enabled = false
|
||||
bs, err := NewBaseExporter(set, pipeline.SignalMetrics, errExport,
|
||||
WithQueueBatchSettings(newFakeQueueBatch()),
|
||||
|
|
@ -100,7 +99,7 @@ func TestQueueRetryWithDisabledQueue(t *testing.T) {
|
|||
queueOptions: []Option{
|
||||
WithQueueBatchSettings(newFakeQueueBatch()),
|
||||
func() Option {
|
||||
qs := exporterqueue.NewDefaultConfig()
|
||||
qs := NewDefaultQueueConfig()
|
||||
qs.Enabled = false
|
||||
return WithQueue(qs)
|
||||
}(),
|
||||
|
|
@ -115,7 +114,7 @@ func TestQueueRetryWithDisabledQueue(t *testing.T) {
|
|||
name: "WithRequestQueue",
|
||||
queueOptions: []Option{
|
||||
func() Option {
|
||||
qs := exporterqueue.NewDefaultConfig()
|
||||
qs := NewDefaultQueueConfig()
|
||||
qs.Enabled = false
|
||||
return WithQueueBatch(qs, newFakeQueueBatch())
|
||||
}(),
|
||||
|
|
|
|||
|
|
@ -5,25 +5,73 @@ package internal // import "go.opentelemetry.io/collector/exporter/exporterhelpe
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sender"
|
||||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
)
|
||||
|
||||
// QueueBatchSettings is a subset of the queuebatch.Settings that are needed when used within an Exporter.
|
||||
type QueueBatchSettings[K any] struct {
|
||||
Encoding exporterqueue.Encoding[K]
|
||||
Encoding queuebatch.Encoding[K]
|
||||
Sizers map[exporterbatcher.SizerType]queuebatch.Sizer[K]
|
||||
}
|
||||
|
||||
// NewDefaultQueueConfig returns the default config for QueueConfig.
|
||||
// By default, the queue stores 1000 items of telemetry and is non-blocking when full.
|
||||
func NewDefaultQueueConfig() QueueConfig {
|
||||
return QueueConfig{
|
||||
Enabled: true,
|
||||
NumConsumers: 10,
|
||||
// By default, batches are 8192 spans, for a total of up to 8 million spans in the queue
|
||||
// This can be estimated at 1-4 GB worth of maximum memory usage
|
||||
// This default is probably still too high, and may be adjusted further down in a future release
|
||||
QueueSize: 1_000,
|
||||
Blocking: false,
|
||||
}
|
||||
}
|
||||
|
||||
// QueueConfig defines configuration for queueing requests before exporting.
|
||||
// It's supposed to be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
// Experimental: This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
type QueueConfig struct {
|
||||
// Enabled indicates whether to not enqueue batches before exporting.
|
||||
Enabled bool `mapstructure:"enabled"`
|
||||
// NumConsumers is the number of consumers from the queue.
|
||||
NumConsumers int `mapstructure:"num_consumers"`
|
||||
// QueueSize is the maximum number of requests allowed in queue at any given time.
|
||||
QueueSize int `mapstructure:"queue_size"`
|
||||
// Blocking controls the queue behavior when full.
|
||||
// If true it blocks until enough space to add the new request to the queue.
|
||||
Blocking bool `mapstructure:"blocking"`
|
||||
// StorageID if not empty, enables the persistent storage and uses the component specified
|
||||
// as a storage extension for the persistent queue
|
||||
StorageID *component.ID `mapstructure:"storage"`
|
||||
}
|
||||
|
||||
// Validate checks if the Config is valid
|
||||
func (qCfg *QueueConfig) Validate() error {
|
||||
if !qCfg.Enabled {
|
||||
return nil
|
||||
}
|
||||
if qCfg.NumConsumers <= 0 {
|
||||
return errors.New("`num_consumers` must be positive")
|
||||
}
|
||||
if qCfg.QueueSize <= 0 {
|
||||
return errors.New("`queue_size` must be positive")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewQueueSender(
|
||||
qSet queuebatch.Settings[request.Request],
|
||||
qCfg exporterqueue.Config,
|
||||
qCfg QueueConfig,
|
||||
bCfg exporterbatcher.Config,
|
||||
exportFailureMessage string,
|
||||
next sender.Sender[request.Request],
|
||||
|
|
@ -43,7 +91,7 @@ func NewQueueSender(
|
|||
return queuebatch.NewQueueBatch(qSet, newQueueBatchConfig(qCfg, bCfg), exportFunc)
|
||||
}
|
||||
|
||||
func newQueueBatchConfig(qCfg exporterqueue.Config, bCfg exporterbatcher.Config) queuebatch.Config {
|
||||
func newQueueBatchConfig(qCfg QueueConfig, bCfg exporterbatcher.Config) queuebatch.Config {
|
||||
qbCfg := queuebatch.Config{
|
||||
Enabled: true,
|
||||
WaitForResult: !qCfg.Enabled,
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/requesttest"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sender"
|
||||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/exportertest"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
)
|
||||
|
|
@ -37,7 +36,7 @@ func TestNewQueueSenderFailedRequestDropped(t *testing.T) {
|
|||
logger, observed := observer.New(zap.ErrorLevel)
|
||||
qSet.Telemetry.Logger = zap.New(logger)
|
||||
be, err := NewQueueSender(
|
||||
qSet, exporterqueue.NewDefaultConfig(), exporterbatcher.Config{}, "", sender.NewSender(func(context.Context, request.Request) error { return errors.New("some error") }))
|
||||
qSet, NewDefaultQueueConfig(), exporterbatcher.Config{}, "", sender.NewSender(func(context.Context, request.Request) error { return errors.New("some error") }))
|
||||
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, be.Start(context.Background(), componenttest.NewNopHost()))
|
||||
|
|
@ -46,3 +45,19 @@ func TestNewQueueSenderFailedRequestDropped(t *testing.T) {
|
|||
assert.Len(t, observed.All(), 1)
|
||||
assert.Equal(t, "Exporting failed. Dropping data.", observed.All()[0].Message)
|
||||
}
|
||||
|
||||
func TestQueueConfig_Validate(t *testing.T) {
|
||||
qCfg := NewDefaultQueueConfig()
|
||||
require.NoError(t, qCfg.Validate())
|
||||
|
||||
qCfg.NumConsumers = 0
|
||||
require.EqualError(t, qCfg.Validate(), "`num_consumers` must be positive")
|
||||
|
||||
qCfg = NewDefaultQueueConfig()
|
||||
qCfg.QueueSize = 0
|
||||
require.EqualError(t, qCfg.Validate(), "`queue_size` must be positive")
|
||||
|
||||
// Confirm Validate doesn't return error with invalid config when feature is disabled
|
||||
qCfg.Enabled = false
|
||||
assert.NoError(t, qCfg.Validate())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sizer"
|
||||
"go.opentelemetry.io/collector/pdata/plog"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
|
|
@ -37,7 +36,7 @@ func NewLogsQueueBatchSettings() QueueBatchSettings {
|
|||
exporterbatcher.SizerTypeRequests: NewRequestsSizer(),
|
||||
exporterbatcher.SizerTypeItems: queuebatch.NewItemsSizer(),
|
||||
exporterbatcher.SizerTypeBytes: queuebatch.BaseSizer{
|
||||
SizeofFunc: func(req request.Request) int64 {
|
||||
SizeofFunc: func(req Request) int64 {
|
||||
return int64(logsMarshaler.LogsSize(req.(*logsRequest).ld))
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sizer"
|
||||
"go.opentelemetry.io/collector/pdata/pmetric"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
|
|
@ -37,7 +36,7 @@ func NewMetricsQueueBatchSettings() QueueBatchSettings {
|
|||
exporterbatcher.SizerTypeRequests: NewRequestsSizer(),
|
||||
exporterbatcher.SizerTypeItems: queuebatch.NewItemsSizer(),
|
||||
exporterbatcher.SizerTypeBytes: queuebatch.BaseSizer{
|
||||
SizeofFunc: func(req request.Request) int64 {
|
||||
SizeofFunc: func(req Request) int64 {
|
||||
return int64(metricsMarshaler.MetricsSize(req.(*metricsRequest).md))
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -4,20 +4,49 @@
|
|||
package exporterhelper // import "go.opentelemetry.io/collector/exporter/exporterhelper"
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
"go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
)
|
||||
|
||||
// QueueConfig defines configuration for queueing batches before sending to the consumerSender.
|
||||
type QueueConfig = exporterqueue.Config
|
||||
type QueueConfig = internal.QueueConfig
|
||||
|
||||
// Deprecated: [v0.123.0] use WithQueueBatch.
|
||||
func WithRequestQueue(cfg exporterqueue.Config, encoding exporterqueue.Encoding[Request]) Option {
|
||||
func WithRequestQueue(cfg QueueConfig, encoding QueueBatchEncoding[Request]) Option {
|
||||
return WithQueueBatch(cfg, QueueBatchSettings{Encoding: encoding})
|
||||
}
|
||||
|
||||
// WithQueue overrides the default QueueConfig for an exporter.
|
||||
// The default QueueConfig is to disable queueing.
|
||||
// This option cannot be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
func WithQueue(config QueueConfig) Option {
|
||||
return internal.WithQueue(config)
|
||||
}
|
||||
|
||||
// WithBatcher enables batching for an exporter based on custom request types.
|
||||
// For now, it can be used only with the New[Traces|Metrics|Logs]RequestExporter exporter helpers and
|
||||
// WithRequestBatchFuncs provided.
|
||||
// This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
func WithBatcher(cfg exporterbatcher.Config) Option {
|
||||
return internal.WithBatcher(cfg)
|
||||
}
|
||||
|
||||
// QueueBatchConfig defines configuration for queueing and batching for the exporter.
|
||||
type QueueBatchConfig = exporterqueue.Config
|
||||
type QueueBatchConfig = internal.QueueConfig
|
||||
|
||||
// QueueBatchEncoding defines the encoding to be used if persistent queue is configured.
|
||||
// Duplicate definition with queuebatch.Encoding since aliasing generics is not supported by default.
|
||||
type QueueBatchEncoding[T any] interface {
|
||||
// Marshal is a function that can marshal a request into bytes.
|
||||
Marshal(T) ([]byte, error)
|
||||
|
||||
// Unmarshal is a function that can unmarshal bytes into a request.
|
||||
Unmarshal([]byte) (T, error)
|
||||
}
|
||||
|
||||
var ErrQueueIsFull = queuebatch.ErrQueueIsFull
|
||||
|
||||
// QueueBatchSettings are settings for the QueueBatch component.
|
||||
// They include things line Encoding to be used with persistent queue, or the available Sizers, etc.
|
||||
|
|
@ -32,14 +61,5 @@ func WithQueueBatch(cfg QueueBatchConfig, set QueueBatchSettings) Option {
|
|||
}
|
||||
|
||||
// NewDefaultQueueConfig returns the default config for QueueConfig.
|
||||
func NewDefaultQueueConfig() QueueConfig {
|
||||
return exporterqueue.Config{
|
||||
Enabled: true,
|
||||
NumConsumers: 10,
|
||||
// By default, batches are 8192 spans, for a total of up to 8 million spans in the queue
|
||||
// This can be estimated at 1-4 GB worth of maximum memory usage
|
||||
// This default is probably still too high, and may be adjusted further down in a future release
|
||||
QueueSize: 1_000,
|
||||
Blocking: false,
|
||||
}
|
||||
}
|
||||
// By default, the queue stores 1000 items of telemetry and is non-blocking when full.
|
||||
var NewDefaultQueueConfig = internal.NewDefaultQueueConfig
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@ type RequestConverterFunc[K any] func(context.Context, K) (Request, error)
|
|||
|
||||
// RequestConsumeFunc processes the request. After the function returns, the request is no longer accessible,
|
||||
// and accessing it is considered undefined behavior.
|
||||
type RequestConsumeFunc = sender.SendFunc[request.Request]
|
||||
type RequestConsumeFunc = sender.SendFunc[Request]
|
||||
|
||||
// RequestSizer is an interface that returns the size of the given request.
|
||||
type RequestSizer = queuebatch.Sizer[request.Request]
|
||||
type RequestSizer = queuebatch.Sizer[Request]
|
||||
|
||||
// NewRequestsSizer returns a RequestSizer that counts the requests by the number of requests, always returning 1.
|
||||
func NewRequestsSizer() RequestSizer {
|
||||
return queuebatch.RequestsSizer[request.Request]{}
|
||||
return queuebatch.RequestsSizer[Request]{}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"go.opentelemetry.io/collector/exporter/exporterbatcher"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/queuebatch"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/request"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper/internal/sizer"
|
||||
"go.opentelemetry.io/collector/pdata/ptrace"
|
||||
"go.opentelemetry.io/collector/pipeline"
|
||||
|
|
@ -37,7 +36,7 @@ func NewTracesQueueBatchSettings() QueueBatchSettings {
|
|||
exporterbatcher.SizerTypeRequests: NewRequestsSizer(),
|
||||
exporterbatcher.SizerTypeItems: queuebatch.NewItemsSizer(),
|
||||
exporterbatcher.SizerTypeBytes: queuebatch.BaseSizer{
|
||||
SizeofFunc: func(req request.Request) int64 {
|
||||
SizeofFunc: func(req Request) int64 {
|
||||
return int64(tracesMarshaler.TracesSize(req.(*tracesRequest).td))
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -4,33 +4,14 @@
|
|||
package exporterqueue // import "go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper"
|
||||
)
|
||||
|
||||
// Config defines configuration for queueing requests before exporting.
|
||||
// It's supposed to be used with the new exporter helpers New[Traces|Metrics|Logs]RequestExporter.
|
||||
// Experimental: This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
type Config struct {
|
||||
// Enabled indicates whether to not enqueue batches before exporting.
|
||||
Enabled bool `mapstructure:"enabled"`
|
||||
// NumConsumers is the number of consumers from the queue.
|
||||
NumConsumers int `mapstructure:"num_consumers"`
|
||||
// QueueSize is the maximum number of requests allowed in queue at any given time.
|
||||
QueueSize int `mapstructure:"queue_size"`
|
||||
// Blocking controls the queue behavior when full.
|
||||
// If true it blocks until enough space to add the new request to the queue.
|
||||
Blocking bool `mapstructure:"blocking"`
|
||||
// StorageID if not empty, enables the persistent storage and uses the component specified
|
||||
// as a storage extension for the persistent queue
|
||||
StorageID *component.ID `mapstructure:"storage"`
|
||||
}
|
||||
// Deprecated: [v0.123.0] Use exporterhelper.QueueConfig
|
||||
type Config = exporterhelper.QueueConfig
|
||||
|
||||
// NewDefaultConfig returns the default Config.
|
||||
// Experimental: This API is at the early stage of development and may change without backward compatibility
|
||||
// until https://github.com/open-telemetry/opentelemetry-collector/issues/8122 is resolved.
|
||||
// Deprecated: [v0.123.0] Use exporterhelper.NewDefaultQueueConfig.
|
||||
// Small difference that this is blocking vs the other one which is not blocking.
|
||||
func NewDefaultConfig() Config {
|
||||
return Config{
|
||||
Enabled: true,
|
||||
|
|
@ -39,17 +20,3 @@ func NewDefaultConfig() Config {
|
|||
Blocking: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Validate checks if the Config is valid
|
||||
func (qCfg *Config) Validate() error {
|
||||
if !qCfg.Enabled {
|
||||
return nil
|
||||
}
|
||||
if qCfg.NumConsumers <= 0 {
|
||||
return errors.New("`num_consumers` must be positive")
|
||||
}
|
||||
if qCfg.QueueSize <= 0 {
|
||||
return errors.New("`queue_size` must be positive")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
// Copyright The OpenTelemetry Authors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package exporterqueue
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestQueueConfig_Validate(t *testing.T) {
|
||||
qCfg := NewDefaultConfig()
|
||||
require.NoError(t, qCfg.Validate())
|
||||
|
||||
qCfg.NumConsumers = 0
|
||||
require.EqualError(t, qCfg.Validate(), "`num_consumers` must be positive")
|
||||
|
||||
qCfg = NewDefaultConfig()
|
||||
qCfg.QueueSize = 0
|
||||
require.EqualError(t, qCfg.Validate(), "`queue_size` must be positive")
|
||||
|
||||
// Confirm Validate doesn't return error with invalid config when feature is disabled
|
||||
qCfg.Enabled = false
|
||||
assert.NoError(t, qCfg.Validate())
|
||||
}
|
||||
|
|
@ -2,7 +2,15 @@
|
|||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package exporterqueue // import "go.opentelemetry.io/collector/exporter/exporterqueue"
|
||||
import (
|
||||
"go.opentelemetry.io/collector/exporter/exporterhelper"
|
||||
)
|
||||
|
||||
// Deprecated: [v0.123.0] Use exporterhelper.ErrQueueIsFull
|
||||
var ErrQueueIsFull = exporterhelper.ErrQueueIsFull
|
||||
|
||||
// Deprecated: [v0.123.0] Use exporterhelper.QueueBatchEncoding
|
||||
// Duplicate definition with queuebatch.Encoding since aliasing generics is not supported by default.
|
||||
type Encoding[T any] interface {
|
||||
// Marshal is a function that can marshal a request into bytes.
|
||||
Marshal(T) ([]byte, error)
|
||||
|
|
|
|||
Loading…
Reference in New Issue