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
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.

https://codereview.appspot.com/6774050/

To post a comment you must log in.
Revision history for this message
Roger Peppe (rogpeppe) wrote :

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:
   A [revision details]
   M worker/uniter/context.go

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
=== modified file 'worker/uniter/context.go'
--- worker/uniter/context.go 2012-10-10 21:46:49 +0000
+++ worker/uniter/context.go 2012-10-26 10:47:21 +0000
@@ -151,17 +151,22 @@
   ps := exec.Command(filepath.Join(charmDir, "hooks", hookName))
   ps.Env = ctx.hookVars(charmDir, toolsDir, socketPath)
   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(ee.Err) {

Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :
Revision history for this message
Roger Peppe (rogpeppe) wrote :

*** Submitted:

worker/uniter: make logger predictable

The stdout pipe is closed too early by os/exec;
do the work ourselves to prevent this.

R=dfc, niemeyer
CC=
https://codereview.appspot.com/6774050

https://codereview.appspot.com/6774050/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'worker/uniter/context.go'
2--- worker/uniter/context.go 2012-10-10 21:46:49 +0000
3+++ worker/uniter/context.go 2012-10-26 10:49:29 +0000
4@@ -151,17 +151,22 @@
5 ps := exec.Command(filepath.Join(charmDir, "hooks", hookName))
6 ps.Env = ctx.hookVars(charmDir, toolsDir, socketPath)
7 ps.Dir = charmDir
8- outReader, err := ps.StdoutPipe()
9+ outReader, outWriter, err := os.Pipe()
10 if err != nil {
11- return err
12+ return fmt.Errorf("cannot make logging pipe: %v", err)
13 }
14- ps.Stderr = ps.Stdout
15+ ps.Stdout = outWriter
16+ ps.Stderr = outWriter
17 logger := &hookLogger{
18 r: outReader,
19 done: make(chan struct{}),
20 }
21 go logger.run()
22- err = ps.Run()
23+ err = ps.Start()
24+ outWriter.Close()
25+ if err == nil {
26+ err = ps.Wait()
27+ }
28 logger.stop()
29 if ee, ok := err.(*exec.Error); ok && err != nil {
30 if os.IsNotExist(ee.Err) {

Subscribers

People subscribed via source and target branches