diff options
| author | bukton <buk_ton2@hotmail.com> | 2020-04-19 00:16:50 +0700 |
|---|---|---|
| committer | bukton <buk_ton2@hotmail.com> | 2020-04-19 00:16:50 +0700 |
| commit | 24a81922984aacedf37b383299a590fe764102b1 (patch) | |
| tree | 99de41ff60571dd45248195019859a10cd38b347 | |
| parent | 3c70163798a88580988169058ff528eeea95023b (diff) | |
| download | seaweedfs-24a81922984aacedf37b383299a590fe764102b1.tar.xz seaweedfs-24a81922984aacedf37b383299a590fe764102b1.zip | |
filer mongo list
| -rw-r--r-- | weed/filer2/mongodb/mongodb_store.go | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/weed/filer2/mongodb/mongodb_store.go b/weed/filer2/mongodb/mongodb_store.go index ae76c0bf1..912053cbe 100644 --- a/weed/filer2/mongodb/mongodb_store.go +++ b/weed/filer2/mongodb/mongodb_store.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/chrislusf/seaweedfs/weed/filer2" + "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/util" "go.mongodb.org/mongo-driver/bson" @@ -73,8 +74,6 @@ func (store *MongodbStore) InsertEntry(ctx context.Context, entry *filer2.Entry) Meta: meta, }) - fmt.Println(err) - return nil } @@ -87,7 +86,7 @@ func (store *MongodbStore) FindEntry(ctx context.Context, fullpath util.FullPath dir, name := fullpath.DirAndName() var data Model - var where = bson.M{ "directory": dir, "name": name } + var where = bson.M{"directory": dir, "name": name} err = store.connect.Database(store.database).Collection(store.collectionName).FindOne(ctx, where).Decode(&data) if err != mongo.ErrNoDocuments && err != nil { return nil, filer_pb.ErrNotFound @@ -121,7 +120,38 @@ func (store *MongodbStore) DeleteFolderChildren(ctx context.Context, fullpath ut func (store *MongodbStore) ListDirectoryEntries(ctx context.Context, fullpath util.FullPath, startFileName string, inclusive bool, limit int) (entries []*filer2.Entry, err error) { - return nil, nil + var where = bson.M{"directory": string(fullpath), "name": bson.M{ "$gt": startFileName, }} + if inclusive { + where["name"] = bson.M{ + "$gte": startFileName, + } + } + optLimit := int64(limit) + cur, err := store.connect.Database(store.database).Collection(store.collectionName).Find(ctx, where, &options.FindOptions{Limit: &optLimit}) + for cur.Next(ctx) { + var data Model + err := cur.Decode(&data) + if err != nil && err != mongo.ErrNoDocuments { + return nil, err + } + + entry := &filer2.Entry{ + FullPath: util.NewFullPath(string(fullpath), data.Name), + } + if decodeErr := entry.DecodeAttributesAndChunks(data.Meta); decodeErr != nil { + err = decodeErr + glog.V(0).Infof("list %s : %v", entry.FullPath, err) + break + } + + entries = append(entries, entry) + } + + if err := cur.Close(ctx); err != nil { + glog.V(0).Infof("list iterator close: %v", err) + } + + return entries, err } func (store *MongodbStore) Shutdown() { |
