mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 03:23:54 +01:00
Merge branch 'master' into develop
This commit is contained in:
commit
dc96943d51
5 changed files with 98 additions and 16 deletions
11
CHANGES.md
11
CHANGES.md
|
@ -1,3 +1,14 @@
|
||||||
|
Synapse 1.7.3 (2019-12-31)
|
||||||
|
==========================
|
||||||
|
|
||||||
|
This release fixes a long-standing bug in the state resolution algorithm.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix exceptions caused by state resolution choking on malformed events. ([\#6608](https://github.com/matrix-org/synapse/issues/6608))
|
||||||
|
|
||||||
|
|
||||||
Synapse 1.7.2 (2019-12-20)
|
Synapse 1.7.2 (2019-12-20)
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -1,3 +1,9 @@
|
||||||
|
matrix-synapse-py3 (1.7.3) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.7.3.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 31 Dec 2019 10:45:04 +0000
|
||||||
|
|
||||||
matrix-synapse-py3 (1.7.2) stable; urgency=medium
|
matrix-synapse-py3 (1.7.2) stable; urgency=medium
|
||||||
|
|
||||||
* New synapse release 1.7.2.
|
* New synapse release 1.7.2.
|
||||||
|
|
43
docs/sample_log_config.yaml
Normal file
43
docs/sample_log_config.yaml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Example log config file for synapse.
|
||||||
|
#
|
||||||
|
# This is a YAML file containing a standard Python logging configuration
|
||||||
|
# dictionary. See [1] for details on the valid settings.
|
||||||
|
#
|
||||||
|
# [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema
|
||||||
|
|
||||||
|
version: 1
|
||||||
|
|
||||||
|
formatters:
|
||||||
|
precise:
|
||||||
|
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
||||||
|
|
||||||
|
filters:
|
||||||
|
context:
|
||||||
|
(): synapse.logging.context.LoggingContextFilter
|
||||||
|
request: ""
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
file:
|
||||||
|
class: logging.handlers.RotatingFileHandler
|
||||||
|
formatter: precise
|
||||||
|
filename: /home/rav/work/synapse/homeserver.log
|
||||||
|
maxBytes: 104857600
|
||||||
|
backupCount: 10
|
||||||
|
filters: [context]
|
||||||
|
encoding: utf8
|
||||||
|
console:
|
||||||
|
class: logging.StreamHandler
|
||||||
|
formatter: precise
|
||||||
|
filters: [context]
|
||||||
|
|
||||||
|
loggers:
|
||||||
|
synapse.storage.SQL:
|
||||||
|
# beware: increasing this to DEBUG will make synapse log sensitive
|
||||||
|
# information such as access tokens.
|
||||||
|
level: INFO
|
||||||
|
|
||||||
|
root:
|
||||||
|
level: INFO
|
||||||
|
handlers: [file, console]
|
||||||
|
|
||||||
|
disable_existing_loggers: false
|
|
@ -36,7 +36,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
__version__ = "1.7.2"
|
__version__ = "1.7.3"
|
||||||
|
|
||||||
if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
|
if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
|
||||||
# We import here so that we don't have to install a bunch of deps when
|
# We import here so that we don't have to install a bunch of deps when
|
||||||
|
|
|
@ -183,16 +183,20 @@ def _get_power_level_for_sender(room_id, event_id, event_map, state_res_store):
|
||||||
|
|
||||||
pl = None
|
pl = None
|
||||||
for aid in event.auth_event_ids():
|
for aid in event.auth_event_ids():
|
||||||
aev = yield _get_event(room_id, aid, event_map, state_res_store)
|
aev = yield _get_event(
|
||||||
if (aev.type, aev.state_key) == (EventTypes.PowerLevels, ""):
|
room_id, aid, event_map, state_res_store, allow_none=True
|
||||||
|
)
|
||||||
|
if aev and (aev.type, aev.state_key) == (EventTypes.PowerLevels, ""):
|
||||||
pl = aev
|
pl = aev
|
||||||
break
|
break
|
||||||
|
|
||||||
if pl is None:
|
if pl is None:
|
||||||
# Couldn't find power level. Check if they're the creator of the room
|
# Couldn't find power level. Check if they're the creator of the room
|
||||||
for aid in event.auth_event_ids():
|
for aid in event.auth_event_ids():
|
||||||
aev = yield _get_event(room_id, aid, event_map, state_res_store)
|
aev = yield _get_event(
|
||||||
if (aev.type, aev.state_key) == (EventTypes.Create, ""):
|
room_id, aid, event_map, state_res_store, allow_none=True
|
||||||
|
)
|
||||||
|
if aev and (aev.type, aev.state_key) == (EventTypes.Create, ""):
|
||||||
if aev.content.get("creator") == event.sender:
|
if aev.content.get("creator") == event.sender:
|
||||||
return 100
|
return 100
|
||||||
break
|
break
|
||||||
|
@ -403,10 +407,17 @@ def _iterative_auth_checks(
|
||||||
|
|
||||||
auth_events = {}
|
auth_events = {}
|
||||||
for aid in event.auth_event_ids():
|
for aid in event.auth_event_ids():
|
||||||
ev = yield _get_event(room_id, aid, event_map, state_res_store)
|
ev = yield _get_event(
|
||||||
|
room_id, aid, event_map, state_res_store, allow_none=True
|
||||||
|
)
|
||||||
|
|
||||||
if ev.rejected_reason is None:
|
if not ev:
|
||||||
auth_events[(ev.type, ev.state_key)] = ev
|
logger.warning(
|
||||||
|
"auth_event id %s for event %s is missing", aid, event_id
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if ev.rejected_reason is None:
|
||||||
|
auth_events[(ev.type, ev.state_key)] = ev
|
||||||
|
|
||||||
for key in event_auth.auth_types_for_event(event):
|
for key in event_auth.auth_types_for_event(event):
|
||||||
if key in resolved_state:
|
if key in resolved_state:
|
||||||
|
@ -457,8 +468,10 @@ def _mainline_sort(
|
||||||
auth_events = pl_ev.auth_event_ids()
|
auth_events = pl_ev.auth_event_ids()
|
||||||
pl = None
|
pl = None
|
||||||
for aid in auth_events:
|
for aid in auth_events:
|
||||||
ev = yield _get_event(room_id, aid, event_map, state_res_store)
|
ev = yield _get_event(
|
||||||
if (ev.type, ev.state_key) == (EventTypes.PowerLevels, ""):
|
room_id, aid, event_map, state_res_store, allow_none=True
|
||||||
|
)
|
||||||
|
if ev and (ev.type, ev.state_key) == (EventTypes.PowerLevels, ""):
|
||||||
pl = aid
|
pl = aid
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -506,8 +519,10 @@ def _get_mainline_depth_for_event(event, mainline_map, event_map, state_res_stor
|
||||||
event = None
|
event = None
|
||||||
|
|
||||||
for aid in auth_events:
|
for aid in auth_events:
|
||||||
aev = yield _get_event(room_id, aid, event_map, state_res_store)
|
aev = yield _get_event(
|
||||||
if (aev.type, aev.state_key) == (EventTypes.PowerLevels, ""):
|
room_id, aid, event_map, state_res_store, allow_none=True
|
||||||
|
)
|
||||||
|
if aev and (aev.type, aev.state_key) == (EventTypes.PowerLevels, ""):
|
||||||
event = aev
|
event = aev
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -516,7 +531,7 @@ def _get_mainline_depth_for_event(event, mainline_map, event_map, state_res_stor
|
||||||
|
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _get_event(room_id, event_id, event_map, state_res_store):
|
def _get_event(room_id, event_id, event_map, state_res_store, allow_none=False):
|
||||||
"""Helper function to look up event in event_map, falling back to looking
|
"""Helper function to look up event in event_map, falling back to looking
|
||||||
it up in the store
|
it up in the store
|
||||||
|
|
||||||
|
@ -525,15 +540,22 @@ def _get_event(room_id, event_id, event_map, state_res_store):
|
||||||
event_id (str)
|
event_id (str)
|
||||||
event_map (dict[str,FrozenEvent])
|
event_map (dict[str,FrozenEvent])
|
||||||
state_res_store (StateResolutionStore)
|
state_res_store (StateResolutionStore)
|
||||||
|
allow_none (bool): if the event is not found, return None rather than raising
|
||||||
|
an exception
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Deferred[FrozenEvent]
|
Deferred[Optional[FrozenEvent]]
|
||||||
"""
|
"""
|
||||||
if event_id not in event_map:
|
if event_id not in event_map:
|
||||||
events = yield state_res_store.get_events([event_id], allow_rejected=True)
|
events = yield state_res_store.get_events([event_id], allow_rejected=True)
|
||||||
event_map.update(events)
|
event_map.update(events)
|
||||||
event = event_map[event_id]
|
event = event_map.get(event_id)
|
||||||
assert event is not None
|
|
||||||
|
if event is None:
|
||||||
|
if allow_none:
|
||||||
|
return None
|
||||||
|
raise Exception("Unknown event %s" % (event_id,))
|
||||||
|
|
||||||
if event.room_id != room_id:
|
if event.room_id != room_id:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
"In state res for room %s, event %s is in %s"
|
"In state res for room %s, event %s is in %s"
|
||||||
|
|
Loading…
Reference in a new issue