This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-kie.git


The following commit(s) were added to refs/heads/master by this push:
     new 98ea6a3  retry once if EureDB fails to avoid netword occassionally 
failure (#171)
98ea6a3 is described below

commit 98ea6a346b08782492f47aee4b3e693e74c8f5aa
Author: Shawn <[email protected]>
AuthorDate: Fri Feb 5 10:57:42 2021 +0800

    retry once if EureDB fails to avoid netword occassionally failure (#171)
---
 server/service/mongo/session/session.go | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/server/service/mongo/session/session.go 
b/server/service/mongo/session/session.go
index 4d1378b..4f85031 100644
--- a/server/service/mongo/session/session.go
+++ b/server/service/mongo/session/session.go
@@ -200,10 +200,7 @@ func GetColInfo(ctx context.Context, name string) 
(*CollectionInfo, error) {
 
 //EnsureDB build mongo db schema
 func EnsureDB() {
-       session, err := mgo.Dial(config.GetDB().URI)
-       if err != nil {
-               openlog.Fatal("can not dial db:" + err.Error())
-       }
+       session := OpenSession()
        defer session.Close()
        session.SetMode(mgo.Monotonic, true)
 
@@ -218,6 +215,26 @@ func EnsureDB() {
        ensureKVLongPolling(session)
 }
 
+func OpenSession() *mgo.Session {
+       var timeout time.Duration
+       var err error
+       if config.GetDB().Timeout != "" {
+               timeout, err = time.ParseDuration(config.GetDB().Timeout)
+               if err != nil {
+                       openlog.Fatal("invalid timeout :" + err.Error())
+               }
+       }
+       session, err := mgo.DialWithTimeout(config.GetDB().URI, timeout)
+       if err != nil {
+               openlog.Warn("can not dial db, retry once:" + err.Error())
+               session, err = mgo.DialWithTimeout(config.GetDB().URI, timeout)
+               if err != nil {
+                       openlog.Fatal("can not dial db:" + err.Error())
+               }
+       }
+       return session
+}
+
 func ensureKVLongPolling(session *mgo.Session) {
        c := session.DB(DBName).C(CollectionPollingDetail)
        err := c.Create(&mgo.CollectionInfo{Validator: bson.M{

Reply via email to