Seleção de Desligamento Comportamento Inesperado

Uma nova funcionalidade foi adicionada em maio Selective dismissal of New and Unread topics. Recentemente, atualizamos para a versão mais recente do Discourse e, ao analisar o código e os logs do nosso banco de dados, parece que, quando os usuários clicam em “Ignorar Novos” sem selecionar (ou seja, apenas ignorar em massa), enviamos tracked = false e nenhum outro parâmetro na solicitação para reset-new.

image

Ao inspecionar as alterações do PR, acredito que acabamos aqui ao tentar determinar nosso topic_scope FEATURE: Allow selective dismissal of new and unread topics (#12976) · discourse/discourse@7a79bd7 · GitHub

e, como não enviamos nenhum topic_id, pulamos a instrução if e vamos diretamente para a linha 989.

Operamos um servidor Discourse bastante grande e acho que a ideia de ter todos os Tópicos é bastante custosa, pois a consulta basicamente gera:

LEFT JOIN topic_users ON topic_users.topic_id = topics.id AND topic_users.user_id = xxx WHERE "topics"."deleted_at" IS NULL AND "topics"."id" IN (1, ... 1000000) AND (topics.created_at >= 'date') AND (topic_users.last_read_post_number IS NULL) AND (topics.archetype <> 'private_message') ORDER BY topics.created_at DESC LIMIT 500

A cláusula IN, acredito, contém quase todos os tópicos, na faixa de mais de 1 milhão.

Podemos fazer com que a seleção em massa, por padrão, envie apenas os IDs dos tópicos, em vez de padrão para todos os Tópicos possíveis?

@martin Olá, desculpe pela notificação. Parece que você fez o push do commit em questão, vinculado acima.

Haveria alguma chance de você verificar se isso parece ser a causa raiz do que estamos observando? Estamos vendo listas de filtros enormes nas consultas (~um milhão de IDs de tópico) no caso padrão de “dispensar todos os novos”. (nosso fórum hospeda milhares de tópicos do Discourse)

Podemos ajudar com um PR para resolver isso se a equipe do Discourse não tiver prioridade para isso, mas duvido que sejamos os únicos afetados por isso; isso também pode estar impactando o desempenho do banco de dados de alguns dos seus clientes.

Obrigado @forkythetoy e @Hooksmith por trazerem isso à minha atenção. Confirmei que essa é uma consulta enorme, mesmo aqui no Meta. Vou escrever uma correção para isso hoje; deve ser tão simples quanto usar apenas os IDs dos tópicos que aparecem na lista “Novos” para um usuário, em vez de todos os tópicos já existentes. Vou retornar aqui quando tiver o patch.

Eu fundi essa correção hoje: