mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 23:10:15 +00:00
Previously replicas were always watching for leader key (even if the postgres was not in the running there). It was not a big issue, but it was not possible to interrupt such watch in cases if the postgres started up or stopped successfully. Also it was delaying update_member call and we had kind of stale information in DCS up to `loop_wait` seconds. This commit changes such behavior. If the async_executor is busy by starting/stopping or restarting postgres we will not watch for leader key but waiting for event from async_executor up to `loop_wait` seconds. Async executor will fire such event only in case if the function it was calling returned something what could be evaluated to boolean True. Such functionality is really needed to change the way how we are making decision about necessity of pg_rewind. It will require to have a local postgres running and for us it is really important to get such notification as soon as possible.
19 lines
430 B
Python
19 lines
430 B
Python
import unittest
|
|
|
|
from mock import Mock, patch
|
|
from patroni.async_executor import AsyncExecutor
|
|
from threading import Thread
|
|
|
|
|
|
class TestAsyncExecutor(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.a = AsyncExecutor(Mock())
|
|
|
|
@patch.object(Thread, 'start', Mock())
|
|
def test_run_async(self):
|
|
self.a.run_async(Mock(return_value=True))
|
|
|
|
def test_run(self):
|
|
self.a.run(Mock(side_effect=Exception()))
|