// * <- varies if client is loner vs non-loner.
-inline const char *get_filelock_state_name(int n) {
- switch (n) {
- case LOCK_SYNC: return "sync";
- case LOCK_LONER_SYNC: return "loner->sync";
- case LOCK_MIXED_SYNC: return "mixed->sync";
- case LOCK_MIXED_SYNC2: return "mixed->sync2";
- case LOCK_LOCK_SYNC: return "lock->sync";
- case LOCK_LOCK: return "lock";
- case LOCK_SYNC_LOCK: return "sync->lock";
- case LOCK_LONER_LOCK: return "loner->lock";
- case LOCK_MIXED_LOCK: return "mixed->lock";
- case LOCK_MIXED: return "mixed";
- case LOCK_SYNC_MIXED: return "sync->mixed";
- case LOCK_LONER_MIXED: return "loner->mixed";
- case LOCK_LONER: return "loner";
- case LOCK_SYNC_LONER: return "sync->loner";
- case LOCK_MIXED_LONER: return "mixed->loner";
- case LOCK_LOCK_LONER: return "lock->loner";
- default: assert(0); return 0;
- }
-}
/* no append scenarios:
FileLock(MDSCacheObject *o, int t, int wo) :
ScatterLock(o, t, wo) {}
+ const char *get_state_name(int n) {
+ switch (n) {
+ case LOCK_SYNC: return "sync";
+ case LOCK_LONER_SYNC: return "loner->sync";
+ case LOCK_MIXED_SYNC: return "mixed->sync";
+ case LOCK_MIXED_SYNC2: return "mixed->sync2";
+ case LOCK_LOCK_SYNC: return "lock->sync";
+ case LOCK_LOCK: return "lock";
+ case LOCK_SYNC_LOCK: return "sync->lock";
+ case LOCK_LONER_LOCK: return "loner->lock";
+ case LOCK_MIXED_LOCK: return "mixed->lock";
+ case LOCK_MIXED: return "mixed";
+ case LOCK_SYNC_MIXED: return "sync->mixed";
+ case LOCK_LONER_MIXED: return "loner->mixed";
+ case LOCK_LONER: return "loner";
+ case LOCK_SYNC_LONER: return "sync->loner";
+ case LOCK_MIXED_LONER: return "mixed->loner";
+ case LOCK_LOCK_LONER: return "lock->loner";
+ default: assert(0); return 0;
+ }
+ }
+
+
int get_replica_state() const {
switch (state) {
case LOCK_LOCK:
state == LOCK_LOCK_LONER);
}
-
- void print(ostream& out) {
- out << "(";
- out << get_lock_type_name(get_type()) << " ";
- out << get_filelock_state_name(get_state());
- if (!get_gather_set().empty()) out << " g=" << get_gather_set();
- if (get_num_client_lease())
- out << " c=" << get_num_client_lease();
- if (is_wrlocked())
- out << " w=" << get_num_wrlocks();
- if (is_rdlocked())
- out << " r=" << get_num_rdlocks();
- if (is_xlocked())
- out << " x=" << get_xlocked_by();
- out << ")";
- }
};
}
bool is_wrlocked() { return num_wrlock > 0; }
int get_num_wrlocks() { return num_wrlock; }
-
-
- void print(ostream& out) {
- out << "(";
- out << get_lock_type_name(get_type());
- if (is_xlocked())
- out << " x=" << get_xlocked_by();
- if (is_wrlocked())
- out << " wr=" << get_num_wrlocks();
- out << ")";
- }
-
};
#define LOCK_TEMPSYNC 27 // R . LOCK on replica.
-inline const char *get_scatterlock_state_name(int s) {
- switch(s) {
- case LOCK_SYNC: return "sync";
- case LOCK_SYNC_LOCK: return "sync->lock";
- case LOCK_SYNC_SCATTER: return "sync->scatter";
-
- case LOCK_LOCK_SYNC: return "lock->sync";
- case LOCK_LOCK: return "lock";
- case LOCK_LOCK_TEMPSYNC: return "lock->tempsync";
-
- case LOCK_SCATTER_LOCK: return "scatter->lock";
- case LOCK_SCATTER: return "scatter";
- case LOCK_SCATTER_TEMPSYNC: return "scatter->tempsync";
-
- case LOCK_TEMPSYNC_SCATTER: return "tempsync->scatter";
- case LOCK_TEMPSYNC_LOCK: return "tempsync->lock";
- case LOCK_TEMPSYNC: return "tempsync";
-
- default: assert(0); return 0;
- }
-}
class ScatterLock : public SimpleLock {
bool updated;
xlistitem_updated.remove_myself(); // FIXME this should happen sooner, i think...
}
+ const char *get_scatterlock_state_name(int s) {
+ switch(s) {
+ case LOCK_SYNC: return "sync";
+ case LOCK_SYNC_LOCK: return "sync->lock";
+ case LOCK_SYNC_SCATTER: return "sync->scatter";
+
+ case LOCK_LOCK_SYNC: return "lock->sync";
+ case LOCK_LOCK: return "lock";
+ case LOCK_LOCK_TEMPSYNC: return "lock->tempsync";
+
+ case LOCK_SCATTER_LOCK: return "scatter->lock";
+ case LOCK_SCATTER: return "scatter";
+ case LOCK_SCATTER_TEMPSYNC: return "scatter->tempsync";
+
+ case LOCK_TEMPSYNC_SCATTER: return "tempsync->scatter";
+ case LOCK_TEMPSYNC_LOCK: return "tempsync->lock";
+ case LOCK_TEMPSYNC: return "tempsync";
+
+ default: assert(0); return 0;
+ }
+ }
+
int get_replica_state() const {
switch (state) {
case LOCK_SYNC:
void print(ostream& out) {
out << "(";
- out << get_lock_type_name(get_type()) << " ";
- out << get_scatterlock_state_name(get_state());
- if (!get_gather_set().empty()) out << " g=" << get_gather_set();
- if (get_num_client_lease())
- out << " c=" << get_num_client_lease();
- if (is_rdlocked())
- out << " r=" << get_num_rdlocks();
- if (is_xlocked())
- out << " x=" << get_xlocked_by();
- if (is_wrlocked())
- out << " wr=" << get_num_wrlocks();
+ _print(out);
if (updated)
out << " updated";
out << ")";
#define LOCK_LOCK_SYNC -51 // A R w
#define LOCK_REMOTEXLOCK -50 // on NON-auth
-inline const char *get_simplelock_state_name(int n) {
- switch (n) {
- case LOCK_UNDEF: return "UNDEF";
- case LOCK_SYNC: return "sync";
- case LOCK_LOCK: return "lock";
- case LOCK_SYNC_LOCK: return "sync->lock";
- case LOCK_LOCK_SYNC: return "lock->sync";
- case LOCK_REMOTEXLOCK: return "remote_xlock";
- default: assert(0); return 0;
- }
-}
/*
static const int WAIT_BITS = 4;
static const __u64 WAIT_ALL = ((1<<WAIT_BITS)-1);
+ virtual const char *get_state_name(int n) {
+ switch (n) {
+ case LOCK_UNDEF: return "UNDEF";
+ case LOCK_SYNC: return "sync";
+ case LOCK_LOCK: return "lock";
+ case LOCK_SYNC_LOCK: return "sync->lock";
+ case LOCK_LOCK_SYNC: return "lock->sync";
+ case LOCK_REMOTEXLOCK: return "remote_xlock";
+ default: assert(0); return 0;
+ }
+ }
+
protected:
// parent (what i lock)
MDSCacheObject *parent;
return false;
}
- virtual void print(ostream& out) {
- out << "(";
+ void _print(ostream& out) {
out << get_lock_type_name(get_type()) << " ";
- out << get_simplelock_state_name(get_state());
- if (!get_gather_set().empty()) out << " g=" << get_gather_set();
+ out << get_state_name(get_state());
+ if (!get_gather_set().empty())
+ out << " g=" << get_gather_set();
if (num_client_lease)
- out << " c=" << num_client_lease;
+ out << " l=" << num_client_lease;
if (is_rdlocked())
out << " r=" << get_num_rdlocks();
+ if (is_wrlocked())
+ out << " w=" << get_num_wrlocks();
if (is_xlocked())
out << " x=" << get_xlocked_by();
+ }
+
+ virtual void print(ostream& out) {
+ out << "(";
+ _print(out);
out << ")";
}
};