Пример #1
0
    def Lock(self, sender, lock_name):
        if lock_name not in self.locks:
            return "lock %s does not exist" % lock_name, None

        logger.debug("%s wants the lock", sender, extra={"mode": "server"})
        client_id = self._get_id()
        self.locks[lock_name].acquire()
        self.owners[lock_name] = client_id
        logger.debug("%s has the lock w/ id %s", sender, client_id, extra={"mode": "server"})
        return OK, client_id
Пример #2
0
    def CreateLock(self, sender, lock_name):

        logger.debug("creating lock %s", lock_name, extra={"mode": "server"})

        # Create is idempotent, so don't error
        if lock_name in self.locks:
            return OK, None

        self.locks[lock_name] = threading.Lock()
        self.owners[lock_name] = None
        return OK, None
Пример #3
0
    def Release(self, sender, lock_name, client_id):
        if lock_name not in self.locks:
            return "lock %s does not exist" % lock_name, None

        if client_id != self.owners[lock_name]:
            return "you do not own lock %s" % lock_name, None

        self.owners[lock_name] = None
        self.locks[lock_name].release()
        logger.debug("%s has released lock" % sender, extra={"mode": "server"})
        return OK, None
Пример #4
0
 def _caller(**kwargs):
     logger.debug("[Server %s][Method %s][Args %s]", self.addr, attr, kwargs, extra={"mode":"client"})
     msg = RpcMessage(method=attr, **kwargs)
     return self._call(self.addr, msg)