tianxiaoliang commented on a change in pull request #855:
URL:
https://github.com/apache/servicecomb-service-center/pull/855#discussion_r573373191
##########
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:
如果collection存在则直接return,否则log.fatal xxx,当前的实现有点绕了
----------------------------------------------------------------
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]