{
dout(10) << "merge " << subs << dendl;
- set_dir_auth(subs.front()->get_dir_auth());
+ mds_authority_t new_auth = CDIR_AUTH_DEFAULT;
+ for (auto dir : subs) {
+ if (dir->get_dir_auth() != CDIR_AUTH_DEFAULT ||
+ dir->get_dir_auth() != new_auth) {
+ assert(new_auth == CDIR_AUTH_DEFAULT);
+ new_auth = dir->get_dir_auth();
+ }
+ }
+
+ set_dir_auth(new_auth);
prepare_new_fragment(replay);
nest_info_t rstatdiff;
version_t rstat_version = inode->get_projected_inode()->rstat.version;
version_t dirstat_version = inode->get_projected_inode()->dirstat.version;
- for (list<CDir*>::iterator p = subs.begin(); p != subs.end(); ++p) {
- CDir *dir = *p;
+ for (auto dir : subs) {
dout(10) << " subfrag " << dir->get_frag() << " " << *dir << dendl;
assert(!dir->is_auth() || dir->is_complete() || replay);
subtrees[parent_subtree].erase(dir);
for (list<CDir*>::iterator p = resultfrags.begin();
p != resultfrags.end();
- ++p)
+ ++p) {
+ assert((*p)->is_subtree_root());
subtrees[parent_subtree].insert(*p);
+ }
}
// adjust my bounds.
diri->add_dirfrag(f);
if (was_subtree) {
+ assert(f->is_subtree_root());
subtrees[f].swap(new_bounds);
if (parent_subtree)
subtrees[parent_subtree].insert(f);