Merge lp:~rogpeppe/juju-core/136-uniter-fix-logger into lp:~juju/juju-core/trunk
Proposed by
Roger Peppe
Status: | Merged |
---|---|
Approved by: | Gustavo Niemeyer |
Approved revision: | no longer in the source branch. |
Merged at revision: | 695 |
Proposed branch: | lp:~rogpeppe/juju-core/136-uniter-fix-logger |
Merge into: | lp:~juju/juju-core/trunk |
Diff against target: |
30 lines (+9/-4) 1 file modified
worker/uniter/context.go (+9/-4) |
To merge this branch: | bzr merge lp:~rogpeppe/juju-core/136-uniter-fix-logger |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
The Go Language Gophers | Pending | ||
Review via email: mp+131580@code.launchpad.net |
Description of the change
worker/uniter: make logger predictable
The stdout pipe is closed too early by os/exec;
do the work ourselves to prevent this.
To post a comment you must log in.
Reviewers: mp+131580_ code.launchpad. net, dfc,
Message:
Please take a look.
Description:
worker/uniter: make logger predictable
The stdout pipe is closed too early by os/exec;
do the work ourselves to prevent this.
https:/ /code.launchpad .net/~rogpeppe/ juju-core/ 136-uniter- fix-logger/ +merge/ 131580
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/6774050/
Affected files: uniter/ context. go
A [revision details]
M worker/
Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision: <email address hidden>
Index: worker/ uniter/ context. go uniter/ context. go' uniter/ context. go 2012-10-10 21:46:49 +0000 uniter/ context. go 2012-10-26 10:47:21 +0000 filepath. Join(charmDir, "hooks", hookName)) charmDir, toolsDir, socketPath) ee.Err) {
=== modified file 'worker/
--- worker/
+++ worker/
@@ -151,17 +151,22 @@
ps := exec.Command(
ps.Env = ctx.hookVars(
ps.Dir = charmDir
- outReader, err := ps.StdoutPipe()
+ outReader, outWriter, err := os.Pipe()
if err != nil {
- return err
+ return fmt.Errorf("cannot make logging pipe: %v", err)
}
- ps.Stderr = ps.Stdout
+ ps.Stdout = outWriter
+ ps.Stderr = outWriter
logger := &hookLogger{
r: outReader,
done: make(chan struct{}),
}
go logger.run()
- err = ps.Run()
+ err = ps.Start()
+ outWriter.Close()
+ if err == nil {
+ err = ps.Wait()
+ }
logger.stop()
if ee, ok := err.(*exec.Error); ok && err != nil {
if os.IsNotExist(