// C = cache reads, R = read, W = write, A = append, B = buffer writes, L = lazyio
// -----auth-------- ---replica-------
-#define LOCK_SYNC_ 1 // AR R . / C R . . . L R . / C R . . . L stat()
-#define LOCK_GSYNCL -12 // A . . / C r . . . L * loner -> sync
-#define LOCK_GSYNCM -13 // A . . / . R . . . L
+#define LOCK_SYNC_ 1 // AR R . / C R . . . L R . / C R . . . L stat()
+#define LOCK_LONER_SYNC -12 // A . . / C r . . . L * loner -> sync
+#define LOCK_MIXED_SYNC -13 // A . . / . R . . . L
-#define LOCK_LOCK_ 2 // AR R W / C . . . B . . . / C . . . . . truncate()
-#define LOCK_GLOCKR_ -3 // AR R . / C . . . . . . . / C . . . . .
-#define LOCK_GLOCKL -4 // A . . / C . . . B . loner -> lock
-#define LOCK_GLOCKM -5 // A . . / . . . . . .
+#define LOCK_LOCK_ 2 // AR R W / C . . . B . . . / C . . . . . truncate()
+#define LOCK_SYNC_LOCK_ -3 // AR R . / C . . . . . . . / C . . . . .
+#define LOCK_LONER_LOCK -4 // A . . / C . . . B . loner -> lock
+#define LOCK_MIXED_LOCK -5 // A . . / . . . . . .
-#define LOCK_MIXED 6 // AR . . / . R W A . L . . / . R . . . L
-#define LOCK_GMIXEDR -7 // AR R . / . R . . . L . . / . R . . . L
-#define LOCK_GMIXEDL -8 // A . . / . r w a . L * loner -> mixed
+#define LOCK_MIXED 6 // AR . . / . R W A . L . . / . R . . . L
+#define LOCK_SYNC_MIXED -7 // AR R . / . R . . . L . . / . R . . . L
+#define LOCK_LONER_MIXED -8 // A . . / . r w a . L * loner -> mixed
-#define LOCK_LONER 9 // A . . / c r w a b L * (lock)
-#define LOCK_GLONERR -10 // A . . / . R . . . L
-#define LOCK_GLONERM -11 // A . . / . R W A . L
-#define LOCK_GLONERL -15 // A . . / c . . . b . *
+#define LOCK_LONER 9 // A . . / c r w a b L * (lock)
+#define LOCK_SYNC_LONER -10 // A . . / . R . . . L
+#define LOCK_MIXED_LONER -11 // A . . / . R W A . L
+#define LOCK_LOCK_LONER -15 // A . . / c . . . b . *
// * <- 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_GSYNCL: return "gsyncl";
- case LOCK_GSYNCM: return "gsyncm";
+ case LOCK_LONER_SYNC: return "loner->sync";
+ case LOCK_MIXED_SYNC: return "mixed->sync";
case LOCK_LOCK: return "lock";
- case LOCK_GLOCKR: return "glockr";
- case LOCK_GLOCKL: return "glockl";
- case LOCK_GLOCKM: return "glockm";
+ 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_GMIXEDR: return "gmixedr";
- case LOCK_GMIXEDL: return "gmixedl";
+ case LOCK_SYNC_MIXED: return "sync->mixed";
+ case LOCK_LONER_MIXED: return "loner->mixed";
case LOCK_LONER: return "loner";
- case LOCK_GLONERR: return "glonerr";
- case LOCK_GLONERM: return "glonerm";
- case LOCK_GLONERL: return "glonerl";
+ 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:
- case LOCK_GLOCKM:
- case LOCK_GLOCKL:
- case LOCK_GLOCKR:
+ case LOCK_MIXED_LOCK:
+ case LOCK_LONER_LOCK:
+ case LOCK_SYNC_LOCK:
case LOCK_LONER:
- case LOCK_GLONERR:
- case LOCK_GLONERM:
- case LOCK_GLONERL:
+ case LOCK_SYNC_LONER:
+ case LOCK_MIXED_LONER:
+ case LOCK_LOCK_LONER:
return LOCK_LOCK;
case LOCK_MIXED:
- case LOCK_GMIXEDR:
+ case LOCK_SYNC_MIXED:
return LOCK_MIXED;
case LOCK_SYNC:
return LOCK_SYNC;
// after gather auth will bc LOCK_AC_MIXED or whatever
- case LOCK_GSYNCM:
+ case LOCK_MIXED_SYNC:
return LOCK_MIXED;
- case LOCK_GSYNCL:
- case LOCK_GMIXEDL: // ** LOCK isn't exact right state, but works.
+ case LOCK_LONER_SYNC:
+ case LOCK_LONER_MIXED: // ** LOCK isn't exact right state, but works.
return LOCK_LOCK;
default:
if (state == LOCK_LOCK && !xlock_by) return true;
return
(state == LOCK_SYNC) ||
- (state == LOCK_GMIXEDR) ||
- (state == LOCK_GLOCKR);
+ (state == LOCK_SYNC_MIXED) ||
+ (state == LOCK_SYNC_LOCK);
}
bool can_rdlock_soon() {
if (parent->is_auth())
return
- (state == LOCK_GLOCKL) ||
+ (state == LOCK_LONER_LOCK) ||
(state == LOCK_LOCK && xlock_by);
else
return false;
}
bool can_xlock_soon() {
if (parent->is_auth())
- return (state == LOCK_GLOCKR) || (state == LOCK_GLOCKL)
- || (state == LOCK_GLOCKM);
+ return (state == LOCK_SYNC_LOCK) || (state == LOCK_LONER_LOCK)
+ || (state == LOCK_MIXED_LOCK);
else
return false;
}
bool can_wrlock() {
return
parent->is_auth() &&
- (state == LOCK_LOCK || state == LOCK_GLOCKM || state == LOCK_GLOCKL ||
- state == LOCK_MIXED || state == LOCK_GMIXEDL ||
- state == LOCK_LONER || state == LOCK_GLONERM || state == LOCK_GLONERL ||
- state == LOCK_GSYNCM || state == LOCK_GSYNCL);
+ (state == LOCK_LOCK || state == LOCK_MIXED_LOCK || state == LOCK_LONER_LOCK ||
+ state == LOCK_MIXED || state == LOCK_LONER_MIXED ||
+ state == LOCK_LONER || state == LOCK_MIXED_LONER || state == LOCK_LOCK_LONER ||
+ state == LOCK_MIXED_SYNC || state == LOCK_LONER_SYNC);
}
void get_wrlock(bool force) {
assert(force || can_wrlock());
switch (state) {
case LOCK_SYNC:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
- case LOCK_GLOCKR:
+ case LOCK_SYNC_LOCK:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE;
case LOCK_LOCK:
- case LOCK_GLOCKL:
+ case LOCK_LONER_LOCK:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE | CEPH_CAP_WRBUFFER;
- case LOCK_GLOCKM:
+ case LOCK_MIXED_LOCK:
return CEPH_CAP_PIN;
case LOCK_MIXED:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_WR | CEPH_CAP_WREXTEND | CEPH_CAP_LAZYIO;
- case LOCK_GMIXEDR:
+ case LOCK_SYNC_MIXED:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
- case LOCK_GMIXEDL:
+ case LOCK_LONER_MIXED:
return CEPH_CAP_PIN | (loner ? (CEPH_CAP_RD | CEPH_CAP_WR | CEPH_CAP_WREXTEND) : 0);
case LOCK_LONER: // single client writer, of course.
return CEPH_CAP_PIN | CEPH_CAP_LAZYIO |
( loner ? (CEPH_CAP_RDCACHE | CEPH_CAP_RD | CEPH_CAP_WR | CEPH_CAP_WREXTEND | CEPH_CAP_WRBUFFER | CEPH_CAP_EXCL) : 0 );
- case LOCK_GLONERR:
+ case LOCK_SYNC_LONER:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
- case LOCK_GLONERM:
+ case LOCK_MIXED_LONER:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_WR | CEPH_CAP_WREXTEND | CEPH_CAP_LAZYIO;
- case LOCK_GLONERL:
+ case LOCK_LOCK_LONER:
return CEPH_CAP_PIN | (loner ? (CEPH_CAP_RDCACHE | CEPH_CAP_WRBUFFER) : 0);
- case LOCK_GSYNCL:
+ case LOCK_LONER_SYNC:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE | (loner ? CEPH_CAP_RD:0) | CEPH_CAP_LAZYIO;
- case LOCK_GSYNCM:
+ case LOCK_MIXED_SYNC:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
}
else
case LOCK_SYNC:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
case LOCK_LOCK:
- case LOCK_GLOCKR:
+ case LOCK_SYNC_LOCK:
return CEPH_CAP_PIN | CEPH_CAP_RDCACHE;
- case LOCK_GMIXEDR:
+ case LOCK_SYNC_MIXED:
case LOCK_MIXED:
return CEPH_CAP_PIN | CEPH_CAP_RD | CEPH_CAP_LAZYIO;
}
// true if we are in a "loner" mode that distinguishes between a loner and everyone else
bool is_loner_mode() {
- return state == LOCK_GSYNCL ||
- state == LOCK_GLOCKL ||
- state == LOCK_GMIXEDL ||
+ return state == LOCK_LONER_SYNC ||
+ state == LOCK_LONER_LOCK ||
+ state == LOCK_LONER_MIXED ||
state == LOCK_LONER ||
- state == LOCK_GLONERL;
+ state == LOCK_LOCK_LONER;
}
case LOCK_AC_LOCK:
assert(lock->get_state() == LOCK_SYNC);
- //|| lock->get_state() == LOCK_GLOCKR);
+ //|| lock->get_state() == LOCK_SYNC_LOCK);
// wait for readers to finish?
if (lock->is_rdlocked() ||
dout(7) << "handle_simple_lock has reader|leases, waiting before ack on " << *lock
<< " on " << *lock->get_parent() << dendl;
revoke_client_leases(lock);
- lock->set_state(LOCK_GLOCKR);
+ lock->set_state(LOCK_SYNC_LOCK);
} else {
// update lock and reply
lock->set_state(LOCK_LOCK);
// -- auth --
case LOCK_AC_LOCKACK:
- assert(lock->get_state() == LOCK_GLOCKR);
+ assert(lock->get_state() == LOCK_SYNC_LOCK);
assert(lock->is_gathering(from));
lock->remove_gather(from);
dout(10) << "simple_eval_gather " << *lock << " on " << *lock->get_parent() << dendl;
// finished gathering?
- if (lock->get_state() == LOCK_GLOCKR &&
+ if (lock->get_state() == LOCK_SYNC_LOCK &&
!lock->is_gathering() &&
lock->get_num_client_lease() == 0 &&
!lock->is_rdlocked()) {
revoke_client_leases(lock);
// change lock
- lock->set_state(LOCK_GLOCKR);
+ lock->set_state(LOCK_SYNC_LOCK);
lock->init_gather();
lock->get_parent()->auth_pin(lock);
} else {
if (!lock->get_parent()->is_auth()) {
// REPLICA
- if (lock->get_state() == LOCK_GLOCKC &&
+ if (lock->get_state() == LOCK_SCATTER_LOCK &&
!lock->is_wrlocked()) {
dout(10) << "scatter_eval no wrlocks, acking lock" << dendl;
int auth = lock->get_parent()->authority().first;
lock->set_state(LOCK_LOCK);
}
- if (lock->get_state() == LOCK_GLOCKS &&
+ if (lock->get_state() == LOCK_SYNC_LOCK &&
!lock->is_rdlocked() &&
lock->get_num_client_lease() == 0) {
dout(10) << "scatter_eval no rdlocks|leases, acking lock" << dendl;
// AUTH
// glocks|glockt -> lock?
- if ((lock->get_state() == LOCK_GLOCKS ||
- lock->get_state() == LOCK_GLOCKT) &&
+ if ((lock->get_state() == LOCK_SYNC_LOCK ||
+ lock->get_state() == LOCK_TEMPSYNC_LOCK) &&
!lock->is_gathering() &&
lock->get_num_client_lease() == 0 &&
!lock->is_rdlocked()) {
}
// glockc -> lock?
- else if (lock->get_state() == LOCK_GLOCKC &&
+ else if (lock->get_state() == LOCK_SCATTER_LOCK &&
!lock->is_gathering() &&
!lock->is_wrlocked()) {
if (lock->is_updated()) {
}
// gSyncL -> sync?
- else if (lock->get_state() == LOCK_GSYNCL &&
+ else if (lock->get_state() == LOCK_LONER_SYNC &&
!lock->is_wrlocked()) {
dout(7) << "scatter_eval finished sync un-wrlock on " << *lock
<< " on " << *lock->get_parent() << dendl;
}
// gscattert|gscatters -> scatter?
- else if ((lock->get_state() == LOCK_GSCATTERT ||
- lock->get_state() == LOCK_GSCATTERS) &&
+ else if ((lock->get_state() == LOCK_TEMPSYNC_SCATTER ||
+ lock->get_state() == LOCK_SYNC_SCATTER) &&
!lock->is_gathering() &&
lock->get_num_client_lease() == 0 &&
!lock->is_rdlocked()) {
}
// gTempsyncC|gTempsyncL -> tempsync
- else if ((lock->get_state() == LOCK_GTEMPSYNCC ||
- lock->get_state() == LOCK_GTEMPSYNCL) &&
+ else if ((lock->get_state() == LOCK_SCATTER_TEMPSYNC ||
+ lock->get_state() == LOCK_LOCK_TEMPSYNC) &&
!lock->is_gathering() &&
!lock->is_wrlocked()) {
if (lock->is_updated()) {
case LOCK_LOCK:
if (lock->is_wrlocked() || lock->is_xlocked()) {
- lock->set_state(LOCK_GSYNCL);
+ lock->set_state(LOCK_LONER_SYNC);
lock->get_parent()->auth_pin(lock);
return;
}
!lock->is_wrlocked())
break; // do it now
- lock->set_state(LOCK_GLOCKC);
+ lock->set_state(LOCK_SCATTER_LOCK);
lock->get_parent()->auth_pin(lock);
if (lock->get_parent()->is_replicated()) {
return; // do nothing.
switch (lock->get_state()) {
- case LOCK_SYNC: lock->set_state(LOCK_GSCATTERS); break;
- case LOCK_TEMPSYNC: lock->set_state(LOCK_GSCATTERT); break;
+ case LOCK_SYNC: lock->set_state(LOCK_SYNC_SCATTER); break;
+ case LOCK_TEMPSYNC: lock->set_state(LOCK_TEMPSYNC_SCATTER); break;
default: assert(0);
}
return;
switch (lock->get_state()) {
- case LOCK_SYNC: lock->set_state(LOCK_GLOCKS); break;
- case LOCK_SCATTER: lock->set_state(LOCK_GLOCKC); break;
- case LOCK_TEMPSYNC: lock->set_state(LOCK_GLOCKT); break;
+ case LOCK_SYNC: lock->set_state(LOCK_SYNC_LOCK); break;
+ case LOCK_SCATTER: lock->set_state(LOCK_SCATTER_LOCK); break;
+ case LOCK_TEMPSYNC: lock->set_state(LOCK_TEMPSYNC_LOCK); break;
default: assert(0);
}
case LOCK_LOCK:
if (lock->is_wrlocked() ||
lock->is_xlocked()) {
- lock->set_state(LOCK_GTEMPSYNCL);
+ lock->set_state(LOCK_LOCK_TEMPSYNC);
lock->get_parent()->auth_pin(lock);
return;
}
break; // do it.
}
- lock->set_state(LOCK_GTEMPSYNCC);
+ lock->set_state(LOCK_SCATTER_TEMPSYNC);
lock->get_parent()->auth_pin(lock);
if (lock->get_parent()->is_replicated()) {
assert(lock->get_state() == LOCK_SCATTER);
dout(7) << "handle_scatter_lock has wrlocks, waiting on " << *lock
<< " on " << *lock->get_parent() << dendl;
- lock->set_state(LOCK_GLOCKC);
+ lock->set_state(LOCK_SCATTER_LOCK);
} else if (lock->is_rdlocked() ||
lock->get_num_client_lease()) {
assert(lock->get_state() == LOCK_SYNC);
dout(7) << "handle_scatter_lock has rdlocks|leases, waiting on " << *lock
<< " on " << *lock->get_parent() << dendl;
revoke_client_leases(lock);
- lock->set_state(LOCK_GLOCKS);
+ lock->set_state(LOCK_SYNC_LOCK);
} else {
dout(7) << "handle_scatter_lock has no rd|wrlocks|leases, sending lockack for " << *lock
<< " on " << *lock->get_parent() << dendl;
// -- for auth --
case LOCK_AC_LOCKACK:
- assert(lock->get_state() == LOCK_GLOCKS ||
- lock->get_state() == LOCK_GLOCKC ||
- lock->get_state() == LOCK_GSCATTERS ||
- lock->get_state() == LOCK_GTEMPSYNCC);
+ assert(lock->get_state() == LOCK_SYNC_LOCK ||
+ lock->get_state() == LOCK_SCATTER_LOCK ||
+ lock->get_state() == LOCK_SYNC_SCATTER ||
+ lock->get_state() == LOCK_SCATTER_TEMPSYNC);
assert(lock->is_gathering(from));
lock->remove_gather(from);
lock->decode_locked_state(m->get_data());
switch (lock->get_state()) {
// to lock
- case LOCK_GLOCKR:
- case LOCK_GLOCKM:
- case LOCK_GLOCKL:
+ case LOCK_SYNC_LOCK:
+ case LOCK_MIXED_LOCK:
+ case LOCK_LONER_LOCK:
lock->set_state(LOCK_LOCK);
in->loner_cap = -1;
break;
// to mixed
- case LOCK_GMIXEDR:
+ case LOCK_SYNC_MIXED:
lock->set_state(LOCK_MIXED);
lock->finish_waiters(SimpleLock::WAIT_STABLE);
lock->get_parent()->auth_unpin(lock);
break;
- case LOCK_GMIXEDL:
+ case LOCK_LONER_MIXED:
lock->set_state(LOCK_MIXED);
in->loner_cap = -1;
break;
// to loner
- case LOCK_GLONERR:
- case LOCK_GLONERM:
- case LOCK_GLONERL:
+ case LOCK_SYNC_LONER:
+ case LOCK_MIXED_LONER:
+ case LOCK_LOCK_LONER:
lock->set_state(LOCK_LONER);
lock->finish_waiters(SimpleLock::WAIT_STABLE);
lock->get_parent()->auth_unpin(lock);
break;
// to sync
- case LOCK_GSYNCL:
- case LOCK_GSYNCM:
+ case LOCK_LONER_SYNC:
+ case LOCK_MIXED_SYNC:
lock->set_state(LOCK_SYNC);
in->loner_cap = -1;
lock->get_num_client_lease() == 0 &&
((other_issued & ~other_allowed)) == 0) {
switch (lock->get_state()) {
- case LOCK_GMIXEDR:
+ case LOCK_SYNC_MIXED:
{
lock->set_state(LOCK_MIXED);
}
break;
- case LOCK_GLOCKR:
+ case LOCK_SYNC_LOCK:
{
lock->set_state(LOCK_LOCK);
if (lock->get_state() != LOCK_LOCK) {
// gather?
switch (lock->get_state()) {
- case LOCK_MIXED: lock->set_state(LOCK_GSYNCM); break;
- case LOCK_LONER: lock->set_state(LOCK_GSYNCL); break;
+ case LOCK_MIXED: lock->set_state(LOCK_MIXED_SYNC); break;
+ case LOCK_LONER: lock->set_state(LOCK_LONER_SYNC); break;
default: assert(0);
}
// gather?
switch (lock->get_state()) {
- case LOCK_SYNC: lock->set_state(LOCK_GLOCKR); break;
- case LOCK_MIXED: lock->set_state(LOCK_GLOCKM); break;
- case LOCK_LONER: lock->set_state(LOCK_GLOCKL); break;
+ case LOCK_SYNC: lock->set_state(LOCK_SYNC_LOCK); break;
+ case LOCK_MIXED: lock->set_state(LOCK_MIXED_LOCK); break;
+ case LOCK_LONER: lock->set_state(LOCK_LONER_LOCK); break;
default: assert(0);
}
int gather = 0;
if (in->is_replicated() &&
- lock->get_state() != LOCK_GLOCKL) { // (replicas are LOCK when auth is LONER)
+ lock->get_state() != LOCK_LONER_LOCK) { // (replicas are LOCK when auth is LONER)
send_lock_message(lock, LOCK_AC_LOCK);
lock->init_gather();
gather++;
} else {
// gather?
switch (lock->get_state()) {
- case LOCK_SYNC: lock->set_state(LOCK_GMIXEDR); break;
- case LOCK_LONER: lock->set_state(LOCK_GMIXEDL); break;
+ case LOCK_SYNC: lock->set_state(LOCK_SYNC_MIXED); break;
+ case LOCK_LONER: lock->set_state(LOCK_LONER_MIXED); break;
default: assert(0);
}
int gather = 0;
if (in->is_replicated()) {
send_lock_message(lock, LOCK_AC_MIXED);
- if (lock->get_state() != LOCK_GMIXEDL) { // LONER replica is LOCK
+ if (lock->get_state() != LOCK_LONER_MIXED) { // LONER replica is LOCK
lock->init_gather();
gather++;
}
assert(in->get_loner() >= 0 && in->mds_caps_wanted.empty());
switch (lock->get_state()) {
- case LOCK_SYNC: lock->set_state(LOCK_GLONERR); break;
- case LOCK_MIXED: lock->set_state(LOCK_GLONERM); break;
- case LOCK_LOCK: lock->set_state(LOCK_GLONERL); break;
+ case LOCK_SYNC: lock->set_state(LOCK_SYNC_LONER); break;
+ case LOCK_MIXED: lock->set_state(LOCK_MIXED_LONER); break;
+ case LOCK_LOCK: lock->set_state(LOCK_LOCK_LONER); break;
default: assert(0);
}
int gather = 0;
assert(lock->get_state() == LOCK_SYNC ||
lock->get_state() == LOCK_MIXED);
- lock->set_state(LOCK_GLOCKR);
+ lock->set_state(LOCK_SYNC_LOCK);
// call back caps?
int loner_issued, other_issued;
if (lock->get_state() == LOCK_SYNC) {
// MIXED
- lock->set_state(LOCK_GMIXEDR);
+ lock->set_state(LOCK_SYNC_MIXED);
int loner_issued, other_issued;
in->get_caps_issued(&loner_issued, &other_issued);
if ((loner_issued & ~lock->caps_allowed(true)) ||
// -- auth --
case LOCK_AC_LOCKACK:
- assert(lock->get_state() == LOCK_GLOCKR ||
- lock->get_state() == LOCK_GLOCKM ||
- lock->get_state() == LOCK_GLONERM ||
- lock->get_state() == LOCK_GLONERR);
+ assert(lock->get_state() == LOCK_SYNC_LOCK ||
+ lock->get_state() == LOCK_MIXED_LOCK ||
+ lock->get_state() == LOCK_MIXED_LONER ||
+ lock->get_state() == LOCK_SYNC_LONER);
assert(lock->is_gathering(from));
lock->remove_gather(from);
break;
case LOCK_AC_SYNCACK:
- assert(lock->get_state() == LOCK_GSYNCM);
+ assert(lock->get_state() == LOCK_MIXED_SYNC);
assert(lock->is_gathering(from));
lock->remove_gather(from);
break;
case LOCK_AC_MIXEDACK:
- assert(lock->get_state() == LOCK_GMIXEDR);
+ assert(lock->get_state() == LOCK_SYNC_MIXED);
assert(lock->is_gathering(from));
lock->remove_gather(from);
// scatterlock?
if (is.dirlock == LOCK_SCATTER ||
- is.dirlock == LOCK_GLOCKC) // replica still has wrlocks
+ is.dirlock == LOCK_SCATTER_LOCK) // replica still has wrlocks
in->dirlock.set_state(LOCK_SCATTER);
// auth pin?
// Sync -- Lock -- sCatter
// Tempsync _/
// auth repl
-#define LOCK_SYNC__ // R . R . rdlocks allowed on auth and replicas
-#define LOCK_GLOCKS -20 // r . r . waiting for replicas+rdlocks (auth), or rdlocks to release (replica)
-#define LOCK_GSCATTERS -28 // r . r .
+#define LOCK_SYNC__ // R . R . rdlocks allowed on auth and replicas
+#define LOCK_SYNC_LOCK__ -20 // r . r . waiting for replicas+rdlocks (auth), or rdlocks to release (replica)
+#define LOCK_SYNC_SCATTER -28 // r . r .
-#define LOCK_GSYNCL__ // . w LOCK on replica.
-#define LOCK_LOCK__ // . W . .
-#define LOCK_GTEMPSYNCL -21 // . w LOCK on replica.
+#define LOCK_LOCK_SYNC__ // . w LOCK on replica.
+#define LOCK_LOCK__ // . W . .
+#define LOCK_LOCK_TEMPSYNC -21 // . w LOCK on replica.
-#define LOCK_GLOCKC -22 // . wp . wp waiting for replicas+wrlocks (auth), or wrlocks to release (replica)
-#define LOCK_SCATTER 23 // . Wp . WP mtime updates on replicas allowed, no reads. stable here.
-#define LOCK_GTEMPSYNCC -24 // . wp . wp GLOCKC|LOCK on replica
+#define LOCK_SCATTER_LOCK -22 // . wp . wp waiting for replicas+wrlocks (auth), or wrlocks to release (replica)
+#define LOCK_SCATTER 23 // . Wp . WP mtime updates on replicas allowed, no reads. stable here.
+#define LOCK_SCATTER_TEMPSYNC -24 // . wp . wp GLOCKC|LOCK on replica
-#define LOCK_GSCATTERT -25 // r . LOCK on replica.
-#define LOCK_GLOCKT -26 // r . LOCK on replica.
-#define LOCK_TEMPSYNC 27 // R . LOCK on replica.
+#define LOCK_TEMPSYNC_SCATTER -25 // r . LOCK on replica.
+#define LOCK_TEMPSYNC_LOCK -26 // r . LOCK on replica.
+#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_GLOCKS: return "gLockS";
- case LOCK_GSCATTERS: return "gScatterS";
+ case LOCK_SYNC: return "sync";
+ case LOCK_SYNC_LOCK: return "sync->lock";
+ case LOCK_SYNC_SCATTER: return "sync->scatter";
- case LOCK_GSYNCL: return "gSyncL";
- case LOCK_LOCK: return "Lock";
- case LOCK_GTEMPSYNCL: return "gTempsyncL";
+ case LOCK_LONER_SYNC: return "loner->sync";
+ case LOCK_LOCK: return "lock";
+ case LOCK_LOCK_TEMPSYNC: return "lock->tempsync";
- case LOCK_GLOCKC: return "gLockC";
- case LOCK_SCATTER: return "sCatter";
- case LOCK_GTEMPSYNCC: return "gTempsyncC";
+ case LOCK_SCATTER_LOCK: return "scatter->lock";
+ case LOCK_SCATTER: return "scatter";
+ case LOCK_SCATTER_TEMPSYNC: return "scatter->tempsync";
- case LOCK_GSCATTERT: return "gsCatterT";
- case LOCK_GLOCKT: return "gLockT";
- case LOCK_TEMPSYNC: return "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;
}
case LOCK_SYNC:
return LOCK_SYNC;
- case LOCK_GSCATTERS: // hrm.
- case LOCK_GLOCKS:
- case LOCK_GSYNCL:
+ case LOCK_SYNC_SCATTER: // hrm.
+ case LOCK_SYNC_LOCK:
+ case LOCK_LONER_SYNC:
case LOCK_LOCK:
- case LOCK_GTEMPSYNCL:
- case LOCK_GLOCKC:
+ case LOCK_LOCK_TEMPSYNC:
+ case LOCK_SCATTER_LOCK:
return LOCK_LOCK;
case LOCK_SCATTER:
return LOCK_SCATTER;
- case LOCK_GTEMPSYNCC:
- case LOCK_GSCATTERT:
- case LOCK_GLOCKT:
+ case LOCK_SCATTER_TEMPSYNC:
+ case LOCK_TEMPSYNC_SCATTER:
+ case LOCK_TEMPSYNC_LOCK:
case LOCK_TEMPSYNC:
return LOCK_LOCK;
default:
// true if we are gathering and need the replica's data to be consistent
bool must_gather() {
- return (state == LOCK_GTEMPSYNCC ||
- state == LOCK_GLOCKC);
+ return (state == LOCK_SCATTER_TEMPSYNC ||
+ state == LOCK_SCATTER_LOCK);
}
void set_updated() {
return state == LOCK_SYNC || state == LOCK_TEMPSYNC;
}
bool can_rdlock_soon() {
- return state == LOCK_GTEMPSYNCC;
+ return state == LOCK_SCATTER_TEMPSYNC;
}
// xlock
bool can_xlock_soon() {
if (parent->is_auth())
- return (state == LOCK_GLOCKC ||
- state == LOCK_GLOCKS);
+ return (state == LOCK_SCATTER_LOCK ||
+ state == LOCK_SYNC_LOCK);
else
return false;
}
// auth rep
#define LOCK_SYNC 1 // AR R . R .
#define LOCK_LOCK 2 // AR R W . .
-#define LOCK_GLOCKR -3 // AR R . . .
+#define LOCK_SYNC_LOCK -3 // AR R . . .
#define LOCK_REMOTEXLOCK -50 // on NON-auth
-#define LOCK_CLIENTDEL -60
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_GLOCKR: return "glockr";
+ case LOCK_SYNC_LOCK: return "sync->lock";
case LOCK_REMOTEXLOCK: return "remote_xlock";
- case LOCK_CLIENTDEL: return "clientdel";
default: assert(0); return 0;
}
}
virtual int get_replica_state() const {
switch (state) {
case LOCK_LOCK:
- case LOCK_GLOCKR:
+ case LOCK_SYNC_LOCK:
return LOCK_LOCK;
case LOCK_SYNC:
return LOCK_SYNC;
}
bool can_xlock_soon() {
if (parent->is_auth())
- return (state == LOCK_GLOCKR);
+ return (state == LOCK_SYNC_LOCK);
else
return false;
}