Recuperar um tópico longo que foi excluído

Em nossos fóruns, tínhamos um tópico longo com mais de 300 posts envolvendo um cliente comercial de desenvolvimento web e, por algum motivo, todo aquele tópico desapareceu há alguns dias após movermos alguns posts para outro tópico.

Verifiquei o log de atividade do usuário e o registro não continha nenhuma entrada indicando que aquele tópico agora “ausente” tenha sido excluído ou editado. A única ação registrada foi a movimentação de alguns posts (cerca de 10) para um novo tópico.

Hoje, verifiquei o banco de dados do Discourse e descobri que todos os 306 posts estavam lá, mas ao verificar o topic_id nesses 306 posts, o tópico com aquele ID estava vazio [].

Digamos que o registro do tópico ausente tivesse o topic_id “300000” nos registros dos posts.

Quando executei o seguinte no console, estes foram os resultados:

> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306

Restaurar todos esses 306 posts para um novo tópico; criei um tópico “falso” (placeholder) na interface do Discourse e depois alterei todos os topic_ids dos posts “órfãos” para o novo ID do tópico placeholder, da seguinte forma:

Digamos que o novo tópico criado (o tópico falso) tenha o ID: 304000, então:

Post.where(topic_id: 300000).update_all(topic_id: 304000)

Isso funcionou e restaurou todos os 306 posts para o novo ID do tópico placeholder/falso.

Em seguida, simplesmente editei o título do novo tópico e tudo parece estar bem; e como não tínhamos nenhum link para aquele tópico longo e privado, não havia preocupação em quebrar links com um novo ID de tópico, então tudo está resolvido.

Não faço ideia do motivo pelo qual o registro do tópico estava vazio e todos os posts com aquele ID de tópico estavam intactos. Os registros e logs não mostram nenhuma ação (exclusão, edição) naquele tópico. A única ação naquele tópico foi mover alguns posts para um novo tópico, mas isso não deveria ter “anulado” o registro do tópico.

Como não posso repetir isso (e não tenho certeza do que aconteceu), não reportei isso como um “bug”; em vez disso, apenas esperei até ter tempo hoje, fiz algumas investigações e descobri que os 306 posts perderam seu tópico pai “alguém”; mas essa técnica os restaurou todos.

Se eu quisesse preservar o ID original do tópico, teria tentado restaurar o registro original do tópico, mas isso parece ser um pouco mais trabalhoso; então, simplesmente atribuí os 306 posts “sem tópico” a um novo tópico, e os resultados foram, como esperado:

> Post.where(topic_id:304000).count
> 307

Espero que isso ajude qualquer pessoa que possa encontrar uma situação semelhante no futuro.

2 curtidas