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-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new fca5aa9  handle create index duplicate error (#863)
fca5aa9 is described below

commit fca5aa9fdc73227a6356fec6719985e53a3da446
Author: panqian <[email protected]>
AuthorDate: Fri Feb 19 18:51:19 2021 +0800

    handle create index duplicate error (#863)
---
 datasource/mongo/mongo.go | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/datasource/mongo/mongo.go b/datasource/mongo/mongo.go
index b4a8ce1..95f762f 100644
--- a/datasource/mongo/mongo.go
+++ b/datasource/mongo/mongo.go
@@ -131,10 +131,7 @@ func EnsureService() {
        serviceIndexs = append(serviceIndexs, serviceIDIndex, serviceIndex)
 
        err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionService, serviceIndexs)
-       if err != nil {
-               log.Fatal("failed to create service collection indexs", err)
-               return
-       }
+       wrapCreateIndexesError(err)
 }
 
 func EnsureInstance() {
@@ -150,10 +147,7 @@ func EnsureInstance() {
        instanceIndexs = append(instanceIndexs, instanceIndex, 
instanceServiceIndex)
 
        err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionInstance, instanceIndexs)
-       if err != nil {
-               log.Fatal("failed to create instance collection indexs", err)
-               return
-       }
+       wrapCreateIndexesError(err)
 }
 
 func EnsureSchema() {
@@ -169,10 +163,7 @@ func EnsureSchema() {
        schemaIndexs = append(schemaIndexs, schemaServiceIndex)
 
        err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionSchema, schemaIndexs)
-       if err != nil {
-               log.Fatal("failed to create schema collection indexs", err)
-               return
-       }
+       wrapCreateIndexesError(err)
 }
 
 func EnsureRule() {
@@ -188,10 +179,7 @@ func EnsureRule() {
        ruleIndexs = append(ruleIndexs, ruleServiceIndex)
 
        err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionRule, ruleIndexs)
-       if err != nil {
-               log.Fatal("failed to create rule collection indexs", err)
-               return
-       }
+       wrapCreateIndexesError(err)
 }
 
 func EnsureDep() {
@@ -224,6 +212,17 @@ func wrapCreateCollectionError(err error) {
        }
 }
 
+func wrapCreateIndexesError(err error) {
+       if err != nil {
+               // commandError can be returned by any operation
+               cmdErr, ok := err.(mongo.CommandError)
+               if ok && cmdErr.Code == client.DuplicateKey {
+                       return
+               }
+               log.Fatal("failed to create indexes ", err)
+       }
+}
+
 func (ds *DataSource) initStore() {
        if !config.GetRegistry().EnableCache {
                log.Debug("cache is disabled")

Reply via email to