}
// add dir
- if (reply->is_empty() && !dis->wants_base_dir()) {
+ if (curdir->get_version() == 0) {
+ // fetch newly opened dir
+ } else if (reply->is_empty() && !dis->wants_base_dir()) {
dout(7) << "handle_discover not adding unwanted base dir " << *curdir << dendl;
// make sure the base frag is correct, though, in there was a refragment since the
// original request was sent.
// lookup
CDentry *dn = 0;
- if (dis->get_want_ino()) {
+ if (curdir->get_version() == 0) {
+ // fetch newly opened dir
+ } else if (dis->get_want_ino()) {
// lookup by ino
CInode *in = get_inode(dis->get_want_ino(), snapid);
if (in && in->is_auth() && in->get_parent_dn()->get_dir() == curdir) {
if (in->snaprealm && in->snaprealm->srnode.snaps.size())
return true; // in a snapshot!
- list<frag_t> frags;
- in->dirfragtree.get_leaves(frags);
-
- for (list<frag_t>::iterator p = frags.begin();
- p != frags.end();
- ++p) {
- CDir *dir = in->get_or_open_dirfrag(mdcache, *p);
- assert(dir);
-
+ list<CDir*> ls;
+ in->get_dirfrags(ls);
+ for (list<CDir*>::iterator p = ls.begin(); p != ls.end(); ++p) {
+ CDir *dir = *p;
// is the frag obviously non-empty?
if (dir->is_auth()) {
if (dir->get_projected_fnode()->fragstat.size()) {