From 78a3848e7369082b9d970ad8644b9dae0d70f3bd Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 22 Oct 2019 17:20:06 +0200 Subject: [PATCH] Retry on raft internal error (#1241) Fixes https://github.com/zalando/patroni/issues/1237 --- patroni/dcs/etcd.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/patroni/dcs/etcd.py b/patroni/dcs/etcd.py index 600f0aff..4618b260 100644 --- a/patroni/dcs/etcd.py +++ b/patroni/dcs/etcd.py @@ -25,6 +25,10 @@ from threading import Thread logger = logging.getLogger(__name__) +class EtcdRaftInternal(etcd.EtcdException): + """Raft Internal Error""" + + class EtcdError(DCSError): pass @@ -312,9 +316,7 @@ class Etcd(AbstractDCS): super(Etcd, self).__init__(config) self._ttl = int(config.get('ttl') or 30) self._retry = Retry(deadline=config['retry_timeout'], max_delay=1, max_tries=-1, - retry_exceptions=(etcd.EtcdLeaderElectionInProgress, - etcd.EtcdWatcherCleared, - etcd.EtcdEventIndexCleared)) + retry_exceptions=(etcd.EtcdLeaderElectionInProgress, EtcdRaftInternal)) self._client = self.get_etcd_client(config) self.__do_not_watch = False self._has_failed = False @@ -596,3 +598,6 @@ class Etcd(AbstractDCS): return super(Etcd, self).watch(None, timeout) finally: self.event.clear() + + +etcd.EtcdError.error_exceptions[300] = EtcdRaftInternal