diff --git a/CHANGES.rst b/CHANGES.rst
index 6659c6671a..6c85241eaf 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,3 +1,12 @@
+Changes in synapse v0.20.0 (2017-04-11)
+=======================================
+
+Bug fixes:
+
+* Fix joining rooms over federation where not all servers in the room saw the
+ new server had joined (PR #2094)
+
+
Changes in synapse v0.20.0-rc1 (2017-03-30)
===========================================
diff --git a/synapse/__init__.py b/synapse/__init__.py
index 580927abf4..2e5f4e0ead 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -16,4 +16,4 @@
""" This is a reference implementation of a Matrix home server.
"""
-__version__ = "0.20.0-rc1"
+__version__ = "0.20.0"
diff --git a/synapse/config/registration.py b/synapse/config/registration.py
index 87e500c97a..f7e03c4cde 100644
--- a/synapse/config/registration.py
+++ b/synapse/config/registration.py
@@ -69,6 +69,7 @@ class RegistrationConfig(Config):
trusted_third_party_id_servers:
- matrix.org
- vector.im
+ - riot.im
""" % locals()
def add_arguments(self, parser):
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 6ed5ce9e10..2d9126dd86 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -1097,15 +1097,15 @@ class FederationHandler(BaseHandler):
user_id,
"leave"
)
- signed_event = self._sign_event(event)
+ event = self._sign_event(event)
except SynapseError:
raise
except CodeMessageException as e:
logger.warn("Failed to reject invite: %s", e)
raise SynapseError(500, "Failed to reject invite")
- # Try the host we successfully got a response to /make_join/
- # request first.
+ # Try the host that we succesfully called /make_leave/ on first for
+ # the /send_leave/ request.
try:
target_hosts.remove(origin)
target_hosts.insert(0, origin)
@@ -1115,7 +1115,7 @@ class FederationHandler(BaseHandler):
try:
yield self.replication_layer.send_leave(
target_hosts,
- signed_event
+ event
)
except SynapseError:
raise
diff --git a/synapse/storage/client_ips.py b/synapse/storage/client_ips.py
index 71e5ea112f..b01f0046e9 100644
--- a/synapse/storage/client_ips.py
+++ b/synapse/storage/client_ips.py
@@ -120,6 +120,9 @@ class ClientIpStore(background_updates.BackgroundUpdateStore):
where_clauses.append("(user_id = ? AND device_id = ?)")
bindings.extend((user_id, device_id))
+ if not where_clauses:
+ return []
+
inner_select = (
"SELECT MAX(last_seen) mls, user_id, device_id FROM user_ips "
"WHERE %(where)s "
|