mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
parent
8b39bbbe2f
commit
bf839651ec
|
@ -228,65 +228,32 @@ func (store *TikvStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPat
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer iter.Close()
|
defer iter.Close()
|
||||||
i := int64(0)
|
for i := int64(0); i < limit && iter.Valid(); i++ {
|
||||||
first := true
|
|
||||||
for iter.Valid() {
|
|
||||||
if first {
|
|
||||||
first = false
|
|
||||||
if !includeStartFile {
|
|
||||||
if iter.Valid() {
|
|
||||||
// Check first item is lastFileStart
|
|
||||||
if bytes.Equal(iter.Key(), lastFileStart) {
|
|
||||||
// Is lastFileStart and not include start file, just
|
|
||||||
// ignore it.
|
|
||||||
err = iter.Next()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Check for limitation
|
|
||||||
if limit > 0 {
|
|
||||||
i++
|
|
||||||
if i > limit {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Validate key prefix
|
|
||||||
key := iter.Key()
|
key := iter.Key()
|
||||||
if !bytes.HasPrefix(key, directoryPrefix) {
|
if !bytes.HasPrefix(key, directoryPrefix) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
value := iter.Value()
|
|
||||||
|
|
||||||
// Start process
|
|
||||||
fileName := getNameFromKey(key)
|
fileName := getNameFromKey(key)
|
||||||
if fileName != "" {
|
if fileName == "" || fileName == startFileName && !includeStartFile {
|
||||||
// Got file name, then generate the Entry
|
if err := iter.Next(); err != nil {
|
||||||
entry := &filer.Entry{
|
|
||||||
FullPath: util.NewFullPath(string(dirPath), fileName),
|
|
||||||
}
|
|
||||||
// Update lastFileName
|
|
||||||
lastFileName = fileName
|
|
||||||
// Check for decode value.
|
|
||||||
if decodeErr := entry.DecodeAttributesAndChunks(value); decodeErr != nil {
|
|
||||||
// Got error just return the error
|
|
||||||
glog.V(0).Infof("list %s : %v", entry.FullPath, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Run for each callback if return false just break the iteration
|
|
||||||
if !eachEntryFunc(entry) {
|
|
||||||
break
|
break
|
||||||
|
} else {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// End process
|
lastFileName = fileName
|
||||||
|
entry := &filer.Entry{
|
||||||
|
FullPath: util.NewFullPath(string(dirPath), fileName),
|
||||||
|
}
|
||||||
|
|
||||||
err = iter.Next()
|
// println("list", entry.FullPath, "chunks", len(entry.GetChunks()))
|
||||||
if err != nil {
|
if decodeErr := entry.DecodeAttributesAndChunks(util.MaybeDecompressData(iter.Value())); decodeErr != nil {
|
||||||
return err
|
err = decodeErr
|
||||||
|
glog.V(0).Infof("list %s : %v", entry.FullPath, err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err := iter.Next(); !eachEntryFunc(entry) || err != nil {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue