X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/f0dcb6b97d6d40f67698d1f71ac26970f1776f82..c06ef44e7af1571710fd31dd0ab068dd77b1eb2d:/lock_server.cc diff --git a/lock_server.cc b/lock_server.cc index 90ad5b2..141a598 100644 --- a/lock_server.cc +++ b/lock_server.cc @@ -3,7 +3,6 @@ #include "lock_server.h" #include #include -#include "handle.h" lock_state::lock_state(): held(false) @@ -42,26 +41,19 @@ void lock_server::revoker () { while (1) { lock_protocol::lockid_t lid; revoke_fifo.deq(&lid); - LOG("Revoking " << lid); + LOG << "Revoking " << lid; if (rsm_ && !rsm_->amiprimary()) continue; lock_state & st = get_lock_state(lid); - holder_t held_by; - { - lock sl(st.m); - held_by = st.held_by; - } + lock sl(st.m); + holder_t held_by = st.held_by; + sl.unlock(); - rpcc *proxy = NULL; - // try a few times? - //int t=5; - //while (t-- && !proxy) - proxy = handle(held_by.first).safebind(); - if (proxy) { + if (auto cl = rpcc::bind_cached(held_by.first)) { int r; - auto ret = (rlock_protocol::status)proxy->call(rlock_protocol::revoke, r, lid, held_by.second); - LOG("Revoke returned " << ret); + auto ret = (rlock_protocol::status)cl->call(rlock_protocol::revoke, r, lid, held_by.second); + LOG << "Revoke returned " << ret; } } } @@ -73,7 +65,7 @@ void lock_server::retryer() { if (rsm_ && !rsm_->amiprimary()) continue; - LOG("Sending retry for " << lid); + LOG << "Sending retry for " << lid; lock_state & st = get_lock_state(lid); holder_t front; { @@ -83,21 +75,16 @@ void lock_server::retryer() { front = st.wanted_by.front(); } - rpcc *proxy = NULL; - // try a few times? - //int t=5; - //while (t-- && !proxy) - proxy = handle(front.first).safebind(); - if (proxy) { + if (auto cl = rpcc::bind_cached(front.first)) { int r; - auto ret = (rlock_protocol::status)proxy->call(rlock_protocol::retry, r, lid, front.second); - LOG("Retry returned " << ret); + auto ret = (rlock_protocol::status)cl->call(rlock_protocol::retry, r, lid, front.second); + LOG << "Retry returned " << ret; } } } lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, const callback_t & id, lock_protocol::xid_t xid) { - LOG("lid=" << lid << " client=" << id << "," << xid); + LOG << "lid=" << lid << " client=" << id << "," << xid; holder_t h = holder_t(id, xid); lock_state & st = get_lock_state(lid); lock sl(st.m); @@ -109,7 +96,7 @@ lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, c return lock_protocol::RPCERR; else if (old_xid == xid) { if (st.held && st.held_by == h) { - LOG("Client " << id << " sent duplicate acquire xid=" << xid); + LOG << "Client " << id << " sent duplicate acquire xid=" << xid; return lock_protocol::OK; } } @@ -123,7 +110,7 @@ lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, c st.held = true; st.held_by = h; - LOG("Lock " << lid << " held by " << h.first); + LOG << "Lock " << lid << " held by " << h.first; if (st.wanted_by.size()) revoke_fifo.enq(lid); return lock_protocol::OK; @@ -135,7 +122,7 @@ lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, c if (p.first == id) { // make sure client is obeying serialization if (p.second != xid) { - LOG("Client " << id << " sent acquire xid=" << xid << " with in-progress xid=" << p.second); + LOG << "Client " << id << " sent acquire xid=" << xid << " with in-progress xid=" << p.second; return lock_protocol::RPCERR; } found = true; @@ -145,7 +132,7 @@ lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, c if (!found) st.wanted_by.push_back(h); - LOG("wanted_by=" << st.wanted_by); + LOG << "wanted_by=" << st.wanted_by; // send revoke if we're first in line if (st.wanted_by.front() == h) @@ -155,12 +142,12 @@ lock_protocol::status lock_server::acquire(int &, lock_protocol::lockid_t lid, c } lock_protocol::status lock_server::release(int &, lock_protocol::lockid_t lid, const callback_t & id, lock_protocol::xid_t xid) { - LOG("lid=" << lid << " client=" << id << "," << xid); + LOG << "lid=" << lid << " client=" << id << "," << xid; lock_state & st = get_lock_state(lid); lock sl(st.m); if (st.held && st.held_by == holder_t(id, xid)) { st.held = false; - LOG("Lock " << lid << " not held"); + LOG << "Lock " << lid << " not held"; } if (st.wanted_by.size()) retry_fifo.enq(lid); @@ -178,7 +165,7 @@ void lock_server::unmarshal_state(const string & state) { } lock_protocol::status lock_server::stat(int & r, lock_protocol::lockid_t lid, const callback_t &) { - LOG("stat request for " << lid); + LOG << "stat request for " << lid; VERIFY(0); r = nacquire; return lock_protocol::OK;