Skip to content

Commit 71ec455

Browse files
fix: address PR review feedback for user config watcher
- agentd.go: add nil check for event before accessing event.User in handleUserEvent to prevent panic on nil pointer dereference - session.go: add continue after nil user check to prevent panic, rename lagger to logger (typo fix), rename bytes to userData to avoid shadowing standard library package, add continue after marshal error - watcher.go: add error logging when proto.Unmarshal fails for user config Signed-off-by: rakibhossainctr <rakib.hossain.ctr@sumologic.com>
1 parent 3fa5c2a commit 71ec455

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

backend/agentd/agentd.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,11 @@ func (a *Agentd) handleEvent(event store.WatchEventEntityConfig) error {
322322

323323
// adding the UserConfig updates to the etcd bus for the watcher to consume
324324
func (a *Agentd) handleUserEvent(event *store.WatchEventUserConfig) error {
325+
if event == nil {
326+
return errors.New("nil event received from the user config watcher")
327+
}
325328
if event.User == nil {
326-
return errors.New("nil entry received from the user config watcher")
329+
return errors.New("nil user received from the user config watcher")
327330
}
328331

329332
topic := messaging.UserConfigTopic(event.User.Username)

backend/agentd/session.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -371,19 +371,21 @@ func (s *Session) sender() {
371371

372372
if watchEvent.User == nil {
373373
logger.Error("session received nil user in watch event")
374+
continue
374375
}
375-
lagger := logger.WithFields(logrus.Fields{
376+
logger := logger.WithFields(logrus.Fields{
376377
"action": watchEvent.Action.String(),
377378
"user": watchEvent.User.Username,
378379
"namespace": watchEvent.User.GetMetadata().GetNamespace(),
379380
})
380-
lagger.Debug("user update received")
381+
logger.Debug("user update received")
381382

382-
bytes, err := s.marshal(watchEvent.User)
383+
userData, err := s.marshal(watchEvent.User)
383384
if err != nil {
384-
lagger.WithError(err).Error("session failed to serialize user config")
385+
logger.WithError(err).Error("session failed to serialize user config")
386+
continue
385387
}
386-
msg = transport.NewMessage(transport.MessageTypeUserConfig, bytes)
388+
msg = transport.NewMessage(transport.MessageTypeUserConfig, userData)
387389

388390
// ---- entity ----//
389391
case e := <-s.entityConfig.updatesChannel:

backend/agentd/watcher.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package agentd
33
import (
44
"context"
55
"errors"
6+
67
"github.com/gogo/protobuf/proto"
78
corev2 "github.com/sensu/core/v2"
89
corev3 "github.com/sensu/core/v3"
@@ -11,7 +12,7 @@ import (
1112
storev2 "github.com/sensu/sensu-go/backend/store/v2"
1213
etcdstorev2 "github.com/sensu/sensu-go/backend/store/v2/etcdstore"
1314
"github.com/sensu/sensu-go/backend/store/v2/wrap"
14-
"go.etcd.io/etcd/client/v3"
15+
clientv3 "go.etcd.io/etcd/client/v3"
1516
)
1617

1718
// GetEntityConfigWatcher watches changes to EntityConfig in etcd and publish them
@@ -98,6 +99,8 @@ func GetUserConfigWatcher(ctx context.Context, client *clientv3.Client) <-chan *
9899
// unmarshal the user config
99100
var userConfig corev2.User
100101
if err := proto.Unmarshal(response.Object, &userConfig); err != nil {
102+
logger.WithField("key", response.Key).WithError(err).
103+
Error("unable to unmarshal user config from key")
101104
continue
102105
}
103106

0 commit comments

Comments
 (0)