@defer.inlineCallbacks
    def remove_tag_from_room(self, user_id, room_id, tag):
        def remove_tag_txn(txn, next_id):
            sql = (
                "DELETE FROM room_tags "
                " WHERE user_id = ? AND room_id = ? AND tag = ?"
            )
            txn.execute(sql, (user_id, room_id, tag))
            self._update_revision_txn(txn, user_id, room_id, next_id)

        with self._account_data_id_gen.get_next() as next_id:
            yield self.runInteraction("remove_tag", remove_tag_txn, next_id)

        self.get_tags_for_user.invalidate((user_id,))

        result = self._account_data_id_gen.get_max_token()
        defer.returnValue(result)
Used by actor to test if writing a token is possible. Returns a boolean.
dataset/ETHPy150Open matrix-org/synapse/synapse/storage/tags.py/TagsStore.remove_tag_from_room--crossover with--dataset/ETHPy150Open EricssonResearch/calvin-base/calvin/actor/actorport.py/OutPort.can_write