quit when child plugin quits
This commit is contained in:
parent
4ebef96a50
commit
630a01fbb6
2 changed files with 46 additions and 28 deletions
|
|
@ -502,6 +502,7 @@ func (g *GrpcPlugin) RecvLogs(writer io.Writer) error {
|
|||
|
||||
type CmdPlugin struct {
|
||||
GrpcPlugin
|
||||
Quit <-chan error
|
||||
}
|
||||
|
||||
func DialCmd(cmd *exec.Cmd) (*CmdPlugin, error) {
|
||||
|
|
@ -514,11 +515,9 @@ func DialCmd(cmd *exec.Cmd) (*CmdPlugin, error) {
|
|||
_, _ = io.Copy(log.StandardLogger().Out, stderr)
|
||||
}()
|
||||
|
||||
ch := make(chan error, 1)
|
||||
go func() {
|
||||
err := cmd.Wait()
|
||||
if err != nil {
|
||||
log.Errorf("cmd %v error: %v", cmd.Path, err)
|
||||
}
|
||||
ch <- cmd.Wait()
|
||||
}()
|
||||
|
||||
conn, err := grpc.Dial("", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(func(_ context.Context, _ string) (net.Conn, error) {
|
||||
|
|
@ -535,5 +534,5 @@ func DialCmd(cmd *exec.Cmd) (*CmdPlugin, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return &CmdPlugin{*g}, nil
|
||||
return &CmdPlugin{*g, ch}, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,30 +48,23 @@ func splitByDash(args []string) ([]string, []string) {
|
|||
return args, nil
|
||||
}
|
||||
|
||||
func createPlugin(args []string) (*plugin.GrpcPlugin, error) {
|
||||
func createCmdPlugin(args []string) (*plugin.CmdPlugin, error) {
|
||||
exe := args[0]
|
||||
|
||||
switch exe {
|
||||
case "grpc":
|
||||
log.Info("starting net grpc plugin: ")
|
||||
return createNetGrpcPlugin(args)
|
||||
cmd := exec.Command(exe)
|
||||
cmd.Args = args
|
||||
setPdeathsig(cmd)
|
||||
|
||||
default:
|
||||
cmd := exec.Command(exe)
|
||||
cmd.Args = args
|
||||
setPdeathsig(cmd)
|
||||
log.Info("starting child process plugin: ", cmd.Args)
|
||||
|
||||
log.Info("starting child process plugin: ", cmd.Args)
|
||||
|
||||
p, err := plugin.DialCmd(cmd)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
p.Name = exe
|
||||
|
||||
return &p.GrpcPlugin, nil
|
||||
p, err := plugin.DialCmd(cmd)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
p.Name = exe
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
|
@ -138,6 +131,7 @@ func main() {
|
|||
return err
|
||||
}
|
||||
|
||||
quit := make(chan error)
|
||||
d.lis = &proxyproto.Listener{Listener: d.lis}
|
||||
|
||||
var plugins []*plugin.GrpcPlugin
|
||||
|
|
@ -156,9 +150,30 @@ func main() {
|
|||
continue
|
||||
}
|
||||
|
||||
p, err := createPlugin(args)
|
||||
if err != nil {
|
||||
return err
|
||||
var p *plugin.GrpcPlugin
|
||||
|
||||
switch args[0] {
|
||||
case "grpc":
|
||||
log.Info("starting net grpc plugin: ")
|
||||
|
||||
grpcplugin, err := createNetGrpcPlugin(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p = grpcplugin
|
||||
|
||||
default:
|
||||
cmdplugin, err := createCmdPlugin(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
go func() {
|
||||
quit <- <-cmdplugin.Quit
|
||||
}()
|
||||
|
||||
p = &cmdplugin.GrpcPlugin
|
||||
}
|
||||
|
||||
go func() {
|
||||
|
|
@ -175,7 +190,11 @@ func main() {
|
|||
|
||||
d.recorddir = ctx.String("typescript-log-dir")
|
||||
|
||||
return d.run()
|
||||
go func() {
|
||||
quit <- d.run()
|
||||
}()
|
||||
|
||||
return <-quit
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue