Skip to content

Commit a993f3f

Browse files
authored
Added support for connection sentinel_kwargs. (#318)
1 parent 70e31ec commit a993f3f

File tree

5 files changed

+86
-15
lines changed

5 files changed

+86
-15
lines changed

.github/workflows/tests.yml

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ jobs:
4141
REDIS_MASTER_HOST: redis
4242
REDIS_MASTER_SET: sentinel
4343
REDIS_SENTINEL_QUORUM: "1"
44+
REDIS_SENTINEL_PASSWORD: channels_redis
4445

4546
steps:
4647
- uses: actions/checkout@v2

channels_redis/core.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,11 @@ def create_pool(self, index):
134134
elif "master_name" in host:
135135
sentinels = host.pop("sentinels")
136136
master_name = host.pop("master_name")
137+
sentinel_kwargs = host.pop("sentinel_kwargs", None)
137138
return aioredis.sentinel.SentinelConnectionPool(
138-
master_name, aioredis.sentinel.Sentinel(sentinels), **host
139+
master_name,
140+
aioredis.sentinel.Sentinel(sentinels, sentinel_kwargs=sentinel_kwargs),
141+
**host
139142
)
140143
else:
141144
return aioredis.ConnectionPool(**host)

channels_redis/pubsub.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ class RedisSingleShardConnection:
263263
def __init__(self, host, channel_layer):
264264
self.host = host.copy() if type(host) is dict else {"address": host}
265265
self.master_name = self.host.pop("master_name", None)
266+
self.sentinel_kwargs = self.host.pop("sentinel_kwargs", None)
266267
self.channel_layer = channel_layer
267268
self._subscribed_to = set()
268269
self._lock = asyncio.Lock()
@@ -348,7 +349,9 @@ def _ensure_redis(self):
348349
pool = aioredis.sentinel.SentinelConnectionPool(
349350
self.master_name,
350351
aioredis.sentinel.Sentinel(
351-
self.host["sentinels"], socket_timeout=2
352+
self.host["sentinels"],
353+
socket_timeout=2,
354+
sentinel_kwargs=self.sentinel_kwargs,
352355
),
353356
)
354357
self._redis = aioredis.Redis(connection_pool=pool)

tests/test_pubsub_sentinel.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88
from channels_redis.pubsub import RedisPubSubChannelLayer
99

1010
SENTINEL_MASTER = "sentinel"
11-
TEST_HOSTS = [{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER}]
11+
SENTINEL_KWARGS = {"password": "channels_redis"}
12+
TEST_HOSTS = [
13+
{
14+
"sentinels": [("localhost", 26379)],
15+
"master_name": SENTINEL_MASTER,
16+
"sentinel_kwargs": SENTINEL_KWARGS,
17+
}
18+
]
1219

1320

1421
@pytest.fixture()

tests/test_sentinel.py

+69-12
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,76 @@
88
from channels_redis.core import ChannelFull, RedisChannelLayer
99

1010
SENTINEL_MASTER = "sentinel"
11-
TEST_HOSTS = [{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER}]
12-
11+
SENTINEL_KWARGS = {"password": "channels_redis"}
12+
13+
TEST_HOSTS = [
14+
{
15+
"sentinels": [("localhost", 26379)],
16+
"master_name": SENTINEL_MASTER,
17+
"sentinel_kwargs": SENTINEL_KWARGS,
18+
}
19+
]
1320
MULTIPLE_TEST_HOSTS = [
14-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 0},
15-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 1},
16-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 2},
17-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 3},
18-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 4},
19-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 5},
20-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 6},
21-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 7},
22-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 8},
23-
{"sentinels": [("localhost", 26379)], "master_name": SENTINEL_MASTER, "db": 9},
21+
{
22+
"sentinels": [("localhost", 26379)],
23+
"master_name": SENTINEL_MASTER,
24+
"sentinel_kwargs": SENTINEL_KWARGS,
25+
"db": 0,
26+
},
27+
{
28+
"sentinels": [("localhost", 26379)],
29+
"master_name": SENTINEL_MASTER,
30+
"sentinel_kwargs": SENTINEL_KWARGS,
31+
"db": 1,
32+
},
33+
{
34+
"sentinels": [("localhost", 26379)],
35+
"master_name": SENTINEL_MASTER,
36+
"sentinel_kwargs": SENTINEL_KWARGS,
37+
"db": 2,
38+
},
39+
{
40+
"sentinels": [("localhost", 26379)],
41+
"master_name": SENTINEL_MASTER,
42+
"sentinel_kwargs": SENTINEL_KWARGS,
43+
"db": 3,
44+
},
45+
{
46+
"sentinels": [("localhost", 26379)],
47+
"master_name": SENTINEL_MASTER,
48+
"sentinel_kwargs": SENTINEL_KWARGS,
49+
"db": 4,
50+
},
51+
{
52+
"sentinels": [("localhost", 26379)],
53+
"master_name": SENTINEL_MASTER,
54+
"sentinel_kwargs": SENTINEL_KWARGS,
55+
"db": 5,
56+
},
57+
{
58+
"sentinels": [("localhost", 26379)],
59+
"master_name": SENTINEL_MASTER,
60+
"sentinel_kwargs": SENTINEL_KWARGS,
61+
"db": 6,
62+
},
63+
{
64+
"sentinels": [("localhost", 26379)],
65+
"master_name": SENTINEL_MASTER,
66+
"sentinel_kwargs": SENTINEL_KWARGS,
67+
"db": 7,
68+
},
69+
{
70+
"sentinels": [("localhost", 26379)],
71+
"master_name": SENTINEL_MASTER,
72+
"sentinel_kwargs": SENTINEL_KWARGS,
73+
"db": 8,
74+
},
75+
{
76+
"sentinels": [("localhost", 26379)],
77+
"master_name": SENTINEL_MASTER,
78+
"sentinel_kwargs": SENTINEL_KWARGS,
79+
"db": 9,
80+
},
2481
]
2582

2683

0 commit comments

Comments
 (0)