Refactor cache metrics to be homeserver-scoped (#18604)

(add `server_name` label to cache metrics).

Part of https://github.com/element-hq/synapse/issues/18592
This commit is contained in:
Eric Eastwood
2025-07-16 16:04:57 -05:00
committed by GitHub
parent fc10a5ee29
commit 88785dbaeb
88 changed files with 694 additions and 268 deletions

View File

@@ -60,7 +60,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
# modify its config instead of the hs'
self.auth_blocking = AuthBlocking(hs)
self.test_user = "@foo:bar"
self.test_user_id = UserID.from_string("@foo:bar")
self.test_token = b"_test_token_"
# this is overridden for the appservice tests
@@ -71,7 +71,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
def test_get_user_by_req_user_valid_token(self) -> None:
user_info = TokenLookupResult(
user_id=self.test_user, token_id=5, device_id="device"
user_id=self.test_user_id.to_string(), token_id=5, device_id="device"
)
self.store.get_user_by_access_token = AsyncMock(return_value=user_info)
self.store.mark_access_token_as_used = AsyncMock(return_value=None)
@@ -81,7 +81,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = self.get_success(self.auth.get_user_by_req(request))
self.assertEqual(requester.user.to_string(), self.test_user)
self.assertEqual(requester.user, self.test_user_id)
def test_get_user_by_req_user_bad_token(self) -> None:
self.store.get_user_by_access_token = AsyncMock(return_value=None)
@@ -96,7 +96,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
self.assertEqual(f.errcode, "M_UNKNOWN_TOKEN")
def test_get_user_by_req_user_missing_token(self) -> None:
user_info = TokenLookupResult(user_id=self.test_user, token_id=5)
user_info = TokenLookupResult(user_id=self.test_user_id.to_string(), token_id=5)
self.store.get_user_by_access_token = AsyncMock(return_value=user_info)
request = Mock(args={})
@@ -109,7 +109,10 @@ class AuthTestCase(unittest.HomeserverTestCase):
def test_get_user_by_req_appservice_valid_token(self) -> None:
app_service = Mock(
token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
token="foobar",
url="a_url",
sender=self.test_user_id,
ip_range_whitelist=None,
)
self.store.get_app_service_by_token = Mock(return_value=app_service)
self.store.get_user_by_access_token = AsyncMock(return_value=None)
@@ -119,7 +122,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = self.get_success(self.auth.get_user_by_req(request))
self.assertEqual(requester.user.to_string(), self.test_user)
self.assertEqual(requester.user, self.test_user_id)
def test_get_user_by_req_appservice_valid_token_good_ip(self) -> None:
from netaddr import IPSet
@@ -127,7 +130,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
app_service = Mock(
token="foobar",
url="a_url",
sender=self.test_user,
sender=self.test_user_id.to_string(),
ip_range_whitelist=IPSet(["192.168.0.0/16"]),
)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -138,7 +141,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
request.args[b"access_token"] = [self.test_token]
request.requestHeaders.getRawHeaders = mock_getRawHeaders()
requester = self.get_success(self.auth.get_user_by_req(request))
self.assertEqual(requester.user.to_string(), self.test_user)
self.assertEqual(requester.user, self.test_user_id)
def test_get_user_by_req_appservice_valid_token_bad_ip(self) -> None:
from netaddr import IPSet
@@ -146,7 +149,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
app_service = Mock(
token="foobar",
url="a_url",
sender=self.test_user,
sender=self.test_user_id,
ip_range_whitelist=IPSet(["192.168.0.0/16"]),
)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -176,7 +179,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
self.assertEqual(f.errcode, "M_UNKNOWN_TOKEN")
def test_get_user_by_req_appservice_missing_token(self) -> None:
app_service = Mock(token="foobar", url="a_url", sender=self.test_user)
app_service = Mock(token="foobar", url="a_url", sender=self.test_user_id)
self.store.get_app_service_by_token = Mock(return_value=app_service)
self.store.get_user_by_access_token = AsyncMock(return_value=None)
@@ -191,7 +194,10 @@ class AuthTestCase(unittest.HomeserverTestCase):
def test_get_user_by_req_appservice_valid_token_valid_user_id(self) -> None:
masquerading_user_id = b"@doppelganger:matrix.org"
app_service = Mock(
token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
token="foobar",
url="a_url",
sender=self.test_user_id,
ip_range_whitelist=None,
)
app_service.is_interested_in_user = Mock(return_value=True)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -215,7 +221,10 @@ class AuthTestCase(unittest.HomeserverTestCase):
def test_get_user_by_req_appservice_valid_token_bad_user_id(self) -> None:
masquerading_user_id = b"@doppelganger:matrix.org"
app_service = Mock(
token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
token="foobar",
url="a_url",
sender=self.test_user_id,
ip_range_whitelist=None,
)
app_service.is_interested_in_user = Mock(return_value=False)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -238,7 +247,10 @@ class AuthTestCase(unittest.HomeserverTestCase):
masquerading_user_id = b"@doppelganger:matrix.org"
masquerading_device_id = b"DOPPELDEVICE"
app_service = Mock(
token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
token="foobar",
url="a_url",
sender=self.test_user_id,
ip_range_whitelist=None,
)
app_service.is_interested_in_user = Mock(return_value=True)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -270,7 +282,10 @@ class AuthTestCase(unittest.HomeserverTestCase):
masquerading_user_id = b"@doppelganger:matrix.org"
masquerading_device_id = b"NOT_A_REAL_DEVICE_ID"
app_service = Mock(
token="foobar", url="a_url", sender=self.test_user, ip_range_whitelist=None
token="foobar",
url="a_url",
sender=self.test_user_id,
ip_range_whitelist=None,
)
app_service.is_interested_in_user = Mock(return_value=True)
self.store.get_app_service_by_token = Mock(return_value=app_service)
@@ -436,7 +451,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
namespaces={
"users": [{"regex": "@_appservice.*:sender", "exclusive": True}]
},
sender="@appservice:sender",
sender=UserID.from_string("@appservice:server"),
)
requester = Requester(
user=UserID.from_string("@appservice:server"),
@@ -467,7 +482,7 @@ class AuthTestCase(unittest.HomeserverTestCase):
namespaces={
"users": [{"regex": "@_appservice.*:sender", "exclusive": True}]
},
sender="@appservice:sender",
sender=UserID.from_string("@appservice:server"),
)
requester = Requester(
user=UserID.from_string("@appservice:server"),

View File

@@ -5,7 +5,7 @@ from synapse.appservice import ApplicationService
from synapse.config.ratelimiting import RatelimitSettings
from synapse.module_api import RatelimitOverride
from synapse.module_api.callbacks.ratelimit_callbacks import RatelimitModuleApiCallbacks
from synapse.types import create_requester
from synapse.types import UserID, create_requester
from tests import unittest
@@ -40,7 +40,7 @@ class TestRatelimiter(unittest.HomeserverTestCase):
token="fake_token",
id="foo",
rate_limited=True,
sender="@as:example.com",
sender=UserID.from_string("@as:example.com"),
)
as_requester = create_requester("@user:example.com", app_service=appservice)
@@ -76,7 +76,7 @@ class TestRatelimiter(unittest.HomeserverTestCase):
token="fake_token",
id="foo",
rate_limited=False,
sender="@as:example.com",
sender=UserID.from_string("@as:example.com"),
)
as_requester = create_requester("@user:example.com", app_service=appservice)