From 18338b29a1c335bd3856890be941909f019df103 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 13 Nov 2015 14:09:35 -0800 Subject: [PATCH] Add journal queue --- api/v1/server.go | 1 - journal.go | 28 ++++++++++++++++++++++------ runtime_linux.go | 2 -- supervisor.go | 4 +--- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/api/v1/server.go b/api/v1/server.go index 67fa85c..846c359 100644 --- a/api/v1/server.go +++ b/api/v1/server.go @@ -217,7 +217,6 @@ func (s *server) createContainer(w http.ResponseWriter, r *http.Request) { e := containerd.NewEvent(containerd.StartContainerEventType) e.ID = id e.BundlePath = c.BundlePath - logrus.Debug(c.Stderr, c.Stdout) e.Stdio = &containerd.Stdio{ Stderr: c.Stderr, Stdout: c.Stdout, diff --git a/journal.go b/journal.go index 5889f0f..2163f18 100644 --- a/journal.go +++ b/journal.go @@ -4,6 +4,8 @@ import ( "encoding/json" "os" "path/filepath" + + "github.com/Sirupsen/logrus" ) type entry struct { @@ -18,24 +20,38 @@ func newJournal(path string) (*journal, error) { if err != nil { return nil, err } - return &journal{ + j := &journal{ f: f, enc: json.NewEncoder(f), - }, nil + wc: make(chan *Event, 2048), + } + go j.start() + return j, nil } type journal struct { f *os.File enc *json.Encoder + wc chan *Event } -func (j *journal) write(e *Event) error { - et := &entry{ - Event: e, +func (j *journal) start() { + for e := range j.wc { + et := &entry{ + Event: e, + } + if err := j.enc.Encode(et); err != nil { + logrus.WithField("error", err).Error("write event to journal") + } } - return j.enc.Encode(et) +} + +func (j *journal) write(e *Event) { + j.wc <- e } func (j *journal) Close() error { + // TODO: add waitgroup to make sure journal is flushed + close(j.wc) return j.f.Close() } diff --git a/runtime_linux.go b/runtime_linux.go index eee7f02..fa8bb74 100644 --- a/runtime_linux.go +++ b/runtime_linux.go @@ -13,7 +13,6 @@ import ( "strings" "syscall" - "github.com/Sirupsen/logrus" "github.com/opencontainers/runc/libcontainer" "github.com/opencontainers/runc/libcontainer/configs" _ "github.com/opencontainers/runc/libcontainer/nsenter" @@ -341,7 +340,6 @@ func (r *libcontainerRuntime) newProcess(p specs.Process, stdio *Stdio) (*libcon ) if stdio != nil { if stdio.Stdout != "" { - logrus.Debug("adding stdout") f, err := os.OpenFile(stdio.Stdout, os.O_CREATE|os.O_WRONLY, 0755) if err != nil { return nil, err diff --git a/supervisor.go b/supervisor.go index e664c66..0ca53eb 100644 --- a/supervisor.go +++ b/supervisor.go @@ -72,9 +72,7 @@ func (s *Supervisor) Start(events chan *Event) error { s.events = events go func() { for e := range events { - if err := s.journal.write(e); err != nil { - logrus.WithField("error", err).Error("write journal entry") - } + s.journal.write(e) switch e.Type { case ExitEventType: logrus.WithFields(logrus.Fields{"pid": e.Pid, "status": e.Status}).