Merge branch 'master' into develop
commit
a1154dfc20
|
@ -314,7 +314,7 @@ jobs:
|
||||||
# There aren't wheels for some of the older deps, so we need to install
|
# There aren't wheels for some of the older deps, so we need to install
|
||||||
# their build dependencies
|
# their build dependencies
|
||||||
- run: |
|
- run: |
|
||||||
sudo apt update
|
sudo apt-get -qq update
|
||||||
sudo apt-get -qq install build-essential libffi-dev python-dev \
|
sudo apt-get -qq install build-essential libffi-dev python-dev \
|
||||||
libxml2-dev libxslt-dev xmlsec1 zlib1g-dev libjpeg-dev libwebp-dev
|
libxml2-dev libxslt-dev xmlsec1 zlib1g-dev libjpeg-dev libwebp-dev
|
||||||
|
|
||||||
|
|
19
CHANGES.md
19
CHANGES.md
|
@ -1,3 +1,22 @@
|
||||||
|
Synapse 1.84.1 (2023-05-26)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
This patch release fixes a major issue with homeservers that do not have an `instance_map` defined but which do use workers.
|
||||||
|
If you have already upgraded to Synapse 1.84.0 and your homeserver is working normally, then there is no need to update to this patch release.
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in Synapse v1.84.0 where workers do not start up when no `instance_map` was provided. ([\#15672](https://github.com/matrix-org/synapse/issues/15672))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add `dch` and `notify-send` to the development Nix flake so that the release script can be used. ([\#15673](https://github.com/matrix-org/synapse/issues/15673))
|
||||||
|
|
||||||
|
|
||||||
Synapse 1.84.0 (2023-05-23)
|
Synapse 1.84.0 (2023-05-23)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
matrix-synapse-py3 (1.84.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New Synapse release 1.84.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Fri, 26 May 2023 16:15:30 +0100
|
||||||
|
|
||||||
matrix-synapse-py3 (1.84.0) stable; urgency=medium
|
matrix-synapse-py3 (1.84.0) stable; urgency=medium
|
||||||
|
|
||||||
* New Synapse release 1.84.0.
|
* New Synapse release 1.84.0.
|
||||||
|
|
|
@ -95,6 +95,10 @@
|
||||||
|
|
||||||
# For building the Synapse documentation website.
|
# For building the Synapse documentation website.
|
||||||
mdbook
|
mdbook
|
||||||
|
|
||||||
|
# For releasing Synapse
|
||||||
|
debian-devscripts # (`dch` for manipulating the Debian changelog)
|
||||||
|
libnotify # (the release script uses `notify-send` to tell you when CI jobs are done)
|
||||||
];
|
];
|
||||||
|
|
||||||
# Install Python and manage a virtualenv with Poetry.
|
# Install Python and manage a virtualenv with Poetry.
|
||||||
|
|
|
@ -89,7 +89,7 @@ manifest-path = "rust/Cargo.toml"
|
||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "matrix-synapse"
|
name = "matrix-synapse"
|
||||||
version = "1.84.0"
|
version = "1.84.1"
|
||||||
description = "Homeserver for the Matrix decentralised comms protocol"
|
description = "Homeserver for the Matrix decentralised comms protocol"
|
||||||
authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
authors = ["Matrix.org Team and Contributors <packages@matrix.org>"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|
|
@ -222,7 +222,7 @@ class WorkerConfig(Config):
|
||||||
# itself doesn't need this data as it would never have to talk to itself.
|
# itself doesn't need this data as it would never have to talk to itself.
|
||||||
instance_map: Dict[str, Any] = config.get("instance_map", {})
|
instance_map: Dict[str, Any] = config.get("instance_map", {})
|
||||||
|
|
||||||
if instance_map and self.instance_name is not MAIN_PROCESS_INSTANCE_NAME:
|
if self.instance_name is not MAIN_PROCESS_INSTANCE_NAME:
|
||||||
# The host used to connect to the main synapse
|
# The host used to connect to the main synapse
|
||||||
main_host = config.get("worker_replication_host", None)
|
main_host = config.get("worker_replication_host", None)
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@ class HomeserverAppStartTestCase(ConfigFileTestCase):
|
||||||
# Add a blank line as otherwise the next addition ends up on a line with a comment
|
# Add a blank line as otherwise the next addition ends up on a line with a comment
|
||||||
self.add_lines_to_config([" "])
|
self.add_lines_to_config([" "])
|
||||||
self.add_lines_to_config(["worker_app: test_worker_app"])
|
self.add_lines_to_config(["worker_app: test_worker_app"])
|
||||||
|
self.add_lines_to_config(["worker_replication_host: 127.0.0.1"])
|
||||||
|
self.add_lines_to_config(["worker_replication_http_port: 0"])
|
||||||
|
|
||||||
# Ensure that starting master process with worker config raises an exception
|
# Ensure that starting master process with worker config raises an exception
|
||||||
with self.assertRaises(ConfigError):
|
with self.assertRaises(ConfigError):
|
||||||
|
|
|
@ -42,6 +42,7 @@ class FederationReaderOpenIDListenerTests(HomeserverTestCase):
|
||||||
# have to tell the FederationHandler not to try to access stuff that is only
|
# have to tell the FederationHandler not to try to access stuff that is only
|
||||||
# in the primary store.
|
# in the primary store.
|
||||||
conf["worker_app"] = "yes"
|
conf["worker_app"] = "yes"
|
||||||
|
conf["instance_map"] = {"main": {"host": "127.0.0.1", "port": 0}}
|
||||||
|
|
||||||
return conf
|
return conf
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ from unittest.mock import Mock
|
||||||
from immutabledict import immutabledict
|
from immutabledict import immutabledict
|
||||||
|
|
||||||
from synapse.config import ConfigError
|
from synapse.config import ConfigError
|
||||||
from synapse.config.workers import WorkerConfig
|
from synapse.config.workers import InstanceLocationConfig, WorkerConfig
|
||||||
|
|
||||||
from tests.unittest import TestCase
|
from tests.unittest import TestCase
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
# so that it doesn't raise an exception here.
|
# so that it doesn't raise an exception here.
|
||||||
# (This is not read by `_should_this_worker_perform_duty`.)
|
# (This is not read by `_should_this_worker_perform_duty`.)
|
||||||
"notify_appservices": False,
|
"notify_appservices": False,
|
||||||
|
"instance_map": {"main": {"host": "127.0.0.1", "port": 0}},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -138,7 +139,9 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
main_process_config = self._make_worker_config(
|
main_process_config = self._make_worker_config(
|
||||||
worker_app="synapse.app.homeserver", worker_name=None
|
worker_app="synapse.app.homeserver",
|
||||||
|
worker_name=None,
|
||||||
|
extras={"instance_map": {"main": {"host": "127.0.0.1", "port": 0}}},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
|
@ -203,6 +206,7 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
# so that it doesn't raise an exception here.
|
# so that it doesn't raise an exception here.
|
||||||
# (This is not read by `_should_this_worker_perform_duty`.)
|
# (This is not read by `_should_this_worker_perform_duty`.)
|
||||||
"notify_appservices": False,
|
"notify_appservices": False,
|
||||||
|
"instance_map": {"main": {"host": "127.0.0.1", "port": 0}},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -236,7 +240,9 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
Tests new config options. This is for the master's config.
|
Tests new config options. This is for the master's config.
|
||||||
"""
|
"""
|
||||||
main_process_config = self._make_worker_config(
|
main_process_config = self._make_worker_config(
|
||||||
worker_app="synapse.app.homeserver", worker_name=None
|
worker_app="synapse.app.homeserver",
|
||||||
|
worker_name=None,
|
||||||
|
extras={"instance_map": {"main": {"host": "127.0.0.1", "port": 0}}},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
|
@ -262,7 +268,9 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
Tests new config options. This is for the worker's config.
|
Tests new config options. This is for the worker's config.
|
||||||
"""
|
"""
|
||||||
appservice_worker_config = self._make_worker_config(
|
appservice_worker_config = self._make_worker_config(
|
||||||
worker_app="synapse.app.generic_worker", worker_name="worker1"
|
worker_app="synapse.app.generic_worker",
|
||||||
|
worker_name="worker1",
|
||||||
|
extras={"instance_map": {"main": {"host": "127.0.0.1", "port": 0}}},
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
|
@ -298,6 +306,7 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
extras={
|
extras={
|
||||||
"notify_appservices_from_worker": "worker2",
|
"notify_appservices_from_worker": "worker2",
|
||||||
"update_user_directory_from_worker": "worker1",
|
"update_user_directory_from_worker": "worker1",
|
||||||
|
"instance_map": {"main": {"host": "127.0.0.1", "port": 0}},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.assertFalse(worker1_config.should_notify_appservices)
|
self.assertFalse(worker1_config.should_notify_appservices)
|
||||||
|
@ -309,7 +318,33 @@ class WorkerDutyConfigTestCase(TestCase):
|
||||||
extras={
|
extras={
|
||||||
"notify_appservices_from_worker": "worker2",
|
"notify_appservices_from_worker": "worker2",
|
||||||
"update_user_directory_from_worker": "worker1",
|
"update_user_directory_from_worker": "worker1",
|
||||||
|
"instance_map": {"main": {"host": "127.0.0.1", "port": 0}},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
self.assertTrue(worker2_config.should_notify_appservices)
|
self.assertTrue(worker2_config.should_notify_appservices)
|
||||||
self.assertFalse(worker2_config.should_update_user_directory)
|
self.assertFalse(worker2_config.should_update_user_directory)
|
||||||
|
|
||||||
|
def test_worker_instance_map_compat(self) -> None:
|
||||||
|
"""
|
||||||
|
Test that `worker_replication_*` settings are compatibly handled by
|
||||||
|
adding them to the instance map as a `main` entry.
|
||||||
|
"""
|
||||||
|
|
||||||
|
worker1_config = self._make_worker_config(
|
||||||
|
worker_app="synapse.app.generic_worker",
|
||||||
|
worker_name="worker1",
|
||||||
|
extras={
|
||||||
|
"notify_appservices_from_worker": "worker2",
|
||||||
|
"update_user_directory_from_worker": "worker1",
|
||||||
|
"worker_replication_host": "127.0.0.42",
|
||||||
|
"worker_replication_http_port": 1979,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
worker1_config.instance_map,
|
||||||
|
{
|
||||||
|
"master": InstanceLocationConfig(
|
||||||
|
host="127.0.0.42", port=1979, tls=False
|
||||||
|
),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
|
@ -32,6 +32,7 @@ class FederationAckTestCase(HomeserverTestCase):
|
||||||
config["worker_app"] = "synapse.app.generic_worker"
|
config["worker_app"] = "synapse.app.generic_worker"
|
||||||
config["worker_name"] = "federation_sender1"
|
config["worker_name"] = "federation_sender1"
|
||||||
config["federation_sender_instances"] = ["federation_sender1"]
|
config["federation_sender_instances"] = ["federation_sender1"]
|
||||||
|
config["instance_map"] = {"main": {"host": "127.0.0.1", "port": 0}}
|
||||||
return config
|
return config
|
||||||
|
|
||||||
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
|
||||||
|
|
|
@ -55,6 +55,7 @@ class WorkerSchemaTests(HomeserverTestCase):
|
||||||
|
|
||||||
# Mark this as a worker app.
|
# Mark this as a worker app.
|
||||||
conf["worker_app"] = "yes"
|
conf["worker_app"] = "yes"
|
||||||
|
conf["instance_map"] = {"main": {"host": "127.0.0.1", "port": 0}}
|
||||||
|
|
||||||
return conf
|
return conf
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue