From c41bf6f1042f8c2623785df0962be16a86ebbee3 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 10:47:14 +0800 Subject: [PATCH 1/6] vendor: pkg: signalutils: add platform specific SetDumpStackSignal() --- .../x/pkg/util/signalutils/dumpstack_others.go | 15 +++++++++++++++ .../x/pkg/util/signalutils/dumpstack_windows.go | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 vendor/yunion.io/x/pkg/util/signalutils/dumpstack_others.go create mode 100644 vendor/yunion.io/x/pkg/util/signalutils/dumpstack_windows.go diff --git a/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_others.go b/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_others.go new file mode 100644 index 0000000000..b0449bc6ca --- /dev/null +++ b/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_others.go @@ -0,0 +1,15 @@ +// +build !windows +package signalutils + +import ( + "syscall" + + "yunion.io/x/log" + "yunion.io/x/pkg/utils" +) + +func SetDumpStackSignal() { + RegisterSignal(func() { + utils.DumpAllGoroutineStack(log.Logger().Out) + }, syscall.SIGUSR1) +} diff --git a/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_windows.go b/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_windows.go new file mode 100644 index 0000000000..940488abcd --- /dev/null +++ b/vendor/yunion.io/x/pkg/util/signalutils/dumpstack_windows.go @@ -0,0 +1,4 @@ +package signalutils + +func SetDumpStackSignal() { +} From 02de12ae5b6da8c24e85a0f6cc3293ed519c4153 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 10:50:52 +0800 Subject: [PATCH 2/6] vendor: executor: add platform specific constructor for WaitStatus --- vendor/yunion.io/x/executor/client/client.go | 2 +- .../yunion.io/x/executor/client/waitstatus_others.go | 11 +++++++++++ .../yunion.io/x/executor/client/waitstatus_windows.go | 11 +++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 vendor/yunion.io/x/executor/client/waitstatus_others.go create mode 100644 vendor/yunion.io/x/executor/client/waitstatus_windows.go diff --git a/vendor/yunion.io/x/executor/client/client.go b/vendor/yunion.io/x/executor/client/client.go index 04a19ba559..a02dae350b 100644 --- a/vendor/yunion.io/x/executor/client/client.go +++ b/vendor/yunion.io/x/executor/client/client.go @@ -332,7 +332,7 @@ func (c *Cmd) Wait() error { } return nil } else { - return &ExitError{ExitStatus: syscall.WaitStatus(res.ExitStatus)} + return &ExitError{ExitStatus: NewWaitStatus(res.ExitStatus)} } } diff --git a/vendor/yunion.io/x/executor/client/waitstatus_others.go b/vendor/yunion.io/x/executor/client/waitstatus_others.go new file mode 100644 index 0000000000..3903de6a29 --- /dev/null +++ b/vendor/yunion.io/x/executor/client/waitstatus_others.go @@ -0,0 +1,11 @@ +// +build !windows + +package client + +import ( + "syscall" +) + +func NewWaitStatus(ws uint32) syscall.WaitStatus { + return syscall.WaitStatus(ws) +} diff --git a/vendor/yunion.io/x/executor/client/waitstatus_windows.go b/vendor/yunion.io/x/executor/client/waitstatus_windows.go new file mode 100644 index 0000000000..a2d4d32993 --- /dev/null +++ b/vendor/yunion.io/x/executor/client/waitstatus_windows.go @@ -0,0 +1,11 @@ +package client + +import ( + "syscall" +) + +func NewWaitStatus(ws uint32) syscall.WaitStatus { + return syscall.WaitStatus{ + ExitCode: ws, + } +} From 0127b3872ef3fe6a2202bfc8564f3aabeb737ba2 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 10:51:34 +0800 Subject: [PATCH 3/6] procutils: exec.Cmd setsid only for linux --- pkg/util/procutils/cmdsetsid_others.go | 15 +++++++++++++++ pkg/util/procutils/cmdsetsid_windows.go | 7 +++++++ pkg/util/procutils/executor.go | 8 ++------ 3 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 pkg/util/procutils/cmdsetsid_others.go create mode 100644 pkg/util/procutils/cmdsetsid_windows.go diff --git a/pkg/util/procutils/cmdsetsid_others.go b/pkg/util/procutils/cmdsetsid_others.go new file mode 100644 index 0000000000..583186e11d --- /dev/null +++ b/pkg/util/procutils/cmdsetsid_others.go @@ -0,0 +1,15 @@ +// +build !windows + +package procutils + +import ( + "os/exec" + "syscall" +) + +func cmdSetSid(cmd *exec.Cmd) { + if cmd.SysProcAttr == nil { + cmd.SysProcAttr = &syscall.SysProcAttr{} + } + cmd.SysProcAttr.Setsid = true +} diff --git a/pkg/util/procutils/cmdsetsid_windows.go b/pkg/util/procutils/cmdsetsid_windows.go new file mode 100644 index 0000000000..dfbd19de89 --- /dev/null +++ b/pkg/util/procutils/cmdsetsid_windows.go @@ -0,0 +1,7 @@ +package procutils + +import ( + "os/exec" +) + +func cmdSetSid(cmd *exec.Cmd) {} diff --git a/pkg/util/procutils/executor.go b/pkg/util/procutils/executor.go index 33af45c451..13d44a6482 100644 --- a/pkg/util/procutils/executor.go +++ b/pkg/util/procutils/executor.go @@ -67,17 +67,13 @@ type defaultExecutor struct{} func (e *defaultExecutor) Command(name string, args ...string) Cmd { cmd := exec.Command(name, args...) - cmd.SysProcAttr = &syscall.SysProcAttr{ - Setsid: true, - } + cmdSetSid(cmd) return &defaultCmd{cmd} } func (e *defaultExecutor) CommandContext(ctx context.Context, name string, args ...string) Cmd { cmd := exec.CommandContext(ctx, name, args...) - cmd.SysProcAttr = &syscall.SysProcAttr{ - Setsid: true, - } + cmdSetSid(cmd) return &defaultCmd{cmd} } From 1e283efa78ef735705c3833c72503964f7fcbf52 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 10:56:18 +0800 Subject: [PATCH 4/6] fileutils: platform specific Writable() --- pkg/util/fileutils2/fileutils.go | 6 ------ pkg/util/fileutils2/writable_others.go | 11 +++++++++++ pkg/util/fileutils2/writable_windows.go | 5 +++++ vendor/yunion.io/x/executor/client/client.go | 2 +- .../yunion.io/x/executor/client/waitstatus_others.go | 2 +- .../yunion.io/x/executor/client/waitstatus_windows.go | 2 +- 6 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 pkg/util/fileutils2/writable_others.go create mode 100644 pkg/util/fileutils2/writable_windows.go diff --git a/pkg/util/fileutils2/fileutils.go b/pkg/util/fileutils2/fileutils.go index f7f0783c97..c2069128cb 100644 --- a/pkg/util/fileutils2/fileutils.go +++ b/pkg/util/fileutils2/fileutils.go @@ -24,8 +24,6 @@ import ( "regexp" "strings" - "golang.org/x/sys/unix" - "yunion.io/x/log" "yunion.io/x/onecloud/pkg/util/procutils" @@ -241,10 +239,6 @@ func (hf HostsFile) String() string { return ret } -func Writable(path string) bool { - return unix.Access(path, unix.W_OK) == nil -} - func FsFormatToDiskType(fsFormat string) string { switch { case fsFormat == "swap": diff --git a/pkg/util/fileutils2/writable_others.go b/pkg/util/fileutils2/writable_others.go new file mode 100644 index 0000000000..4ffa109724 --- /dev/null +++ b/pkg/util/fileutils2/writable_others.go @@ -0,0 +1,11 @@ +// +build !windows + +package fileutils2 + +import ( + "golang.org/x/sys/unix" +) + +func Writable(path string) bool { + return unix.Access(path, unix.W_OK) == nil +} diff --git a/pkg/util/fileutils2/writable_windows.go b/pkg/util/fileutils2/writable_windows.go new file mode 100644 index 0000000000..bfc36f60b2 --- /dev/null +++ b/pkg/util/fileutils2/writable_windows.go @@ -0,0 +1,5 @@ +package fileutils2 + +func Writable(path string) bool { + return false +} diff --git a/vendor/yunion.io/x/executor/client/client.go b/vendor/yunion.io/x/executor/client/client.go index a02dae350b..deed5dbf84 100644 --- a/vendor/yunion.io/x/executor/client/client.go +++ b/vendor/yunion.io/x/executor/client/client.go @@ -332,7 +332,7 @@ func (c *Cmd) Wait() error { } return nil } else { - return &ExitError{ExitStatus: NewWaitStatus(res.ExitStatus)} + return &ExitError{ExitStatus: newWaitStatus(res.ExitStatus)} } } diff --git a/vendor/yunion.io/x/executor/client/waitstatus_others.go b/vendor/yunion.io/x/executor/client/waitstatus_others.go index 3903de6a29..3021c483df 100644 --- a/vendor/yunion.io/x/executor/client/waitstatus_others.go +++ b/vendor/yunion.io/x/executor/client/waitstatus_others.go @@ -6,6 +6,6 @@ import ( "syscall" ) -func NewWaitStatus(ws uint32) syscall.WaitStatus { +func newWaitStatus(ws uint32) syscall.WaitStatus { return syscall.WaitStatus(ws) } diff --git a/vendor/yunion.io/x/executor/client/waitstatus_windows.go b/vendor/yunion.io/x/executor/client/waitstatus_windows.go index a2d4d32993..9f278769a0 100644 --- a/vendor/yunion.io/x/executor/client/waitstatus_windows.go +++ b/vendor/yunion.io/x/executor/client/waitstatus_windows.go @@ -4,7 +4,7 @@ import ( "syscall" ) -func NewWaitStatus(ws uint32) syscall.WaitStatus { +func newWaitStatus(ws uint32) syscall.WaitStatus { return syscall.WaitStatus{ ExitCode: ws, } From f3558f7b91d1a7001081b53e21b118ecc6cf57de Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 10:52:19 +0800 Subject: [PATCH 5/6] appsrv: use signalutils.SetDumpStackSignal() --- pkg/appsrv/appsrv.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/appsrv/appsrv.go b/pkg/appsrv/appsrv.go index b2d7ad2e58..55afaf796c 100644 --- a/pkg/appsrv/appsrv.go +++ b/pkg/appsrv/appsrv.go @@ -405,10 +405,7 @@ func (app *Application) registerCleanShutdown(s *http.Server, onStop func()) { } app.idleConnsClosed = make(chan struct{}) - // dump goroutine stack - signalutils.RegisterSignal(func() { - utils.DumpAllGoroutineStack(log.Logger().Out) - }, syscall.SIGUSR1) + signalutils.SetDumpStackSignal() quitSignals := []os.Signal{syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM} signalutils.RegisterSignal(func() { From 1fd6db15d6eb7664dc2403302e0b089c52a13aa8 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 26 Feb 2020 11:31:25 +0800 Subject: [PATCH 6/6] build: set GOOS=linux by default --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 66e12ed56d..a5f5a4911e 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ ifdef LIBQEMUIO_PATH X_CGO_LDFLAGS := ${CGO_LDFLAGS_ENV} -laio -lqemuio -lpthread -L ${LIBQEMUIO_PATH}/src endif +export GOOS ?= linux export GO111MODULE:=on export CGO_CFLAGS = ${X_CGO_CFLAGS} export CGO_LDFLAGS = ${X_CGO_LDFLAGS}