Skip to content

EtcdWatchTimedOut does not been raised when occur #268

Description

@TCGOGOGO

EtcdWatchTimedOut seems raised in _wrap_request (client.py)

    def _wrap_request(payload):
        ...
                except (HTTPError, HTTPException, socket.error) as e:
                    if (isinstance(params, dict) and
                        params.get("wait") == "true" and
                        isinstance(e, ReadTimeoutError)):
                        _log.debug("Watch timed out.")
                        raise etcd.EtcdWatchTimedOut(
                            "Watch timed out: %r" % e,
                            cause=e
                        )

however, this exception will be catched internally in _acquired (lock.py)

    def _acquired(self, blocking=True, timeout=0):
        ...
            while True:
                try:
                    r = self.client.watch(watch_key, timeout=t, index=nearest.modifiedIndex + 1)
                    _log.debug("Detected variation for %s: %s", r.key, r.action)
                    return self._acquired(blocking=True, timeout=timeout)
                except etcd.EtcdKeyNotFound:
                    _log.debug("Key %s not present anymore, moving on", watch_key)
                    return self._acquired(blocking=True, timeout=timeout)
                except etcd.EtcdLockExpired as e:
                    raise e
          !!!   except etcd.EtcdException:
          !!!       _log.exception("Unexpected exception")

As a result, while loop will not break even if timeout occur. That's to say, timeout is useless

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions