Skip to content

Commit

Permalink
redis: fix lifecycle deadlock issue;
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Kamieth committed Feb 17, 2025
1 parent 73ba2f7 commit c81dccd
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ require (
github.com/jackc/pgx/v4 v4.18.2
github.com/jarcoal/httpmock v1.3.1
github.com/jeremywohl/flatten v0.0.0-20190921043622-d936035e55cf
github.com/jessevdk/go-flags v1.6.1
github.com/jinzhu/gorm v1.9.16
github.com/jinzhu/inflection v1.0.0
github.com/jmoiron/sqlx v1.3.4
Expand Down Expand Up @@ -163,7 +164,6 @@ require (
github.com/jackc/pgproto3/v2 v2.3.3 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgtype v1.14.0 // indirect
github.com/jessevdk/go-flags v1.6.1 // indirect
github.com/jinzhu/now v1.1.3 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
Expand Down
16 changes: 10 additions & 6 deletions pkg/redis/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,19 @@ type redisClient struct {
func NewClient(ctx context.Context, config cfg.Config, logger log.Logger, name string) (Client, error) {
settings := ReadSettings(config, name)

if err := reslife.AddLifeCycleer(ctx, NewLifecycleManager(settings)); err != nil {
return nil, fmt.Errorf("failed to add redis lifecycle manager: %w", err)
}

return NewClientWithSettings(logger, settings)
}

func NewClientWithSettings(logger log.Logger, settings *Settings) (Client, error) {
logger = logger.WithFields(log.Fields{
"redis": name,
"redis": settings.Name,
})

executor := NewExecutor(logger, settings.BackoffSettings, name)
executor := NewExecutor(logger, settings.BackoffSettings, settings.Name)

if _, ok := dialers[settings.Dialer]; !ok {
return nil, fmt.Errorf("there is no redis dialer of type %s", settings.Dialer)
Expand All @@ -159,10 +167,6 @@ func NewClient(ctx context.Context, config cfg.Config, logger log.Logger, name s
Dialer: dialer,
})

if err := reslife.AddLifeCycleer(ctx, NewLifecycleManager(name)); err != nil {
return nil, fmt.Errorf("failed to add redis lifecycle manager: %w", err)
}

return NewClientWithInterfaces(logger, baseClient, executor, settings), nil
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/redis/lifecycle.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ type LifecycleManager interface {

var _ LifecycleManager = (*lifecycleManager)(nil)

func NewLifecycleManager(name string) reslife.LifeCycleerFactory {
func NewLifecycleManager(settings *Settings) reslife.LifeCycleerFactory {
return func(ctx context.Context, config cfg.Config, logger log.Logger) (reslife.LifeCycleer, error) {
var err error
var client Client

if client, err = ProvideClient(ctx, config, logger, name); err != nil {
if client, err = NewClientWithSettings(logger, settings); err != nil {
return nil, fmt.Errorf("could not connect to database: %w", err)
}

return &lifecycleManager{
logger: logger,
client: client,
name: name,
name: settings.Name,
}, nil
}
}
Expand Down

0 comments on commit c81dccd

Please # to comment.