All sleep calls via std::this_thread
[invirt/third/libt4.git] / lock_server.cc
index 90ad5b2..141a598 100644 (file)
@@ -3,7 +3,6 @@
 #include "lock_server.h"
 #include <unistd.h>
 #include <arpa/inet.h>
-#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;