4
4
between tarantool instances and basic Round-Robin strategy.
5
5
'''
6
6
7
+ import time
7
8
from tarantool .connection import Connection
8
9
from tarantool .error import NetworkError
9
10
from tarantool .utils import ENCODING_DEFAULT
10
11
from tarantool .const import (
11
12
SOCKET_TIMEOUT ,
12
13
RECONNECT_MAX_ATTEMPTS ,
13
- RECONNECT_DELAY
14
+ RECONNECT_DELAY ,
15
+ NODES_REFRESH_INTERVAL
14
16
)
15
17
16
18
@@ -34,12 +36,15 @@ def __init__(self, addrs,
34
36
reconnect_delay = RECONNECT_DELAY ,
35
37
connect_now = True ,
36
38
encoding = ENCODING_DEFAULT ,
37
- strategy_class = RoundRobinStrategy ):
39
+ strategy_class = RoundRobinStrategy ,
40
+ nodes_refresh_interval = NODES_REFRESH_INTERVAL ):
38
41
self .nattempts = 2 * len (addrs ) + 1
39
42
self .strategy = strategy_class (addrs )
40
43
addr = self .strategy .getnext ()
41
44
host = addr ['host' ]
42
45
port = addr ['port' ]
46
+ self .nodes_refresh_interval = nodes_refresh_interval
47
+ self .last_nodes_refresh = 0
43
48
super (MeshConnection , self ).__init__ (host = host ,
44
49
port = port ,
45
50
user = user ,
@@ -63,3 +68,11 @@ def _opt_reconnect(self):
63
68
self .port = addr ['port' ]
64
69
else :
65
70
raise NetworkError
71
+
72
+ now = time .time ()
73
+ if now - self .last_nodes_refresh > self .nodes_refresh_interval :
74
+ addrs = super (MeshConnection , self ).call ('get_nodes' )
75
+ if addrs and type (addrs ) is list :
76
+ self .addrs = addrs
77
+ self .pos = 0
78
+ self .last_nodes_refresh = now
0 commit comments