diff --git a/internal/proxy/hook_interceptor.go b/internal/proxy/hook_interceptor.go index fa3950e6fb50ce1fef5483d0cbbbfa7c83b702c8..8bbef7325db6cdfa9f0016ace692767439eafd4b 100644 --- a/internal/proxy/hook_interceptor.go +++ b/internal/proxy/hook_interceptor.go @@ -2,6 +2,7 @@ package proxy import ( "context" + "fmt" "plugin" "github.com/milvus-io/milvus/api/hook" @@ -34,41 +35,41 @@ func (d defaultHook) Release() {} var hoo hook.Hook -func initHook() { +func initHook() error { path := Params.ProxyCfg.SoPath if path == "" { hoo = defaultHook{} - return + return nil } logger.Debug("start to load plugin", zap.String("path", path)) p, err := plugin.Open(path) if err != nil { - exit("fail to open the plugin", err) + return fmt.Errorf("fail to open the plugin, error: %s", err.Error()) } logger.Debug("plugin open") h, err := p.Lookup("MilvusHook") if err != nil { - exit("fail to the 'MilvusHook' object in the plugin", err) + return fmt.Errorf("fail to the 'MilvusHook' object in the plugin, error: %s", err.Error()) } var ok bool hoo, ok = h.(hook.Hook) if !ok { - exit("fail to convert the `Hook` interface", nil) + return fmt.Errorf("fail to convert the `Hook` interface") } if err = hoo.Init(Params.HookCfg.SoConfig); err != nil { - exit("fail to init configs for the hoo", err) + return fmt.Errorf("fail to init configs for the hook, error: %s", err.Error()) } -} - -func exit(errMsg string, err error) { - logger.Panic("hoo error", zap.String("path", Params.ProxyCfg.SoPath), zap.String("msg", errMsg), zap.Error(err)) + return nil } func UnaryServerHookInterceptor() grpc.UnaryServerInterceptor { - initHook() + if hookError := initHook(); hookError != nil { + logger.Error("hook error", zap.String("path", Params.ProxyCfg.SoPath), zap.Error(hookError)) + hoo = defaultHook{} + } return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { var ( fullMethod = info.FullMethod diff --git a/internal/proxy/hook_interceptor_test.go b/internal/proxy/hook_interceptor_test.go index 56a9143d7636487664b0a38532d57e130d046cec..f63aaa3ae2b5839cd9f1f671f9ec6c8f0d31bdb6 100644 --- a/internal/proxy/hook_interceptor_test.go +++ b/internal/proxy/hook_interceptor_test.go @@ -16,9 +16,8 @@ func TestInitHook(t *testing.T) { assert.IsType(t, defaultHook{}, hoo) Params.ProxyCfg.SoPath = "/a/b/hook.so" - assert.Panics(t, func() { - initHook() - }) + err := initHook() + assert.NotNil(t, err) Params.ProxyCfg.SoPath = "" }