tianxiaoliang commented on a change in pull request #855:
URL: 
https://github.com/apache/servicecomb-service-center/pull/855#discussion_r572656847



##########
File path: datasource/mongo/mongo.go
##########
@@ -100,64 +97,127 @@ func (ds *DataSource) initClient() error {
        }
 }
 
-//{Key: StringBuilder([]string{ColumnService, ColumnAlias}), Value: 
bsonx.Int32(1)}
-func (ds *DataSource) createIndexes() (err error) {
-       err = client.GetMongoClient().CreateIndexes(context.TODO(), 
CollectionService, []mongo.IndexModel{{
-               Keys:    bsonx.Doc{{Key: StringBuilder([]string{ColumnService, 
ColumnServiceID}), Value: bsonx.Int32(1)}},
-               Options: options.Index().SetUnique(true),
-       }, {
-               Keys: bsonx.Doc{{Key: StringBuilder([]string{ColumnService, 
ColumnAppID}), Value: bsonx.Int32(1)},
-                       {Key: StringBuilder([]string{ColumnService, 
ColumnServiceName}), Value: bsonx.Int32(1)},
-                       {Key: StringBuilder([]string{ColumnService, 
ColumnEnv}), Value: bsonx.Int32(1)},
-                       {Key: StringBuilder([]string{ColumnService, 
ColumnVersion}), Value: bsonx.Int32(1)},
-                       {Key: ColumnDomain, Value: bsonx.Int32(1)},
-                       {Key: ColumnProject, Value: bsonx.Int32(1)},
-               },
-               Options: options.Index().SetUnique(true),
-       }})
+func EnsureDB() {
+       EnsureService()
+       EnsureInstance()
+       EnsureRule()
+       EnsureSchema()
+       EnsureDep()
+}
+
+func EnsureService() {
+       err := 
client.GetMongoClient().GetDB().CreateCollection(context.Background(), 
CollectionService, options.CreateCollection().SetValidator(nil))
+       wrapCreateCollectionError(err)
+
+       serviceIDIndex := BuildIndexDoc(
+               StringBuilder([]string{ColumnService, ColumnServiceID}))
+       serviceIDIndex.Options = options.Index().SetUnique(true)
+
+       serviceIndex := BuildIndexDoc(
+               StringBuilder([]string{ColumnService, ColumnAppID}),
+               StringBuilder([]string{ColumnService, ColumnServiceName}),
+               StringBuilder([]string{ColumnService, ColumnEnv}),
+               StringBuilder([]string{ColumnService, ColumnVersion}),
+               ColumnDomain,
+               ColumnProject)
+       serviceIndex.Options = options.Index().SetUnique(true)
+
+       var serviceIndexs []mongo.IndexModel
+       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
        }
-       err = client.GetMongoClient().CreateIndexes(context.TODO(), 
CollectionInstance, []mongo.IndexModel{{
-               Keys:    bsonx.Doc{{Key: StringBuilder([]string{ColumnInstance, 
ColumnInstanceID}), Value: bsonx.Int32(1)}},
-               Options: options.Index().SetUnique(true),
-       }, {
-               Keys: bsonx.Doc{{Key: StringBuilder([]string{ColumnInstanceID, 
ColumnServiceID}), Value: bsonx.Int32(1)}},
-       }, {
-               Keys:    bsonx.Doc{{Key: ColumnRefreshTime, Value: 
bsonx.Int32(1)}},
-               Options: options.Index().SetExpireAfterSeconds(60),
-       }})
+}
+
+func EnsureInstance() {
+       err := 
client.GetMongoClient().GetDB().CreateCollection(context.Background(), 
CollectionInstance, options.CreateCollection().SetValidator(nil))
+       wrapCreateCollectionError(err)
+
+       instanceIDIndex := BuildIndexDoc(StringBuilder([]string{ColumnInstance, 
ColumnInstanceID}))
+       instanceIDIndex.Options = options.Index().SetUnique(true)
+
+       instanceIndex := BuildIndexDoc(ColumnRefreshTime)
+       instanceIndex.Options = options.Index().SetExpireAfterSeconds(60)
+
+       instanceServiceIndex := 
BuildIndexDoc(StringBuilder([]string{ColumnInstanceID, ColumnServiceID}))
+
+       var instanceIndexs []mongo.IndexModel
+       instanceIndexs = append(instanceIndexs, instanceIndex, instanceIDIndex, 
instanceServiceIndex)
+
+       err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionInstance, instanceIndexs)
        if err != nil {
+               log.Fatal("failed to create instance collection indexs", err)
                return
        }
-       err = client.GetMongoClient().CreateIndexes(context.TODO(), 
CollectionSchema, []mongo.IndexModel{{
-               Keys: bsonx.Doc{
-                       {Key: ColumnDomain, Value: bsonx.Int32(1)},
-                       {Key: ColumnProject, Value: bsonx.Int32(1)},
-                       {Key: ColumnServiceID, Value: bsonx.Int32(1)}},
-       }})
+}
+
+func EnsureSchema() {
+       err := 
client.GetMongoClient().GetDB().CreateCollection(context.Background(), 
CollectionSchema, options.CreateCollection().SetValidator(nil))
+       wrapCreateCollectionError(err)
+
+       schemaServiceIndex := BuildIndexDoc(
+               ColumnDomain,
+               ColumnProject,
+               ColumnServiceID)
+
+       var schemaIndexs []mongo.IndexModel
+       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
        }
-       err = client.GetMongoClient().CreateIndexes(context.TODO(), 
CollectionRule, []mongo.IndexModel{{
-               Keys: bsonx.Doc{
-                       {Key: ColumnDomain, Value: bsonx.Int32(1)},
-                       {Key: ColumnProject, Value: bsonx.Int32(1)},
-                       {Key: ColumnServiceID, Value: bsonx.Int32(1)}},
-       }})
+}
+
+func EnsureRule() {
+       err := 
client.GetMongoClient().GetDB().CreateCollection(context.Background(), 
CollectionRule, options.CreateCollection().SetValidator(nil))
+       wrapCreateCollectionError(err)
+
+       ruleServiceIndex := BuildIndexDoc(
+               ColumnDomain,
+               ColumnProject,
+               ColumnServiceID)
+
+       var ruleIndexs []mongo.IndexModel
+       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
        }
-       err = client.GetMongoClient().CreateIndexes(context.TODO(), 
CollectionDep, []mongo.IndexModel{{
-               Keys: bsonx.Doc{
-                       {Key: ColumnDomain, Value: bsonx.Int32(1)},
-                       {Key: ColumnProject, Value: bsonx.Int32(1)},
-                       {Key: ColumnServiceKey, Value: bsonx.Int32(1)}},
-       }})
+}
+
+func EnsureDep() {
+       err := 
client.GetMongoClient().GetDB().CreateCollection(context.Background(), 
CollectionDep, options.CreateCollection().SetValidator(nil))
+       wrapCreateCollectionError(err)
+
+       depServiceIndex := BuildIndexDoc(
+               ColumnDomain,
+               ColumnProject,
+               ColumnServiceKey)
+
+       var depIndexs []mongo.IndexModel
+       depIndexs = append(depIndexs, depServiceIndex)
+
+       err = client.GetMongoClient().CreateIndexes(context.Background(), 
CollectionDep, depIndexs)
        if err != nil {
+               log.Fatal("failed to create dep collection indexs", err)
                return
        }
-       return
+}
+
+func wrapCreateCollectionError(err error) {
+       if err != nil {
+               cmdErr, ok := err.(mongo.CommandError)

Review comment:
       这个fatal的条件是非cmd error,或者ns不存在。那么问题是如果是其他error为何可以继续执行下去?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to