feat: config

pull/2997/head
icey-yu 9 months ago
parent 5d449400da
commit fa79fac6d5

@ -156,13 +156,20 @@ func Start(ctx context.Context, index int, config *Config) error {
signal.Notify(sigs, syscall.SIGTERM) signal.Notify(sigs, syscall.SIGTERM)
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
shutdown := func() error {
err := server.Shutdown(ctx)
if err != nil {
return errs.WrapMsg(err, "shutdown err")
}
return nil
}
disetcd.RegisterShutDown(shutdown)
defer cancel() defer cancel()
select { select {
case <-sigs: case <-sigs:
program.SIGTERMExit() program.SIGTERMExit()
err := server.Shutdown(ctx) if err := shutdown(); err != nil {
if err != nil { return err
return errs.WrapMsg(err, "shutdown err")
} }
case <-netDone: case <-netDone:
close(netDone) close(netDone)

@ -2,12 +2,14 @@ package msggateway
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"net/http" "net/http"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/openimsdk/open-im-server/v3/pkg/common/discovery/etcd"
"github.com/openimsdk/open-im-server/v3/pkg/common/webhook" "github.com/openimsdk/open-im-server/v3/pkg/common/webhook"
"github.com/openimsdk/open-im-server/v3/pkg/rpccache" "github.com/openimsdk/open-im-server/v3/pkg/rpccache"
pbAuth "github.com/openimsdk/protocol/auth" pbAuth "github.com/openimsdk/protocol/auth"
@ -161,20 +163,27 @@ func (ws *WsServer) Run(done chan error) error {
http.HandleFunc("/", ws.wsHandler) http.HandleFunc("/", ws.wsHandler)
err := server.ListenAndServe() err := server.ListenAndServe()
defer close(netDone) defer close(netDone)
if err != nil && err != http.ErrServerClosed { if err != nil && !errors.Is(err, http.ErrServerClosed) {
netErr = errs.WrapMsg(err, "ws start err", server.Addr) netErr = errs.WrapMsg(err, "ws start err", server.Addr)
} }
}() }()
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel() shutDown := func() error {
var err error
select {
case err = <-done:
sErr := server.Shutdown(ctx) sErr := server.Shutdown(ctx)
if sErr != nil { if sErr != nil {
return errs.WrapMsg(sErr, "shutdown err") return errs.WrapMsg(sErr, "shutdown err")
} }
close(shutdownDone) close(shutdownDone)
return nil
}
etcd.RegisterShutDown(shutDown)
defer cancel()
var err error
select {
case err = <-done:
if err := shutDown(); err != nil {
return err
}
if err != nil { if err != nil {
return err return err
} }

@ -18,6 +18,14 @@ const (
ConfigKeyPrefix = "/open-im/config/" ConfigKeyPrefix = "/open-im/config/"
) )
var (
ShutDowns []func() error
)
func RegisterShutDown(shutDown ...func() error) {
ShutDowns = append(ShutDowns, shutDown...)
}
type ConfigManager struct { type ConfigManager struct {
client *clientv3.Client client *clientv3.Client
watchConfigNames []string watchConfigNames []string
@ -83,6 +91,12 @@ func restartServer(ctx context.Context) error {
if runtime.GOOS != "windows" { if runtime.GOOS != "windows" {
cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr = &syscall.SysProcAttr{}
} }
log.ZInfo(ctx, "shutdown server")
for _, f := range ShutDowns {
if err = f(); err != nil {
log.ZError(ctx, "shutdown fail", err)
}
}
log.ZInfo(ctx, "restart server") log.ZInfo(ctx, "restart server")
err = cmd.Start() err = cmd.Start()

Loading…
Cancel
Save