From fbdf1f2c1c4c4908c9fc4d42e1b02056d87a4233 Mon Sep 17 00:00:00 2001 From: Janos Dobronszki Date: Thu, 23 Jul 2020 09:50:38 +0200 Subject: [PATCH] Fixing `micro logs` being follow by default against k8s (#1866) --- debug/log/kubernetes/kubernetes.go | 1 - runtime/kubernetes/kubernetes.go | 35 ++++++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/debug/log/kubernetes/kubernetes.go b/debug/log/kubernetes/kubernetes.go index cf886d06..882066be 100644 --- a/debug/log/kubernetes/kubernetes.go +++ b/debug/log/kubernetes/kubernetes.go @@ -102,7 +102,6 @@ func (k *klog) Read(options ...log.ReadOption) ([]log.Record, error) { for _, o := range options { o(opts) } - pods, err := k.getMatchingPods() if err != nil { return nil, err diff --git a/runtime/kubernetes/kubernetes.go b/runtime/kubernetes/kubernetes.go index d2fe54fa..78b7abf3 100644 --- a/runtime/kubernetes/kubernetes.go +++ b/runtime/kubernetes/kubernetes.go @@ -350,26 +350,28 @@ func (k *kubernetes) Init(opts ...runtime.Option) error { func (k *kubernetes) Logs(s *runtime.Service, options ...runtime.LogsOption) (runtime.LogStream, error) { klo := newLog(k.client, s.Name, options...) + + if !klo.options.Stream { + records, err := klo.Read() + if err != nil { + log.Errorf("Failed to get logs for service '%v' from k8s: %v", s.Name, err) + return nil, err + } + kstream := &kubeStream{ + stream: make(chan runtime.LogRecord), + stop: make(chan bool), + } + go func() { + for _, record := range records { + kstream.Chan() <- record + } + }() + return kstream, nil + } stream, err := klo.Stream() if err != nil { return nil, err } - // If requested, also read existing records and stream those too - if klo.options.Count > 0 { - go func() { - records, err := klo.Read() - if err != nil { - log.Errorf("Failed to get logs for service '%v' from k8s: %v", s.Name, err) - return - } - // @todo: this might actually not run before podLogStream starts - // and might cause out of order log retrieval at the receiving end. - // A better approach would probably to suppor this inside the `klog.Stream` method. - for _, record := range records { - stream.Chan() <- record - } - }() - } return stream, nil } @@ -398,6 +400,7 @@ func (k *kubeStream) Stop() error { return nil default: close(k.stop) + close(k.stream) } return nil }