aboutsummaryrefslogtreecommitdiff
path: root/weed/server/filer_grpc_server.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/filer_grpc_server.go')
-rw-r--r--weed/server/filer_grpc_server.go46
1 files changed, 36 insertions, 10 deletions
diff --git a/weed/server/filer_grpc_server.go b/weed/server/filer_grpc_server.go
index 830d8ebe1..9d61615ef 100644
--- a/weed/server/filer_grpc_server.go
+++ b/weed/server/filer_grpc_server.go
@@ -13,6 +13,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/util"
"strconv"
+ "strings"
)
func (fs *FilerServer) LookupDirectoryEntry(ctx context.Context, req *filer_pb.LookupDirectoryEntryRequest) (*filer_pb.LookupDirectoryEntryResponse, error) {
@@ -34,20 +35,45 @@ func (fs *FilerServer) LookupDirectoryEntry(ctx context.Context, req *filer_pb.L
func (fs *FilerServer) ListEntries(ctx context.Context, req *filer_pb.ListEntriesRequest) (*filer_pb.ListEntriesResponse, error) {
- entries, err := fs.filer.ListDirectoryEntries(filer2.FullPath(req.Directory), "", false, fs.option.DirListingLimit)
- if err != nil {
- return nil, err
+ println("directory:", req.Directory, "prefix", req.Prefix)
+ limit := int(req.Limit)
+ if limit == 0 {
+ limit = fs.option.DirListingLimit
}
resp := &filer_pb.ListEntriesResponse{}
- for _, entry := range entries {
+ lastFileName := req.StartFromFileName
+ includeLastFile := req.InclusiveStartFrom
+ for limit > 0 {
+ entries, err := fs.filer.ListDirectoryEntries(filer2.FullPath(req.Directory), lastFileName, includeLastFile, limit)
+ if err != nil {
+ return nil, err
+ }
+ if len(entries) == 0 {
+ return resp, nil
+ }
+
+ includeLastFile = false
+
+ for _, entry := range entries {
+
+ lastFileName = entry.Name()
+
+ if req.Prefix != "" {
+ if !strings.HasPrefix(entry.Name(), req.Prefix) {
+ continue
+ }
+ }
+
+ resp.Entries = append(resp.Entries, &filer_pb.Entry{
+ Name: entry.Name(),
+ IsDirectory: entry.IsDirectory(),
+ Chunks: entry.Chunks,
+ Attributes: filer2.EntryAttributeToPb(entry),
+ })
+ limit--
+ }
- resp.Entries = append(resp.Entries, &filer_pb.Entry{
- Name: entry.Name(),
- IsDirectory: entry.IsDirectory(),
- Chunks: entry.Chunks,
- Attributes: filer2.EntryAttributeToPb(entry),
- })
}
return resp, nil