From a3321162766a77d9a14530954f0b4294beb743bd Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Wed, 30 Jan 2019 17:32:33 +0000 Subject: [PATCH 1/5] cleanups for contrib/prometheus/README --- contrib/prometheus/{README => README.md} | 7 +++++++ 1 file changed, 7 insertions(+) rename contrib/prometheus/{README => README.md} (96%) diff --git a/contrib/prometheus/README b/contrib/prometheus/README.md similarity index 96% rename from contrib/prometheus/README rename to contrib/prometheus/README.md index 7b733172e..e646cb7ea 100644 --- a/contrib/prometheus/README +++ b/contrib/prometheus/README.md @@ -6,8 +6,10 @@ To use it, first install prometheus by following the instructions at http://prometheus.io/ ### for Prometheus v1 + Add a new job to the main prometheus.conf file: +```yaml job: { name: "synapse" @@ -15,10 +17,12 @@ Add a new job to the main prometheus.conf file: target: "http://SERVER.LOCATION.HERE:PORT/_synapse/metrics" } } +``` ### for Prometheus v2 Add a new job to the main prometheus.yml file: +```yaml - job_name: "synapse" metrics_path: "/_synapse/metrics" # when endpoint uses https: @@ -26,11 +30,14 @@ Add a new job to the main prometheus.yml file: static_configs: - targets: ['SERVER.LOCATION:PORT'] +``` To use `synapse.rules` add +```yaml rule_files: - "/PATH/TO/synapse-v2.rules" +``` Metrics are disabled by default when running synapse; they must be enabled with the 'enable-metrics' option, either in the synapse config file or as a From 35f544410a63759d0867cad9d6e0e02309e6bf5e Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Thu, 31 Jan 2019 10:29:15 +0000 Subject: [PATCH 2/5] update debian installation instructions (#4526) * update debian installation instructions * docs PR is docs --- README.rst | 36 +++++++++++++++++++++++++++++++----- changelog.d/4526.doc | 1 + 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 changelog.d/4526.doc diff --git a/README.rst b/README.rst index 05a3bb375..e6354ccba 100644 --- a/README.rst +++ b/README.rst @@ -333,12 +333,38 @@ https://developer.github.com/changes/2014-04-25-user-content-security for more d Platform-Specific Instructions ============================== -Debian ------- +Debian/Ubuntu +------------- -Matrix provides official Debian packages via apt from https://matrix.org/packages/debian/. -Note that these packages do not include a client - choose one from -https://matrix.org/docs/projects/try-matrix-now.html (or build your own with one of our SDKs :) +Matrix.org packages +~~~~~~~~~~~~~~~~~~~ + +Matrix.org provides Debian/Ubuntu packages of the latest stable version of +Synapse via https://matrix.org/packages/debian/. To use them:: + + sudo apt install -y lsb-release curl apt-transport-https + echo "deb https://matrix.org/packages/debian `lsb_release -cs` main" | + sudo tee /etc/apt/sources.list.d/matrix-org.list + curl "https://matrix.org/packages/debian/repo-key.asc" | + sudo apt-key add - + sudo apt update + sudo apt install matrix-synapse-py3 + +Downstream Debian/Ubuntu packages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For ``buster`` and ``sid``, Synapse is available in the Debian repositories and +it should be possible to install it with simply:: + + sudo apt install matrix-synapse + +There is also a version of ``matrix-synapse`` in ``stretch-backports``. Please +see the `Debian documentation on backports +`_ for information on how to use +them. + +We do not recommend using the packages in downstream Ubuntu at this time, as +they are old and suffer from known security vulnerabilities. Fedora ------ diff --git a/changelog.d/4526.doc b/changelog.d/4526.doc new file mode 100644 index 000000000..b7536e25f --- /dev/null +++ b/changelog.d/4526.doc @@ -0,0 +1 @@ +Update debian installation instructions From e707e7b38d67240451d0818c1508bee900952bb0 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Thu, 31 Jan 2019 15:34:17 +0000 Subject: [PATCH 3/5] Fix infinite loop when an event is redacted in a v3 room (#4535) --- changelog.d/4535.bugfix | 1 + synapse/storage/events_worker.py | 37 +++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 changelog.d/4535.bugfix diff --git a/changelog.d/4535.bugfix b/changelog.d/4535.bugfix new file mode 100644 index 000000000..facd344cd --- /dev/null +++ b/changelog.d/4535.bugfix @@ -0,0 +1 @@ +Fix infinite loop when an event is redacted in a v3 room diff --git a/synapse/storage/events_worker.py b/synapse/storage/events_worker.py index 57dae324c..1716be529 100644 --- a/synapse/storage/events_worker.py +++ b/synapse/storage/events_worker.py @@ -161,6 +161,12 @@ class EventsWorkerStore(SQLBaseStore): log_ctx = LoggingContext.current_context() log_ctx.record_event_fetch(len(missing_events_ids)) + # Note that _enqueue_events is also responsible for turning db rows + # into FrozenEvents (via _get_event_from_row), which involves seeing if + # the events have been redacted, and if so pulling the redaction event out + # of the database to check it. + # + # _enqueue_events is a bit of a rubbish name but naming is hard. missing_events = yield self._enqueue_events( missing_events_ids, allow_rejected=allow_rejected, @@ -179,14 +185,35 @@ class EventsWorkerStore(SQLBaseStore): # instead. if not allow_rejected and entry.event.type == EventTypes.Redaction: if entry.event.internal_metadata.need_to_check_redaction(): - orig = yield self.get_event( - entry.event.redacts, + # XXX: we need to avoid calling get_event here. + # + # The problem is that we end up at this point when an event + # which has been redacted is pulled out of the database by + # _enqueue_events, because _enqueue_events needs to check the + # redaction before it can cache the redacted event. So obviously, + # calling get_event to get the redacted event out of the database + # gives us an infinite loop. + # + # For now (quick hack to fix during 0.99 release cycle), we just + # go and fetch the relevant row from the db, but it would be nice + # to think about how we can cache this rather than hit the db + # every time we access a redaction event. + # + # One thought on how to do this: + # 1. split _get_events up so that it is divided into (a) get the + # rawish event from the db/cache, (b) do the redaction/rejection + # filtering + # 2. have _get_event_from_row just call the first half of that + + orig_sender = yield self._simple_select_one_onecol( + table="events", + keyvalues={"event_id": entry.event.redacts}, + retcol="sender", allow_none=True, - allow_rejected=True, - get_prev_content=False, ) + expected_domain = get_domain_from_id(entry.event.sender) - if orig and get_domain_from_id(orig.sender) == expected_domain: + if orig_sender and get_domain_from_id(orig_sender) == expected_domain: # This redaction event is allowed. Mark as not needing a # recheck. entry.event.internal_metadata.recheck_redaction = False From 07dfe148de2fbc6eb22be662ed8216a6e11f6811 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Thu, 31 Jan 2019 18:30:40 +0000 Subject: [PATCH 4/5] Add some debug for membership syncing issues (#4538) I can't figure out what's going on with #4422 and #4436; perhaps this will help. --- changelog.d/4538.misc | 1 + synapse/handlers/sync.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 changelog.d/4538.misc diff --git a/changelog.d/4538.misc b/changelog.d/4538.misc new file mode 100644 index 000000000..dbc878b09 --- /dev/null +++ b/changelog.d/4538.misc @@ -0,0 +1 @@ +Add some debug for membership syncing issues diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py index 28857bfc1..bd97241ab 100644 --- a/synapse/handlers/sync.py +++ b/synapse/handlers/sync.py @@ -895,14 +895,17 @@ class SyncHandler(object): Returns: Deferred(SyncResult) """ - logger.info("Calculating sync response for %r", sync_config.user) - # NB: The now_token gets changed by some of the generate_sync_* methods, # this is due to some of the underlying streams not supporting the ability # to query up to a given point. # Always use the `now_token` in `SyncResultBuilder` now_token = yield self.event_sources.get_current_token() + logger.info( + "Calculating sync response for %r between %s and %s", + sync_config.user, since_token, now_token, + ) + user_id = sync_config.user.to_string() app_service = self.store.get_app_service_by_user_id(user_id) if app_service: @@ -1390,6 +1393,12 @@ class SyncHandler(object): room_entries = [] invited = [] for room_id, events in iteritems(mem_change_events_by_room_id): + logger.info( + "Membership changes in %s: [%s]", + room_id, + ", ".join(("%s (%s)" % (e.event_id, e.membership) for e in events)), + ) + non_joins = [e for e in events if e.membership != Membership.JOIN] has_join = len(non_joins) != len(events) From 85129d7068203c7fa1dfd5f68b6f6b412a5c7bd2 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 31 Jan 2019 18:35:38 +0000 Subject: [PATCH 5/5] v0.99.0rc3 --- CHANGES.md | 21 +++++++++++++++++++++ changelog.d/4526.doc | 1 - changelog.d/4535.bugfix | 1 - changelog.d/4538.misc | 1 - synapse/__init__.py | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) delete mode 100644 changelog.d/4526.doc delete mode 100644 changelog.d/4535.bugfix delete mode 100644 changelog.d/4538.misc diff --git a/CHANGES.md b/CHANGES.md index e08b8771b..458bbaf11 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,24 @@ +Synapse 0.99.0rc3 (2019-01-31) +============================== + +Bugfixes +-------- + +- Fix infinite loop when an event is redacted in a v3 room ([\#4535](https://github.com/matrix-org/synapse/issues/4535)) + + +Improved Documentation +---------------------- + +- Update debian installation instructions ([\#4526](https://github.com/matrix-org/synapse/issues/4526)) + + +Internal Changes +---------------- + +- Add some debug for membership syncing issues ([\#4538](https://github.com/matrix-org/synapse/issues/4538)) + + Synapse 0.99.0rc2 (2019-01-30) ============================== diff --git a/changelog.d/4526.doc b/changelog.d/4526.doc deleted file mode 100644 index b7536e25f..000000000 --- a/changelog.d/4526.doc +++ /dev/null @@ -1 +0,0 @@ -Update debian installation instructions diff --git a/changelog.d/4535.bugfix b/changelog.d/4535.bugfix deleted file mode 100644 index facd344cd..000000000 --- a/changelog.d/4535.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix infinite loop when an event is redacted in a v3 room diff --git a/changelog.d/4538.misc b/changelog.d/4538.misc deleted file mode 100644 index dbc878b09..000000000 --- a/changelog.d/4538.misc +++ /dev/null @@ -1 +0,0 @@ -Add some debug for membership syncing issues diff --git a/synapse/__init__.py b/synapse/__init__.py index 5da59aa92..e5f680bb3 100644 --- a/synapse/__init__.py +++ b/synapse/__init__.py @@ -27,4 +27,4 @@ try: except ImportError: pass -__version__ = "0.99.0rc2" +__version__ = "0.99.0rc3"