if (dir->authority() != me_ambig) {
dout(10) << "ambiguous import auth known, must not be me " << *dir << dendl;
- cancel_ambiguous_import(q->first);
+ cancel_ambiguous_import(dir);
mds->mdlog->start_submit_entry(new EImportFinish(dir, false));
} else {
dout(10) << "ambiguous import auth unclaimed, must be me " << *dir << dendl;
add_ambiguous_import(base->dirfrag(), binos);
}
-void MDCache::cancel_ambiguous_import(dirfrag_t df)
+void MDCache::cancel_ambiguous_import(CDir *dir)
{
+ dirfrag_t df = dir->dirfrag();
assert(my_ambiguous_imports.count(df));
dout(10) << "cancel_ambiguous_import " << df
<< " bounds " << my_ambiguous_imports[df]
+ << " " << *dir
<< dendl;
my_ambiguous_imports.erase(df);
+
+ try_trim_non_auth_subtree(dir);
}
void MDCache::finish_ambiguous_import(dirfrag_t df)
assert(my_ambiguous_imports.count(base));
bounds = my_ambiguous_imports[base];
}
- void cancel_ambiguous_import(dirfrag_t dirino);
+ void cancel_ambiguous_import(CDir *);
void finish_ambiguous_import(dirfrag_t dirino);
void resolve_start();
void send_resolves();
vector<dirfrag_t> bounds;
mds->mdcache->get_ambiguous_import_bounds(base, bounds);
mds->mdcache->adjust_bounded_subtree_auth(dir, bounds, pair<int,int>(CDIR_AUTH_UNKNOWN, CDIR_AUTH_UNKNOWN));
- mds->mdcache->cancel_ambiguous_import(base);
- mds->mdcache->try_trim_non_auth_subtree(dir);
+ mds->mdcache->cancel_ambiguous_import(dir);
}
} else {
dout(10) << "EImportFinish.replay " << base << " success=" << success