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...),
 	}