Skip to content

Commit

Permalink
Merge pull request #338 from navidys/system_events
Browse files Browse the repository at this point in the history
Bugfix for event reader after podman service is restarted
  • Loading branch information
navidys authored Mar 1, 2025
2 parents a8513e9 + 4e00154 commit bc66dc4
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 33 deletions.
2 changes: 1 addition & 1 deletion exporter/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func Start(cmd *cobra.Command, _ []string) error {
updateImages = true
}

pdcs.StartEventStreamer(logger, updateImages)
go pdcs.StartEventStreamer(logger, updateImages)
pdcs.StartCacheSizeTicker(logger, cmdOptions.cacheDuration)

logger.Info("Listening on", "address", cmdOptions.webListen)
Expand Down
71 changes: 41 additions & 30 deletions pdcs/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/containers/podman/v5/pkg/domain/entities"
)

func StartEventStreamer(logger *slog.Logger, updateImage bool) {
func StartEventStreamer(logger *slog.Logger, updateImage bool) { //nolint:cyclop
var eventOptions entities.EventsOptions

logger.Info("starting podman event streamer")
Expand All @@ -20,38 +20,49 @@ func StartEventStreamer(logger *slog.Logger, updateImage bool) {
updateImages()
}

eventChannel := make(chan events.ReadResult, 1)
eventOptions.EventChan = eventChannel
eventOptions.Stream = true
eventOptions.Filter = []string{}
errChannel := make(chan error)
restartChannel := make(chan bool)

go func() {
err := registry.ContainerEngine().Events(context.Background(), eventOptions)
if err != nil {
errChannel <- err
}
}()

go func() {
for {
select {
case event, ok := <-eventChannel:
if !ok {
logger.Error("podman received event not ok")

continue
}
for {
eventChannel := make(chan events.ReadResult, 1)
eventOptions.EventChan = eventChannel
eventOptions.Stream = true
eventOptions.Filter = []string{}

if updateImage && event.Event.Type == events.Image {
logger.Debug("update images")
updateImages()
}
case err := <-errChannel:
if err != nil {
log.Fatal(err)
go func() {
logger.Debug("starting engine event reader")

err := registry.ContainerEngine().Events(context.Background(), eventOptions)
if err != nil {
errChannel <- err
}
}()

go func() {
logger.Debug("starting event reader loop")

for {
select {
case event, ok := <-eventChannel:
if !ok {
logger.Error("podman received event not ok")
restartChannel <- true

return
}

if updateImage && event.Event.Type == events.Image {
logger.Debug("update images")
updateImages()
}
case err := <-errChannel:
if err != nil {
log.Fatal(err)
}
}
}
}
}()
}()

<-restartChannel
}
}
2 changes: 1 addition & 1 deletion pdcs/events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ var _ = Describe("Pdcs/Events", func() {

imageCount01 := len(podmanImages)
logger := promslog.New(&promslog.Config{})
pdcs.StartEventStreamer(logger, true)
go pdcs.StartEventStreamer(logger, true)

testImage := "quay.io/libpod/alpine"

Expand Down
2 changes: 1 addition & 1 deletion test/e2e/e2e_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var _ = BeforeSuite(func() {
Long: ``,
}

rootCmd.Flags().BoolP("debug", "d", false, "")
rootCmd.Flags().BoolP("debug", "d", true, "")
rootCmd.Flags().BoolP("version", "", false, "")
rootCmd.Flags().StringP("web.config.file", "", "", "")
rootCmd.Flags().StringP("web.listen-address", "l", ":9882", "")
Expand Down

0 comments on commit bc66dc4

Please sign in to comment.