diff --git a/epm/bin/epm b/epm/bin/epm new file mode 100755 index 0000000000000000000000000000000000000000..f8d8c96b6df4f0cc81390c5d7013e6e511b4ea74 Binary files /dev/null and b/epm/bin/epm differ diff --git a/epm/cmd/epm/app/server.go b/epm/cmd/epm/app/server.go index 40ee79ff06d362d4f809030b4692ef3945ec8087..f1cc69dce7d0665f3897af405a0dc1c48ad5ad19 100644 --- a/epm/cmd/epm/app/server.go +++ b/epm/cmd/epm/app/server.go @@ -6,6 +6,8 @@ import ( "net" "time" + "github.com/golang/glog" + "github.com/alibaba/inclavare-containers/epm/cmd/epm/app/options" "github.com/alibaba/inclavare-containers/epm/config" "github.com/alibaba/inclavare-containers/epm/pkg/epm" @@ -16,7 +18,7 @@ import ( "google.golang.org/grpc" ) -func runServer(opts *options.Options) error { +func runServer(opts *options.Options, stopCh <-chan struct{}) error { var err error var cfg config.Config @@ -36,11 +38,11 @@ func runServer(opts *options.Options) error { serverOpts = append(serverOpts, grpc.MaxSendMsgSize(cfg.GRPC.MaxSendMsgSize)) } metadata, err := cache_metadata.NewMetadataServer(cfg.DBPath, time.Second*time.Duration(cfg.DBTimeout)) - defer metadata.Close() if err != nil { return fmt.Errorf("create metadata server failed. %++v", err) } + defer metadata.Close() server := epm.EnclavePoolManagerServer{} @@ -58,12 +60,14 @@ func runServer(opts *options.Options) error { // registry and start the cache pool manager server v1alpha1.RegisterEnclavePoolManagerServer(s, &server) // listen and serve - lis, err := net.Listen("udp", cfg.GRPC.Address) + lis, err := net.Listen("unix", cfg.GRPC.Address) if err != nil { log.Fatalf("failed to listen: %v", err) } + glog.Info("start the and epm server...") if err := s.Serve(lis); err != nil { - log.Fatalf("failed to start cache pool manager server: %v", err) + log.Fatalf("failed to start epm server: %v", err) } + <-stopCh return nil } diff --git a/epm/cmd/epm/app/start.go b/epm/cmd/epm/app/start.go index 8375016e5b3576b50e6de6530c5e9879ee9499ec..67cdc9a3abfee4777b000877c24826753fd8bc78 100644 --- a/epm/cmd/epm/app/start.go +++ b/epm/cmd/epm/app/start.go @@ -6,13 +6,13 @@ import ( ) // NewEnclavePoolManagerServer creat and start the enclave pool manager server -func NewEnclavePoolManagerServer() *cobra.Command { +func NewEnclavePoolManagerServer(stopCh <-chan struct{}) *cobra.Command { opts := &options.Options{} cmd := &cobra.Command{ Short: "Launch signature server", Long: "Launch signature server", RunE: func(cmd *cobra.Command, args []string) error { - return runServer(opts) + return runServer(opts, stopCh) }, } flags := cmd.Flags() diff --git a/epm/cmd/epm/main.go b/epm/cmd/epm/main.go index a834784152b7a1330c7f77ca04852b600aa26e4d..b5280b6ae6891256ebd115e9caa8d580b53c6e1b 100644 --- a/epm/cmd/epm/main.go +++ b/epm/cmd/epm/main.go @@ -3,24 +3,42 @@ package main import ( "flag" "os" + "os/signal" "runtime" + "syscall" "github.com/alibaba/inclavare-containers/epm/cmd/epm/app" "github.com/golang/glog" ) +var onlyOneSignalHandler = make(chan struct{}) +var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM} + +func setupSignalHandler() <-chan struct{} { + close(onlyOneSignalHandler) // panics when called twice + + stop := make(chan struct{}) + c := make(chan os.Signal, 2) + signal.Notify(c, shutdownSignals...) + go func() { + <-c + close(stop) + <-c + os.Exit(1) // second signal. Exit directly. + }() + + return stop +} + func main() { + if len(os.Getenv("GOMAXPROCS")) == 0 { runtime.GOMAXPROCS(runtime.NumCPU()) } - - cmd := app.NewEnclavePoolManagerServer() + stopCh := setupSignalHandler() + cmd := app.NewEnclavePoolManagerServer(stopCh) cmd.Flags().AddGoFlagSet(flag.CommandLine) - if err := cmd.Execute(); err != nil { - glog.Fatal(err) - } - flag.CommandLine.Parse([]string{}) if err := cmd.Execute(); err != nil { glog.Fatal(err) diff --git a/epm/conf/config.toml b/epm/conf/config.toml index 56c48e10a5a1fcb213013a47d04aca2090065bca..1e768c2ab2cfe0177d3c3a8af209faef415f3887 100644 --- a/epm/conf/config.toml +++ b/epm/conf/config.toml @@ -3,7 +3,7 @@ db_path = "/var/local/epm/epm.db" db_timeout = 10 [grpc] - address = "/var/run/containerd/containerd.sock" + address = "/var/run/epm.sock" uid = 0 gid = 0 max_recv_message_size = 16777216