mds
- finish multistage rejoin
-- no lock messaging with down|recovering node..
- - SimpleLock
- - replica -> auth :
- - auth -> replica : skip before rejoin, we can lock (or unlock/sync) with impunity
- - ScatterLock
- - replica -> auth :
- - auth -> replica :
- - FileLock
- - replica -> auth :
- - auth -> replica :
-???
-
- - failure safe (above)
- - export safe (ambiguous auth...)
-
-
- trim_on_rejoin
- more testing of failures + thrashing.
}
lock->set_state(LOCK_LOCK);
- lock->finish_waiters(SimpleLock::WAIT_STABLE);
+ lock->finish_waiters(SimpleLock::WAIT_STABLE|SimpleLock::WAIT_WR);
}
// stable -> sync?
#include "events/ESlaveUpdate.h"
#include "events/EString.h"
#include "events/EPurgeFinish.h"
+#include "events/EImportFinish.h"
#include "messages/MGenericMessage.h"
if (dir->authority().first != CDIR_AUTH_UNKNOWN) {
dout(10) << "ambiguous import auth known, must not be me " << *dir << endl;
cancel_ambiguous_import(q->first);
+ mds->mdlog->submit_entry(new EImportFinish(dir, false));
} else {
dout(10) << "ambiguous import auth unknown, must be me " << *dir << endl;
finish_ambiguous_import(q->first);
+ mds->mdlog->submit_entry(new EImportFinish(dir, true));
}
}
assert(my_ambiguous_imports.empty());
inline const char *get_lock_type_name(int t) {
switch (t) {
- case LOCK_OTYPE_DN: return "dentry";
- case LOCK_OTYPE_IFILE: return "inode_file";
- case LOCK_OTYPE_IAUTH: return "inode_auth";
- case LOCK_OTYPE_ILINK: return "inode_link";
- case LOCK_OTYPE_IDIRFRAGTREE: return "inode_dirfragtree";
- case LOCK_OTYPE_IDIR: return "inode_dir";
+ case LOCK_OTYPE_DN: return "dn";
+ case LOCK_OTYPE_IFILE: return "ifile";
+ case LOCK_OTYPE_IAUTH: return "iauth";
+ case LOCK_OTYPE_ILINK: return "ilink";
+ case LOCK_OTYPE_IDIRFRAGTREE: return "idft";
+ case LOCK_OTYPE_IDIR: return "idir";
default: assert(0);
}
}
set<dirfrag_t> &get_bounds() { return bounds; }
void print(ostream& out) {
- out << "export " << base << " " << metablob;
+ out << "EExport " << base << " " << metablob;
}
virtual void encode_payload(bufferlist& bl) {
EImportFinish() : LogEvent(EVENT_IMPORTFINISH) { }
void print(ostream& out) {
- out << "import_finish " << base;
+ out << "EImportFinish " << base;
if (success)
out << " success";
else