You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/06/16 20:12:05 UTC
[plc4x] branch develop updated: feat(plc4go): added new options to replace global constants
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new adeac0498b feat(plc4go): added new options to replace global constants
adeac0498b is described below
commit adeac0498bc45aca675ca1e55c4d6ae58f42ad5f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jun 16 22:11:57 2023 +0200
feat(plc4go): added new options to replace global constants
---
plc4go/internal/cbus/Discoverer.go | 1 +
plc4go/pkg/api/config/config.go | 27 ++++++++--
plc4go/spi/default/DefaultCodec.go | 20 +++----
plc4go/spi/options/Option.go | 63 ++++++++++++++++++++++
plc4go/spi/pool/WorkerPool.go | 2 +
.../spi/transactions/RequestTransactionManager.go | 2 +-
6 files changed, 102 insertions(+), 13 deletions(-)
diff --git a/plc4go/internal/cbus/Discoverer.go b/plc4go/internal/cbus/Discoverer.go
index 3271067ab6..6658d22774 100644
--- a/plc4go/internal/cbus/Discoverer.go
+++ b/plc4go/internal/cbus/Discoverer.go
@@ -220,6 +220,7 @@ func (d *Discoverer) createDeviceScanDispatcher(tcpTransportInstance *tcp.Transp
if err := codec.Disconnect(); err != nil {
d.log.Warn().Err(err).Msg("Error disconnecting codec")
}
+ d.log.Trace().Msg("done")
}()
// Prepare the discovery packet data
diff --git a/plc4go/pkg/api/config/config.go b/plc4go/pkg/api/config/config.go
index 695b16c9d3..ba08e54ee3 100644
--- a/plc4go/pkg/api/config/config.go
+++ b/plc4go/pkg/api/config/config.go
@@ -21,16 +21,17 @@ package config
import (
"github.com/apache/plc4x/plc4go/spi/options"
+ "github.com/apache/plc4x/plc4go/spi/pool"
"github.com/rs/zerolog"
)
// TraceTransactionManagerWorkers when set to true the transaction manager displays worker states in log
var (
- // Deprecated: this should be done with an option, don't use it
+ // Deprecated: use WithTraceTransactionManagerWorkers
TraceTransactionManagerWorkers bool
- // Deprecated: this should be done with an option, don't use it
+ // Deprecated: use WithTraceTransactionManagerTransactions
TraceTransactionManagerTransactions bool
- // Deprecated: this should be done with an option, don't use it
+ // Deprecated: use WithTraceDefaultMessageCodecWorker
TraceDefaultMessageCodecWorker bool
)
@@ -49,6 +50,26 @@ func WithPassLoggerToModel(passLogger bool) WithOption {
return options.WithPassLoggerToModel(passLogger)
}
+// WithTraceTransactionManagerWorkers enables trace transaction manager workers
+func WithTraceTransactionManagerWorkers(traceWorkers bool) WithOption {
+ return options.WithTraceTransactionManagerWorkers(traceWorkers)
+}
+
+// WithTraceTransactionManagerTransactions enables trace transaction manager transactions
+func WithTraceTransactionManagerTransactions(traceTransactions bool) WithOption {
+ return options.WithTraceTransactionManagerTransactions(traceTransactions)
+}
+
+// WithTraceDefaultMessageCodecWorker enables trace default message codec worker
+func WithTraceDefaultMessageCodecWorker(traceWorkers bool) WithOption {
+ return options.WithTraceDefaultMessageCodecWorker(traceWorkers)
+}
+
+// WithExecutorOptionTracerWorkers sets a flag which extends logging for workers
+func WithExecutorOptionTracerWorkers(traceWorkers bool) options.WithOption {
+ return pool.WithExecutorOptionTracerWorkers(traceWorkers)
+}
+
// WithOption is a marker interface for options
type WithOption interface {
options.WithOption
diff --git a/plc4go/spi/default/DefaultCodec.go b/plc4go/spi/default/DefaultCodec.go
index 1c616c4885..3bca7b40b3 100644
--- a/plc4go/spi/default/DefaultCodec.go
+++ b/plc4go/spi/default/DefaultCodec.go
@@ -21,12 +21,12 @@ package _default
import (
"context"
+ "github.com/apache/plc4x/plc4go/pkg/api/config"
"runtime/debug"
"sync"
"sync/atomic"
"time"
- "github.com/apache/plc4x/plc4go/pkg/api/config"
"github.com/apache/plc4x/plc4go/spi"
"github.com/apache/plc4x/plc4go/spi/options"
"github.com/apache/plc4x/plc4go/spi/transports"
@@ -87,12 +87,13 @@ type defaultCodec struct {
stateChange sync.Mutex
activeWorker sync.WaitGroup
+ traceDefaultMessageCodecWorker bool
+
log zerolog.Logger `ignore:"true"`
}
func buildDefaultCodec(defaultCodecRequirements DefaultCodecRequirements, transportInstance transports.TransportInstance, _options ...options.WithOption) DefaultCodec {
var customMessageHandler func(codec DefaultCodecRequirements, message spi.Message) bool
- var logger = options.ExtractCustomLogger(_options...)
for _, option := range _options {
switch option := option.(type) {
@@ -102,12 +103,13 @@ func buildDefaultCodec(defaultCodecRequirements DefaultCodecRequirements, transp
}
return &defaultCodec{
- DefaultCodecRequirements: defaultCodecRequirements,
- transportInstance: transportInstance,
- defaultIncomingMessageChannel: make(chan spi.Message, 100),
- expectations: []spi.Expectation{},
- customMessageHandling: customMessageHandler,
- log: logger,
+ DefaultCodecRequirements: defaultCodecRequirements,
+ transportInstance: transportInstance,
+ defaultIncomingMessageChannel: make(chan spi.Message, 100),
+ expectations: []spi.Expectation{},
+ customMessageHandling: customMessageHandler,
+ traceDefaultMessageCodecWorker: options.ExtractTraceDefaultMessageCodecWorker(_options...) || config.TraceDefaultMessageCodecWorker,
+ log: options.ExtractCustomLogger(_options...),
}
}
@@ -274,7 +276,7 @@ func (m *defaultCodec) HandleMessages(message spi.Message) bool {
func (m *defaultCodec) Work(codec DefaultCodecRequirements) {
defer m.activeWorker.Done()
workerLog := m.log.With().Logger()
- if !config.TraceDefaultMessageCodecWorker {
+ if !m.traceDefaultMessageCodecWorker {
workerLog = zerolog.Nop()
}
workerLog.Trace().Msg("Starting work")
diff --git a/plc4go/spi/options/Option.go b/plc4go/spi/options/Option.go
index 18c41b2ceb..7ebe9641ae 100644
--- a/plc4go/spi/options/Option.go
+++ b/plc4go/spi/options/Option.go
@@ -70,6 +70,54 @@ func ExtractPassLoggerToModel(options ...WithOption) bool {
return false
}
+// WithTraceTransactionManagerWorkers enables trace transaction manager workers
+func WithTraceTransactionManagerWorkers(traceWorkers bool) WithOption {
+ return withTraceTransactionManagerWorkers{traceWorkers: traceWorkers}
+}
+
+// ExtractTransactionManagerWorkers to extract the flag indicating to trace transaction manager workers
+func ExtractTransactionManagerWorkers(options ...WithOption) bool {
+ for _, option := range options {
+ switch option := option.(type) {
+ case withTraceTransactionManagerWorkers:
+ return option.traceWorkers
+ }
+ }
+ return false
+}
+
+// WithTraceTransactionManagerTransactions enables trace transaction manager transactions
+func WithTraceTransactionManagerTransactions(traceTransactions bool) WithOption {
+ return withTraceTransactionManagerTransactions{traceTransactions: traceTransactions}
+}
+
+// ExtractTraceTransactionManagerTransactions to extract the flag indicating to trace transaction manager transactions
+func ExtractTraceTransactionManagerTransactions(options ...WithOption) bool {
+ for _, option := range options {
+ switch option := option.(type) {
+ case withTraceTransactionManagerTransactions:
+ return option.traceTransactions
+ }
+ }
+ return false
+}
+
+// WithTraceDefaultMessageCodecWorker enables trace default message codec worker
+func WithTraceDefaultMessageCodecWorker(traceWorkers bool) WithOption {
+ return withTraceDefaultMessageCodecWorker{traceWorkers: traceWorkers}
+}
+
+// ExtractTraceDefaultMessageCodecWorker to extract the flag indicating to trace default message codec workers
+func ExtractTraceDefaultMessageCodecWorker(options ...WithOption) bool {
+ for _, option := range options {
+ switch option := option.(type) {
+ case withTraceTransactionManagerTransactions:
+ return option.traceTransactions
+ }
+ }
+ return false
+}
+
// GetLoggerContextForModel returns a log context if the WithPassLoggerToModel WithOption is set
func GetLoggerContextForModel(ctx context.Context, log zerolog.Logger, options ...WithOption) context.Context {
passToModel := false
@@ -103,6 +151,21 @@ type withPassLoggerToModel struct {
passLogger bool
}
+type withTraceTransactionManagerWorkers struct {
+ Option
+ traceWorkers bool
+}
+
+type withTraceTransactionManagerTransactions struct {
+ Option
+ traceTransactions bool
+}
+
+type withTraceDefaultMessageCodecWorker struct {
+ Option
+ traceWorkers bool
+}
+
//
//
///////////////////////////////////////
diff --git a/plc4go/spi/pool/WorkerPool.go b/plc4go/spi/pool/WorkerPool.go
index bc20ebeaa8..36dd72f494 100644
--- a/plc4go/spi/pool/WorkerPool.go
+++ b/plc4go/spi/pool/WorkerPool.go
@@ -21,7 +21,9 @@ package pool
import (
"context"
+
"github.com/apache/plc4x/plc4go/spi/options"
+
"io"
"time"
)
diff --git a/plc4go/spi/transactions/RequestTransactionManager.go b/plc4go/spi/transactions/RequestTransactionManager.go
index 786541d37d..ffbc4710f2 100644
--- a/plc4go/spi/transactions/RequestTransactionManager.go
+++ b/plc4go/spi/transactions/RequestTransactionManager.go
@@ -67,7 +67,7 @@ func NewRequestTransactionManager(numberOfConcurrentRequests int, _options ...op
workLog: *list.New(),
executor: sharedExecutorInstance,
- traceTransactionManagerTransactions: config.TraceTransactionManagerTransactions,
+ traceTransactionManagerTransactions: options.ExtractTraceTransactionManagerTransactions(_options...) || config.TraceTransactionManagerTransactions,
log: options.ExtractCustomLogger(_options...),
}