Corrupção de dados do usuário na migração phpBB3 para WP/Discourse

Ocasionalmente e aparentemente logo após uma importação recente de dados de usuários do nosso antigo site baseado em phpBB3, estamos vendo um problema onde alguns dados de usuários ficam corrompidos com os dados de outro usuário durante a sincronização do WP para o Discourse. Isso não acontece com frequência e não é repetível sob demanda, o que infelizmente levou nossa equipe de desenvolvimento a descartá-lo em grande parte como um problema.

No primeiro caso, uma de minhas contas de usuário de teste foi removida como parte de uma importação recente de dados, mas o avatar desse usuário de teste foi então atribuído ao perfil de outro usuário e eu estava logado como esse usuário assim que a importação foi concluída.

Em um segundo caso, registrei um usuário de teste no WP e, quando a sincronização com o Discourse ocorreu, esse usuário de teste assumiu o nome de usuário de um usuário existente no Discourse e alguns de seus dados de perfil e grupo personalizados. Veja a captura de tela…

Em ambos esses casos, usuários duplicados no Discourse estiveram envolvidos na corrupção da conta do usuário de teste. Ex: agmolnar e agmolnar1 e tbm960c e tbm960c1

Tivemos um número desses usuários duplicados, que imagino que a maioria tenha vindo de usuários anônimos no arquivo de dados importado do phpBB3.

Alguém já viu algo semelhante antes ou tem alguma dica sobre qual pode ser o problema aqui? Valeria a pena nossa equipe limpar o arquivo de importação do phpBB3 de usuários anônimos antes de fazer uma nova importação?

Obrigado por quaisquer sugestões.

Olá Ryan,

Você pode dar uma olhada nesses arquivos e ver se consegue encontrar alguma informação útil:

Também:

E:

Talvez você possa modificar esta parte para não importar usuários anônimos, ou encontrar alguma pista que leve ao seu problema estranho.

Obrigado Coin-coin. Se removermos os usuários anônimos do arquivo de dados do usuário antes de importar, presumo que todas as postagens anônimas serão atribuídas ao usuário ‘system’, como já são. Existe algum motivo que eu possa não estar ciente para manter os usuários anônimos de nossa instância phpBB no arquivo de importação?

Estou reunindo informações a partir disso e de outros tópicos, como…

O problema para nós parece estar relacionado aos usuários anônimos, que são essencialmente usuários duplicados que não existem no WP, uma nova importação para o WP que altera a estrutura dos IDs de usuário do WP, mas não os IDs do Discourse, eliminando usuários de teste recém-criados no WP, e o fato de que o Discourse tenta associar usuários primeiro pelo ID externo do WP.

Quando fazemos uma nova importação, ela remove alguns usuários de teste do WP do banco de dados. Os IDs de usuário de alguns usuários anônimos do phpBB que procurei parecem ter os IDs de usuário inteiros mais altos no Discourse (4505, 4506, etc.). Portanto, parece que quando executamos uma nova importação e excluímos contas de teste no WP, um usuário recém-criado no WP é sincronizado pelo ID antigo do usuário antigo agora inexistente.

Ao forçar os usuários a serem correspondidos por e-mail em vez de ID externo durante a nova importação, conforme descrito na postagem nº 5 vinculada acima, devemos precaver a possibilidade de qualquer fusão indesejada de usuários antigos e novos.

Isso tudo parece razoável?
Obrigado

Um problema com isso é que a atribuição de postagens a usuários exclusivos será perdida, então será difícil seguir uma conversa onde todas as postagens parecem vir de um único usuário system - você não poderá distinguir participantes distintos uns dos outros.

Exatamente; conceitualmente, você poderia deixar as coisas como estão e usar manualmente a interface do perfil do usuário administrador para mesclar usuários que deveriam ser os mesmos, OU você poderia simplesmente enviar e-mails como ID externo em vez disso, como você sugere, o que permitirá que novos logins sejam conectados a uma conta existente com um endereço de e-mail correspondente.

Este último é claramente o caminho de menor resistência :+1:

@kiefferr Notei alguns detalhes nas imagens que você incluiu e os removi caso você não quisesse compartilhá-los. Sinta-se à vontade para reenviar as imagens, se necessário. :slight_smile: :+1:

1 curtida

Você está dizendo que está executando as comunidades discourse e phpbb3 ao mesmo tempo e importando periodicamente dados do phpbb3 novamente?

É o que parece neste momento, já que o desenvolvimento do nosso novo site WP/Discourse se arrasta, mas não, o Discourse ainda está em desenvolvimento. Estamos substituindo um site personalizado que foi construído em torno do phpbb3.

Fizemos uma importação inicial e depois decidimos fazer outra importação de teste antes de uma importação final antes da migração. Fico feliz que tenhamos feito isso, porque não gostaria de estar corrigindo esses bugs em um site ativo.

1 curtida

Olá pessoal, tenho um acompanhamento se vocês puderem ser tão gentis. Compartilhei as descobertas acima com a equipe de desenvolvimento sobre forçar os usuários a serem correspondidos por e-mail em vez de IDs externos durante a importação/migração final antes de entrarmos no ar, bem como a exclusão de registros SSO para que possam ser propagados de forma limpa.

Mas eles agora parecem pensar que houve algo errado com os dados originais de exportação do phpBB3, especificamente que existem usuários duplicados/anônimos nesses dados, bem como alguns usuários do phpBB sem e-mails associados. Tudo isso parece ser algo que o Discourse deveria ser capaz de lidar em termos de importação de dados do phpBB3. Estou errado? Especialmente em relação a como o Discourse atribui nomes de usuário fictícios a usuários anônimos, este é um procedimento operacional padrão.

Se precisarmos obter dados mais limpos de nossa instalação atual do phpBB3, provavelmente poderemos fazer isso. Mas não parece que precisamos ou deveríamos mexer nos dados do phpBB. Esse não foi realmente o problema.

Realizamos uma nova instalação do Discourse e importamos com sucesso os dados do phpBB.

Aqui estão nossas descobertas:
A tabela “…_users” contém um total de 3270 registros.
Ao baixar os usuários importados do Discourse, observamos que há 3251 usuários no Discourse.
Durante nossa análise, descobrimos que vários usuários têm um “1” anexado em seus nomes de usuário do Discourse, que na verdade se originaram de seus nomes de usuário nos dados do phpBB. Apenas um usuário específico é “redacted_username1”, que não existe nos dados do phpBB. No entanto, o usuário “redacted_username” está presente nos dados do phpBB.

O e-mail associado ao nome de usuário do Discourse “edacted_username1” é “anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid”. Isso sugere que o nome de usuário “redacted_username” já estava em uso por um usuário anônimo, que então adicionou “1” ao seu nome de usuário.

Para evitar tais ocorrências em importações futuras, precisamos obter dados novos que excluam usuários anônimos e outros usuários indesejados.

A discrepância na contagem de usuários entre phpBB e Discourse é de 19. Dentro dos dados do phpBB, há 53 usuários que não possuem um e-mail associado às suas contas.

Ao pesquisar por usuários “anônimos” no Discourse, ele retorna 32 usuários com e-mails anônimos que estão atualmente suspensos. Os nomes de usuário atribuídos a esses usuários anônimos não podem ser encontrados nos dados do phpBB. Isso implica que o Discourse está atribuindo nomes de usuário fictícios a usuários anônimos, o que pode potencialmente causar erros futuros.

Em resumo, 19 usuários sem e-mail não foram importados, enquanto 32 usuários foram sincronizados como e-mails anônimos com nomes de usuário fabricados.

Por favor, compartilhe dados limpos do PHPBB para que possamos importá-los.

Além disso, se você tiver alguma opinião sobre isso, por favor nos diga.

A menos que você vá excluir esses usuários do banco de dados, eu modificaria o script para ignorar esses usuários. Obter um dump parcial provavelmente não será facilmente repetível.

Se você puder simplesmente excluir esses usuários do site atual, isso parece uma boa solução. Minha preferência em situações como a sua é ler o banco de dados ao vivo diretamente, em vez de transferir repetidamente um dump.

1 curtida