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



##########
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:
       
![微信截图_20210209155332](https://user-images.githubusercontent.com/26628394/107332969-c9c83000-6aef-11eb-9956-8eefe5b1cd53.png)
   




----------------------------------------------------------------
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