11: After sending out MExportDirNotify (new state: EXPORT_NOTIFYING)
12: After receiving MExportDirNotifyAck from all bystanders
13: After sending MExportDirFinish to importer
+
+mds_kill_import_at:
+1: After moving to IMPORT_DISCOVERING
+2: After moving to IMPORT_DISCOVERED and sending MExportDirDiscoverAck
+3: After moving to IMPORT_PREPPING.
+4: After moving to IMPORT_PREPPED and sending MExportDirPrepAck
+5: After receiving MExportDir message
+6: After moving to IMPORT_LOGGINGSTART and writing EImportStart
+7: After moving to IMPORT_ACKING.
+8: After sending out MExportDirAck
+9: After logging EImportFinish
+10: After entering IMPORT_ABORTING.
\ No newline at end of file
// notify them; wait in aborting state
import_notify_abort(dir, bounds);
import_state[df] = IMPORT_ABORTING;
+ assert(mds_kill_import_at != 10);
}
}
break;
return;
}
+ assert (mds_kill_import_at != 1);
+
// do we have it?
CInode *in = cache->get_inode(m->get_dirfrag().ino);
if (!in) {
dout(7) << "handle_export_discover have " << df << " inode " << *in << dendl;
import_state[m->get_dirfrag()] = IMPORT_DISCOVERED;
-
+
// pin inode in the cache (for now)
assert(in->is_dir());
in->get(CInode::PIN_IMPORTING);
// reply
dout(7) << " sending export_discover_ack on " << *in << dendl;
mds->send_message_mds(new MExportDirDiscoverAck(df), import_peer[df]);
+ assert (md_kill_import_at != 2);
}
void Migrator::handle_export_cancel(MExportDirCancel *m)
// change import state
import_state[dir->dirfrag()] = IMPORT_PREPPING;
+ assert(mds_kill_import_at != 3);
import_bound_ls[dir] = m->get_bounds();
// bystander list
// note new state
import_state[dir->dirfrag()] = IMPORT_PREPPED;
-
+ assert(mds_kill_import_at != 4);
// done
delete m;
void Migrator::handle_export_dir(MExportDir *m)
{
+ assert (mds_kill_import_at != 5);
CDir *dir = cache->get_dirfrag(m->dirfrag);
assert(dir);
// note state
import_state[dir->dirfrag()] = IMPORT_LOGGINGSTART;
+ assert (mds_kill_import_at != 6);
// some stats
if (mds->logger) {
dout(7) << "notifying bystanders of abort" << dendl;
import_notify_abort(dir, bounds);
import_state[dir->dirfrag()] = IMPORT_ABORTING;
+ assert (mds_kill_import_at != 10);
}
}
// note state
import_state[dir->dirfrag()] = IMPORT_ACKING;
+ assert (mds_kill_import_at != 7);
+
// force open client sessions and finish cap import
mds->server->finish_force_open_sessions(imported_client_map);
// send notify's etc.
dout(7) << "sending ack for " << *dir << " to old auth mds" << from << dendl;
mds->send_message_mds(new MExportDirAck(dir->dirfrag()), from);
+ assert (mds_kill_import_at != 8);
cache->show_subtrees();
}
// log finish
mds->mdlog->start_submit_entry(new EImportFinish(dir, true));
+ assert(mds_kill_import_at != 9);
// clear updated scatterlocks
/*