From 2af0021ce6246a0dc919552cae1d54c66bdfaa05 Mon Sep 17 00:00:00 2001 From: ze0s <43699394+zze0s@users.noreply.github.com> Date: Thu, 15 Jun 2023 18:47:47 +0200 Subject: [PATCH] fix(irc): panic when creating indexer with irc (#986) fix(irc): store channel panic --- internal/database/irc.go | 14 ++++++-------- internal/domain/irc.go | 2 +- internal/irc/service.go | 16 +++++++--------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/internal/database/irc.go b/internal/database/irc.go index 050f0fa..086c2c1 100644 --- a/internal/database/irc.go +++ b/internal/database/irc.go @@ -279,7 +279,7 @@ func (r *IrcRepo) CheckExistingNetwork(ctx context.Context, network *domain.IrcN return &net, nil } -func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error { +func (r *IrcRepo) StoreNetwork(ctx context.Context, network *domain.IrcNetwork) error { netName := toNullString(network.Name) pass := toNullString(network.Pass) nick := toNullString(network.Nick) @@ -289,7 +289,6 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error { account := toNullString(network.Auth.Account) password := toNullString(network.Auth.Password) - var err error var retID int64 queryBuilder := r.db.squirrel. @@ -327,13 +326,13 @@ func (r *IrcRepo) StoreNetwork(network *domain.IrcNetwork) error { Suffix("RETURNING id"). RunWith(r.db.handler) - if err = queryBuilder.QueryRow().Scan(&retID); err != nil { + if err := queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil { return errors.Wrap(err, "error executing query") } network.ID = retID - return err + return nil } func (r *IrcRepo) UpdateNetwork(ctx context.Context, network *domain.IrcNetwork) error { @@ -459,7 +458,6 @@ func (r *IrcRepo) StoreNetworkChannels(ctx context.Context, networkID int64, cha func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *domain.IrcChannel) error { pass := toNullString(channel.Password) - var err error if channel.ID != 0 { // update record channelQueryBuilder := r.db.squirrel. @@ -475,7 +473,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do return errors.Wrap(err, "error building query") } - if _, err = r.db.handler.ExecContext(ctx, query, args...); err != nil { + if _, err := r.db.handler.ExecContext(ctx, query, args...); err != nil { return errors.Wrap(err, "error executing query") } } else { @@ -501,7 +499,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do // returning var retID int64 - if err = queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil { + if err := queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil { return errors.Wrap(err, "error executing query") } @@ -523,7 +521,7 @@ func (r *IrcRepo) StoreChannel(ctx context.Context, networkID int64, channel *do //channel.ID, err = res.LastInsertId() } - return err + return nil } func (r *IrcRepo) UpdateChannel(channel *domain.IrcChannel) error { diff --git a/internal/domain/irc.go b/internal/domain/irc.go index d204f42..12fde64 100644 --- a/internal/domain/irc.go +++ b/internal/domain/irc.go @@ -122,7 +122,7 @@ func (m IrcMessage) Bytes() []byte { } type IrcRepo interface { - StoreNetwork(network *IrcNetwork) error + StoreNetwork(ctx context.Context, network *IrcNetwork) error UpdateNetwork(ctx context.Context, network *IrcNetwork) error StoreChannel(ctx context.Context, networkID int64, channel *IrcChannel) error UpdateChannel(channel *IrcChannel) error diff --git a/internal/irc/service.go b/internal/irc/service.go index 5124a71..c3dde1f 100644 --- a/internal/irc/service.go +++ b/internal/irc/service.go @@ -561,17 +561,16 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork) } if existingNetwork == nil { - if err := s.repo.StoreNetwork(network); err != nil { + if err := s.repo.StoreNetwork(ctx, network); err != nil { return err } s.log.Debug().Msgf("store network: %+v", network) if network.Channels != nil { for _, channel := range network.Channels { - if err := s.repo.StoreChannel(nil, network.ID, &channel); err != nil { + if err := s.repo.StoreChannel(ctx, network.ID, &channel); err != nil { s.log.Error().Stack().Err(err).Msg("irc.storeChannel: error executing query") return errors.Wrap(err, "error storing channel on network") - //return err } } } @@ -582,14 +581,14 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork) // get channels for existing network existingChannels, err := s.repo.ListChannels(existingNetwork.ID) if err != nil { - s.log.Error().Err(err).Msgf("failed to list channels for network %q", existingNetwork.Server) + s.log.Error().Err(err).Msgf("failed to list channels for network %s", existingNetwork.Server) } existingNetwork.Channels = existingChannels if network.Channels != nil { for _, channel := range network.Channels { // add channels. Make sure it doesn't delete before - if err := s.repo.StoreChannel(nil, existingNetwork.ID, &channel); err != nil { + if err := s.repo.StoreChannel(ctx, existingNetwork.ID, &channel); err != nil { return err } } @@ -611,10 +610,9 @@ func (s *service) StoreNetwork(ctx context.Context, network *domain.IrcNetwork) // if nickserv account, nickserv password : changed - stay connected, and change those // if channels len : changes - join or leave - err := s.checkIfNetworkRestartNeeded(existingNetwork) - if err != nil { - s.log.Error().Err(err).Msgf("could not restart network: %+v", existingNetwork.Name) - return errors.New("could not restart network: %v", existingNetwork.Name) + if err := s.checkIfNetworkRestartNeeded(existingNetwork); err != nil { + s.log.Error().Err(err).Msgf("could not restart network: %s", existingNetwork.Name) + return errors.New("could not restart network: %s", existingNetwork.Name) } }