return false;
}
-void MDCache::check_realm_past_parents(SnapRealm *realm)
+void MDCache::check_realm_past_parents(SnapRealm *realm, bool reconnect)
{
// are this realm's parents fully open?
if (realm->have_past_parents_open()) {
dout(10) << " have past snap parents for realm " << *realm
<< " on " << *realm->inode << dendl;
+ if (reconnect) {
+ // finish off client snaprealm reconnects?
+ auto p = reconnected_snaprealms.find(realm->inode->ino());
+ if (p != reconnected_snaprealms.end()) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q)
+ finish_snaprealm_reconnect(q->first, realm, q->second);
+ reconnected_snaprealms.erase(p);
+ }
+ }
} else {
if (!missing_snap_parents.count(realm->inode)) {
dout(10) << " MISSING past snap parents for realm " << *realm
SnapRealm *realm = in->find_snaprealm();
- check_realm_past_parents(realm);
+ check_realm_past_parents(realm, realm == in->snaprealm);
if (p != reconnected_caps.end()) {
bool missing_snap_parent = false;
in->auth_pin(&in->filelock);
in->filelock.set_state(LOCK_PRE_SCAN);
rejoin_recover_q.push_back(in);
-
- // make sure past parents are open/get opened
- SnapRealm *realm = in->find_snaprealm();
- check_realm_past_parents(realm);
} else {
rejoin_check_q.push_back(in);
}
void do_delayed_cap_imports();
void rebuild_need_snapflush(CInode *head_in, SnapRealm *realm, client_t client,
snapid_t snap_follows);
- void check_realm_past_parents(SnapRealm *realm);
+ void check_realm_past_parents(SnapRealm *realm, bool reconnect);
void open_snap_parents();
bool open_undef_inodes_dirfrags();