Estava eu, feliz e contente usando meu servidor LDAP quando descobri que vários usuários não tinham o / no final do caminho até seu maildir. O courier-mta não se importava com isso e entregava naturalmente as mensagens nos maildirs, o postfix se importa, ele usa o / no final do path para decidir se deve entregar em mailbox ou maildir, resultado, após a migracão 2800 dos meus usuários não estavam recebendo e-mails.
Como havia colocado o postfix para fazer soft_bounce – ou seja, manter as mensagens no spool para nova tentativa de entrega, mesmo as que dariam erro fatal – isso não seria um problema, bastaria corrigir os 2800 usuários e na próxima execucão da fila as mensagens chegariam. (até o momento apenas 1% desses usuários tinham sofrido com o problema, a maioria ainda nem tinha se dado conta)
Fiz então um dump do ldap para um ldif e com um pouco de perl montei um arquivo ldif contendo todas as instrucões para modificar os 2800 usuários… eis que, 500 usuários depois o sistema para de responder. tento novamente, retirando os usuários que tinham sido modificados com sucesso do arquivo e nada… uso o slapcat para fazer um novo dump e ver se havia algum estrago… nada, fazia o dump de alguns usuários e travava. Buscas variavam de muito lentas a eternas… o backend bdb havia sido corrompido.
Pesquisando na internet descobri que o backend bdb, apesar de muito mais consistente (HAH!) e eficiente, permitindo alteracões em paralelo (ldbm usa lock global e as operacões são serializadas) precisa ser muito bem afinado para se obter o máximo de integridade. Como meu volume no LDAP é essencialmente consultas, não havia grande vantagem em migrar para BDB, então decidi recriar minha base em LDBM e depois estudar o caso do BDB com calma e descobrir o que aconteceu. Recriado em LDBM, apliquei o mesmo arquivo de modificacões e tudo transcorreu perfeitamene.
Fica aqui o recado, se alguém quiser usar bdb, estudem bem os manuais do backend, e sempre facam um backup com slapcat antes de aplicar modificacões em massa a uma base ldap, se algo der errado pode ser muito difícil voltar atrás se você não tiver um backup textual íntegro e atual. E eu não falo de corrupcão de banco, porque isso foi a excecão, a regra geralmente é orelhada mesmo. Proteja-se de suas orelhas, sempre.
Comente de volta!