'Creates an associatin between  a room alias and room_id/servers
Args:
room_alias (RoomAlias)
room_id (str)
servers (list)
creator (str): Optional user_id of creator.
Returns:
Deferred'

@defer.inlineCallbacks
def create_room_alias_association(self, room_alias, room_id, servers, creator=None):

    def alias_txn(txn):
        self._simple_insert_txn(txn, 'room_aliases', {'room_alias': room_alias.to_string(), 'room_id': room_id, 'creator': creator})
        self._simple_insert_many_txn(txn, table='room_alias_servers', values=[{'room_alias': room_alias.to_string(), 'server': server} for server in servers])
        self._invalidate_cache_and_stream(txn, self.get_aliases_for_room, (room_id,))
    try:
        ret = (yield self.runInteraction('create_room_alias_association', alias_txn))
    except self.database_engine.module.IntegrityError:
        raise SynapseError(409, ('Room    alias    %s    already    exists' % room_alias.to_string()))
    defer.returnValue(ret)
