From 01332490d37c8c52021d6a5478e9fa97cbbcf1da Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Mon, 29 Jul 2024 12:39:56 +0800 Subject: [PATCH] refactor: Update user service to use sync.Once for singleton initialization --- core/user/service_v2.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/user/service_v2.go b/core/user/service_v2.go index c0ab759c..696b7d95 100644 --- a/core/user/service_v2.go +++ b/core/user/service_v2.go @@ -1,6 +1,7 @@ package user import ( + "github.com/apex/log" "github.com/crawlab-team/crawlab/core/constants" "github.com/crawlab-team/crawlab/core/errors" "github.com/crawlab-team/crawlab/core/interfaces" @@ -14,6 +15,7 @@ import ( "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" + "sync" "time" ) @@ -181,7 +183,7 @@ func (svc *ServiceV2) getSecretFunc() jwt.Keyfunc { } } -func NewUserServiceV2() (svc *ServiceV2, err error) { +func newUserServiceV2() (svc *ServiceV2, err error) { // service svc = &ServiceV2{ modelSvc: service.NewModelServiceV2[models.UserV2](), @@ -191,6 +193,7 @@ func NewUserServiceV2() (svc *ServiceV2, err error) { // initialize if err := svc.Init(); err != nil { + log.Errorf("failed to initialize user service: %v", err) return nil, trace.TraceError(err) } @@ -198,15 +201,14 @@ func NewUserServiceV2() (svc *ServiceV2, err error) { } var userSvcV2 *ServiceV2 +var userSvcV2Once sync.Once func GetUserServiceV2() (svc *ServiceV2, err error) { - if userSvcV2 != nil { - return userSvcV2, nil - } - svc, err = NewUserServiceV2() - if err != nil { - return nil, err - } - userSvcV2 = svc - return svc, nil + userSvcV2Once.Do(func() { + userSvcV2, err = newUserServiceV2() + if err != nil { + return + } + }) + return userSvcV2, nil }