Skip to content

Commit 18ca789

Browse files
committed
Switch to split known server lists
See raiden-network/raiden#6442
1 parent 2571660 commit 18ca789

File tree

5 files changed

+73
-24
lines changed

5 files changed

+73
-24
lines changed

build/purger/purger.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,18 @@ def purge(
125125
# In case an empty env var is set
126126
url_known_federation_servers = DEFAULT_MATRIX_KNOWN_SERVERS[Environment.PRODUCTION]
127127
# fetch remote whiltelist
128-
remote_whitelist = yaml.safe_load(requests.get(url_known_federation_servers).text)
128+
try:
129+
remote_whitelist = json.loads(requests.get(url_known_federation_servers).text)[
130+
"all_servers"
131+
]
132+
except (requests.RequestException, JSONDecodeError, KeyError) as ex:
133+
click.secho(
134+
f"Error while fetching whitelist: {ex!r}. "
135+
f"Ignoring, containers will be restarted.",
136+
err=True,
137+
)
138+
# An empty whitelist will cause the container to be restarted
139+
remote_whitelist = []
129140

130141
client = docker.from_env() # pylint: disable=no-member
131142
for container in client.containers.list():
@@ -145,16 +156,9 @@ def purge(
145156
continue
146157

147158
click.secho(f"Whitelist changed. Restarting. new_list={remote_whitelist!r}")
148-
except (
149-
KeyError,
150-
IndexError,
151-
requests.RequestException,
152-
yaml.scanner.ScannerError,
153-
) as ex:
159+
except (KeyError, IndexError) as ex:
154160
click.secho(
155-
f"An error ocurred while fetching whitelists: {ex!r}\n"
156-
"Restarting anyway",
157-
err=True,
161+
f"Error fetching container status: {ex!r}. Restarting anyway.", err=True,
158162
)
159163
# restart container
160164
container.restart(timeout=30)

build/room_ensurer/room_ensurer.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626

2727
patch_all() # isort:skip
2828

29-
from raiden.utils.datastructures import merge_dict
30-
3129
import json
3230
import os
3331
import sys
@@ -42,7 +40,6 @@
4240
import gevent
4341
from eth_utils import encode_hex, to_normalized_address
4442
from matrix_client.errors import MatrixError
45-
from raiden_contracts.utils.type_aliases import ChainID
4643
from structlog import get_logger
4744

4845
from raiden.constants import (
@@ -51,14 +48,16 @@
5148
PATH_FINDING_BROADCASTING_ROOM,
5249
Environment,
5350
Networks,
51+
ServerListType,
5452
)
5553
from raiden.log_config import configure_logging
5654
from raiden.network.transport.matrix import make_room_alias
5755
from raiden.network.transport.matrix.client import GMatrixHttpApi
5856
from raiden.settings import DEFAULT_MATRIX_KNOWN_SERVERS
5957
from raiden.tests.utils.factories import make_signer
6058
from raiden.utils.cli import get_matrix_servers
61-
59+
from raiden.utils.datastructures import merge_dict
60+
from raiden_contracts.utils.type_aliases import ChainID
6261

6362
ENV_KEY_KNOWN_SERVERS = "URL_KNOWN_FEDERATION_SERVERS"
6463

@@ -104,7 +103,9 @@ def __init__(
104103

105104
self._known_servers: Dict[str, str] = {
106105
urlparse(server_url).netloc: server_url
107-
for server_url in get_matrix_servers(known_servers_url)
106+
for server_url in get_matrix_servers(
107+
known_servers_url, server_list_type=ServerListType.ALL_SERVERS
108+
)
108109
}
109110
if not self._known_servers:
110111
raise RuntimeError(f"No known servers found from list at {known_servers_url}.")
@@ -214,7 +215,7 @@ def _ensure_room_for_network(self, network: Networks, alias_fragment: str) -> No
214215
self._ensure_admin_power_levels(room_infos[self._own_server_name])
215216

216217
def _join_and_alias_room(
217-
self, first_server_room_alias: str, own_server_room_alias: str
218+
self, first_server_room_alias: str, own_server_room_alias: str
218219
) -> None:
219220
response = self._own_api.join_room(first_server_room_alias)
220221
own_room_id = response.get("room_id")
@@ -291,12 +292,16 @@ def _ensure_admin_power_levels(self, room_info: RoomInfo) -> None:
291292
return
292293

293294
if own_user not in current_power_levels["users"]:
294-
log.warning(f"{own_user} has not been granted administrative power levels yet. Doing nothing.")
295+
log.warning(
296+
f"{own_user} has not been granted administrative power levels yet. Doing nothing."
297+
)
295298
return
296299

297300
# the supposed power level dict could be just a subset of the current
298301
# because providers who left cannot be removed from other admins
299-
if set(supposed_power_levels["users"].keys()).issubset(set(current_power_levels["users"].keys())):
302+
if set(supposed_power_levels["users"].keys()).issubset(
303+
set(current_power_levels["users"].keys())
304+
):
300305
log.debug(f"Power levels are up to date. Doing nothing.")
301306
return
302307

build/synapse/render_config_template.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@
22
import os
33
import random
44
import string
5+
from json.decoder import JSONDecodeError
56
from pathlib import Path
67
from typing import Optional
78
from urllib.error import URLError
89
from urllib.request import urlopen
910

10-
PATH_CONFIG = Path("/config/synapse.yaml")
11-
PATH_CONFIG_TEMPLATE = Path("/config/synapse.template.yaml")
11+
import click
12+
from docker import Client
13+
14+
PATH_CONFIG_SYNAPSE = Path("/config/synapse.yaml")
15+
PATH_CONFIG_TEMPLATE_SYNAPSE = Path("/config/synapse.template.yaml")
16+
PATH_CONFIG_WORKER_BASE = Path("/config/workers/")
17+
PATH_CONFIG_TEMPLATE_WORKER = Path("/config/worker.template.yaml")
18+
1219
PATH_MACAROON_KEY = Path("/data/keys/macaroon.key")
1320
PATH_ADMIN_USER_CREDENTIALS = Path("/config/admin_user_cred.json")
14-
PATH_KNOWN_FEDERATION_SERVERS = Path("/data/known_federation_servers.yaml")
21+
PATH_KNOWN_FEDERATION_SERVERS = Path("/data/known_federation_servers.json")
1522
PATH_WELL_KNOWN_FILE = Path("/data_well_known/server")
1623

1724
# This file gets created during docker build from the given Raiden version
@@ -36,7 +43,13 @@ def get_known_federation_servers(url_known_federation_servers: Optional[str]) ->
3643
try:
3744
resp = urlopen(url_known_federation_servers)
3845
if 200 <= resp.code < 300:
39-
PATH_KNOWN_FEDERATION_SERVERS.write_text(resp.read().decode())
46+
try:
47+
known_servers = json.loads(resp.read().decode())
48+
PATH_KNOWN_FEDERATION_SERVERS.write_text(
49+
"".join(f"- {server}\n" for server in known_servers["all_servers"])
50+
)
51+
except (JSONDecodeError, KeyError):
52+
print("Error loading known servers list:", resp.code, resp.read().decode())
4053
else:
4154
print("Error fetching known servers list:", resp.code, resp.read().decode())
4255
except URLError as ex:
@@ -47,13 +60,13 @@ def get_known_federation_servers(url_known_federation_servers: Optional[str]) ->
4760

4861

4962
def render_synapse_config(server_name: str, url_known_federation_servers: Optional[str]) -> None:
50-
template_content = PATH_CONFIG_TEMPLATE.read_text()
63+
template_content = PATH_CONFIG_TEMPLATE_SYNAPSE.read_text()
5164
rendered_config = string.Template(template_content).substitute(
5265
MACAROON_KEY=get_macaroon_key(),
5366
SERVER_NAME=server_name,
5467
KNOWN_SERVERS=get_known_federation_servers(url_known_federation_servers),
5568
)
56-
PATH_CONFIG.write_text(rendered_config)
69+
PATH_CONFIG_SYNAPSE.write_text(rendered_config)
5770

5871

5972
def render_well_known_file(server_name: str) -> None:
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"active_servers": [
3+
"transport.transport01.raiden.network",
4+
"transport.transport02.raiden.network",
5+
"transport.transport03.raiden.network",
6+
"transport.transport04.raiden.network"
7+
],
8+
"all_servers": [
9+
"transport.transport01.raiden.network",
10+
"transport.transport02.raiden.network",
11+
"transport.transport03.raiden.network",
12+
"transport.transport04.raiden.network"
13+
]
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"active_servers": [
3+
"transport.mainnet.raiden.anyblock.tools",
4+
"transport.raiden.dappnode.io",
5+
"transport.raiden.badgateway.tech"
6+
],
7+
"all_servers": [
8+
"transport.mainnet.raiden.anyblock.tools",
9+
"transport.raiden.dappnode.io",
10+
"transport.raiden.badgateway.tech",
11+
"transport.raiden.overdoze.se"
12+
]
13+
}

0 commit comments

Comments
 (0)