This issue has one root cause in librgw, namely that the marker
argument to these requests was incorrectly formatted (though the
marker cache was working as intended).
Secondarily, for nfs-ganesha users, there is a compounding issue
that the RGW fsal was required by "temporary" convention to
populate the entire dirent cache for a directory on a single
readdir() invocation--the cache_inode/mdcache implementations
invariantly pass (before future 2.5 changesets, currently in
progress) a null pointer for the start cookie offset, intended
to convey this.
Fixes: http://tracker.ceph.com/issues/18991
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
cb_arg(_cb_arg), rcb(_rcb), ix(0) {
const std::string& sm = rgw_fh->find_marker(*offset);
if (sm.size() > 0) {
- RGWListBuckets::marker =
- rgw_fh->relative_object_name();
- if (marker.back() != '/')
- marker += "/";
- marker += sm;
+ marker = sm;
}
op = this;
}
cb_arg(_cb_arg), rcb(_rcb), ix(0) {
const std::string& sm{rgw_fh->find_marker(*offset)};
if (sm.size() > 0) {
- RGWListBucket::marker = {rgw_fh->relative_object_name(), ""};
- if (marker.name.back() != '/')
- marker.name += "/";
- marker.name += sm;
+ marker = sm;
}
default_max = 1000; // XXX was being omitted
op = this;