aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbukton <buk_ton2@hotmail.com>2020-04-20 08:13:57 +0700
committerbukton <buk_ton2@hotmail.com>2020-04-20 08:13:57 +0700
commitda37455254ee5b94a8bbccd09f516705f0f5be53 (patch)
treee267f6141cbedad36553a07bbf7beedd33e7f163
parent3defa718a181bda924a80d5de6f3bcfca6dc6cad (diff)
downloadseaweedfs-da37455254ee5b94a8bbccd09f516705f0f5be53.tar.xz
seaweedfs-da37455254ee5b94a8bbccd09f516705f0f5be53.zip
filer mongo add func create index unique directory, name
-rw-r--r--weed/filer2/mongodb/mongodb_store.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/weed/filer2/mongodb/mongodb_store.go b/weed/filer2/mongodb/mongodb_store.go
index 4e78c54a4..aa55145d7 100644
--- a/weed/filer2/mongodb/mongodb_store.go
+++ b/weed/filer2/mongodb/mongodb_store.go
@@ -10,6 +10,7 @@ import (
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
+ "go.mongodb.org/mongo-driver/x/bsonx"
"time"
)
@@ -49,10 +50,37 @@ func (store *MongodbStore) connection(uri string, poolSize uint64) (err error) {
}
client, err := mongo.Connect(ctx, opts)
+ if err != nil {
+ return err
+ }
+
+ c := client.Database(store.database).Collection(store.collectionName)
+ err = store.indexUnique(c)
store.connect = client
return err
}
+func (store *MongodbStore) createIndex (c *mongo.Collection, index mongo.IndexModel, opts *options.CreateIndexesOptions) error {
+ _, err := c.Indexes().CreateOne(context.Background(), index, opts)
+ return err
+}
+
+func (store *MongodbStore) indexUnique(c *mongo.Collection) error {
+ opts := options.CreateIndexes().SetMaxTime(10 * time.Second)
+
+ unique := new(bool)
+ *unique = true
+
+ index := mongo.IndexModel{
+ Keys: bsonx.Doc{{Key: "directory", Value: bsonx.Int32(1)}, {Key: "name", Value: bsonx.Int32(1)}},
+ Options: &options.IndexOptions{
+ Unique: unique,
+ },
+ }
+
+ return store.createIndex(c, index, opts)
+}
+
func (store *MongodbStore) BeginTransaction(ctx context.Context) (context.Context, error) {
return ctx, nil
}