MDCache::create_subtree_map() use MDCache::my_ambiguous_imports
and Migrator::is_ambiguous_import() to decide if a subtree is
ambiguous import. Submitting log event can start new segment
and submit an extra SubtreeMap. So before submitting EImportFinish
event, we need to cleanup MDCache::my_ambiguous_imports and
Migrator::import_state.
Signed-off-by: Yan, Zheng <zyan@redhat.com>
claimed_by_sender = true;
}
+ my_ambiguous_imports.erase(p); // no longer ambiguous.
if (claimed_by_sender) {
dout(7) << "ambiguous import failed on " << *dir << dendl;
migrator->import_reverse(dir);
dout(7) << "ambiguous import succeeded on " << *dir << dendl;
migrator->import_finish(dir, true);
}
- my_ambiguous_imports.erase(p); // no longer ambiguous.
}
p = next;
}
map<dirfrag_t, vector<dirfrag_t> >::iterator q = my_ambiguous_imports.begin();
CDir *dir = get_dirfrag(q->first);
- if (!dir) continue;
+ assert(dir);
if (dir->authority() != me_ambig) {
dout(10) << "ambiguous import auth known, must not be me " << *dir << dendl;
dout(7) << "import_reverse " << *dir << dendl;
import_state_t& stat = import_state[dir->dirfrag()];
+ stat.state = IMPORT_ABORTING;
set<CDir*> bounds;
cache->get_subtree_bounds(dir, bounds);
cache->trim(-1, num_dentries); // try trimming dentries
// notify bystanders; wait in aborting state
- stat.state = IMPORT_ABORTING;
import_notify_abort(dir, bounds);
}