mirror of https://github.com/docker/docs.git
				
				
				
			swarmd: remove unused engine/beam adapters.
Signed-off-by: Solomon Hykes <solomon@docker.com>
This commit is contained in:
		
							parent
							
								
									a1dcc4aceb
								
							
						
					
					
						commit
						f556ed19f7
					
				
							
								
								
									
										123
									
								
								swarmd/swarmd.go
								
								
								
								
							
							
						
						
									
										123
									
								
								swarmd/swarmd.go
								
								
								
								
							|  | @ -1,21 +1,17 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"bufio" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"github.com/codegangsta/cli" | ||||
| 	"github.com/docker/libswarm/beam" | ||||
| 	"github.com/docker/libswarm/beam/inmem" | ||||
| 	beamutils "github.com/docker/libswarm/beam/utils" | ||||
| 	"github.com/docker/libswarm/backends" | ||||
| 	_ "github.com/dotcloud/docker/api/server" | ||||
| 	"github.com/dotcloud/docker/engine" | ||||
| 	"github.com/flynn/go-shlex" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
|  | @ -30,125 +26,6 @@ func main() { | |||
| 	app.Run(os.Args) | ||||
| } | ||||
| 
 | ||||
| func EngineAsSender(eng *engine.Engine) beam.Sender { | ||||
| 	r, w := inmem.Pipe() | ||||
| 	go func() { | ||||
| 		for { | ||||
| 			msg, msgr, msgw, err := r.Receive(beam.R | beam.W) | ||||
| 			if err != nil { | ||||
| 				return | ||||
| 			} | ||||
| 			go func(msg *beam.Message, in beam.Receiver, out beam.Sender) { | ||||
| 				job := eng.Job(msg.Name, msg.Args...) | ||||
| 				stdout, _ := job.Stdout.AddPipe() // can't fail
 | ||||
| 				stderr, _ := job.Stderr.AddPipe() // can't fail
 | ||||
| 				stdinR, stdinW := io.Pipe() | ||||
| 				defer stdinR.Close() | ||||
| 				defer stdinW.Close() | ||||
| 				job.Stdin.Add(stdinR) | ||||
| 				log := func(src io.Reader) { | ||||
| 					scanner := bufio.NewScanner(src) | ||||
| 					for scanner.Scan() { | ||||
| 						if scanner.Err() != nil { | ||||
| 							return | ||||
| 						} | ||||
| 						if _, _, err := out.Send(&beam.Message{Name: "log", Args: []string{scanner.Text()}}, 0); err != nil { | ||||
| 							return | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				var tasks sync.WaitGroup | ||||
| 				tasks.Add(3) | ||||
| 				go func() { | ||||
| 					// Read from stdout, send "log" events
 | ||||
| 					defer tasks.Done() | ||||
| 					log(stdout) | ||||
| 				}() | ||||
| 				go func() { | ||||
| 					// Read from stderr, send "log" events
 | ||||
| 					// FIXME: how to differentiate stderr/stdout logs?
 | ||||
| 					defer tasks.Done() | ||||
| 					log(stderr) | ||||
| 				}() | ||||
| 				go func() { | ||||
| 					// Receive events, send "log" events to stdin
 | ||||
| 					defer tasks.Done() | ||||
| 					for { | ||||
| 						m, _, _, err := in.Receive(0) | ||||
| 						if err != nil { | ||||
| 							return | ||||
| 						} | ||||
| 						if m.Name == "log" { | ||||
| 							if len(m.Args) < 1 { | ||||
| 								continue | ||||
| 							} | ||||
| 							fmt.Fprintf(stdinW, "%s\n", strings.TrimRight(m.Args[0], "\r\n")) | ||||
| 						} | ||||
| 					} | ||||
| 				}() | ||||
| 				err := job.Run() | ||||
| 				if err != nil { | ||||
| 					out.Send(&beam.Message{Name: "error", Args: []string{err.Error()}}, 0) | ||||
| 				} | ||||
| 			}(msg, msgr, msgw) | ||||
| 		} | ||||
| 	}() | ||||
| 	return w | ||||
| } | ||||
| 
 | ||||
| func SenderAsEngine(s beam.Sender) *engine.Engine { | ||||
| 	eng := engine.New() | ||||
| 	eng.RegisterCatchall(func(job *engine.Job) engine.Status { | ||||
| 		msg := &beam.Message{ | ||||
| 			Name: job.Name, | ||||
| 			Args: job.Args, | ||||
| 		} | ||||
| 		// FIXME: serialize job.Env into a trailing argument
 | ||||
| 		r, w, err := s.Send(msg, beam.R|beam.W) | ||||
| 		if err != nil { | ||||
| 			return job.Errorf("beam send: %v", err) | ||||
| 		} | ||||
| 		var tasks sync.WaitGroup | ||||
| 		tasks.Add(1) | ||||
| 		go func() { | ||||
| 			defer tasks.Done() | ||||
| 			in := bufio.NewScanner(job.Stdin) | ||||
| 			for in.Scan() { | ||||
| 				_, _, err := w.Send(&beam.Message{Name: "log", Args: []string{in.Text()}}, 0) | ||||
| 				if err != nil { | ||||
| 					return | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 		tasks.Add(1) | ||||
| 		var status engine.Status = engine.StatusOK | ||||
| 		go func() { | ||||
| 			defer tasks.Done() | ||||
| 			for { | ||||
| 				msg, _, _, err := r.Receive(0) | ||||
| 				if err != nil { | ||||
| 					return | ||||
| 				} | ||||
| 				if msg.Name == "log" { | ||||
| 					if len(msg.Args) < 1 { | ||||
| 						continue | ||||
| 					} | ||||
| 					fmt.Fprintf(job.Stdout, "%s\n", strings.TrimRight(msg.Args[0], "\r\n")) | ||||
| 				} else if msg.Name == "error" { | ||||
| 					status = engine.StatusErr | ||||
| 					if len(msg.Args) < 1 { | ||||
| 						continue | ||||
| 					} | ||||
| 					fmt.Fprintf(job.Stderr, "%s\n", strings.TrimRight(msg.Args[0], "\r\n")) | ||||
| 				} | ||||
| 			} | ||||
| 		}() | ||||
| 		tasks.Wait() | ||||
| 		return status | ||||
| 	}) | ||||
| 	return eng | ||||
| } | ||||
| 
 | ||||
| func cmdDaemon(c *cli.Context) { | ||||
| 	if len(c.Args()) == 0 { | ||||
| 		Fatalf("Usage: %s <proto>://<address> [<proto>://<address>]...\n", c.App.Name) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue