From 46fe32be1224a5ffc77566ac433a460069c49ecd Mon Sep 17 00:00:00 2001 From: fahed dorgaa Date: Wed, 1 Nov 2023 22:59:55 +0100 Subject: [PATCH] fixes Signed-off-by: fahed dorgaa fixes Signed-off-by: fahed dorgaa --- pkg/cmd/container/logs.go | 10 +++++++--- pkg/logging/logging.go | 7 ++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/cmd/container/logs.go b/pkg/cmd/container/logs.go index 8ed508f4a4c..e24454d0795 100644 --- a/pkg/cmd/container/logs.go +++ b/pkg/cmd/container/logs.go @@ -22,11 +22,11 @@ import ( "os" "os/signal" "syscall" - "time" + + "github.com/containerd/log" "github.com/containerd/containerd" "github.com/containerd/containerd/errdefs" - "github.com/containerd/log" "github.com/containerd/nerdctl/pkg/api/types" "github.com/containerd/nerdctl/pkg/api/types/cri" "github.com/containerd/nerdctl/pkg/clientutil" @@ -91,7 +91,11 @@ func Logs(ctx context.Context, client *containerd.Client, container string, opti // Setup goroutine to send stop event if container task finishes: go func() { <-waitCh - log.G(ctx).Debugf("container task has finished, sending kill signal to log viewer") + // Wait for logger to process remaining logs after container exit + if err = logging.WaitForLogger(dataStore, l[labels.Namespace], found.Container.ID()); err != nil { + log.L.WithError(err).Error("failed to wait for logger shutdown") + } + log.L.Debugf("container task has finished, sending kill signal to log viewer") stopChannel <- os.Interrupt }() } diff --git a/pkg/logging/logging.go b/pkg/logging/logging.go index 5ceaa89b703..5d89aa0c12b 100644 --- a/pkg/logging/logging.go +++ b/pkg/logging/logging.go @@ -177,10 +177,11 @@ func getContainerWait(ctx context.Context, hostAddress string, config *logging.C // If task was not found, it's possible that the container runtime is still being created. // Retry every 100ms. ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() for { select { case <-ctx.Done(): - return nil, fmt.Errorf("timed out waiting for container task to start") + return nil, errors.New("timed out waiting for container task to start") case <-ticker.C: task, err = con.Task(ctx, nil) if err != nil { @@ -207,7 +208,7 @@ func loggingProcessAdapter(ctx context.Context, driver Driver, dataStore, hostAd buf := make([]byte, 32<<10) _, err := io.CopyBuffer(writer, reader, buf) if err != nil { - logrus.Errorf("failed to copy stream: %s", err) + log.L.Errorf("failed to copy stream: %v", err) } } go copyStream(config.Stdout, stdoutW) @@ -244,7 +245,7 @@ func loggingProcessAdapter(ctx context.Context, driver Driver, dataStore, hostAd exitCh, err := getContainerWait(ctx, hostAddress, config) if err != nil { - logrus.Errorf("failed to get container task wait channel: %v", err) + log.L.Errorf("failed to get container task wait channel: %v", err) return } <-exitCh