Contactar o apoio

Respondemos por e-mail, normalmente em dois dias.

Para prevenir abusos, o Google reCAPTCHA verifica este envio; alguns dados são transmitidos ao Google. O script só é carregado quando abre este formulário.

← Todos os artigos

O que apagar um contador toca na verdade

Apagar um contador aqui esvazia 33 tabelas. Ontem esvaziava 25.

As oito que falhava tinham sido criadas todas no dia anterior, entre as 11:10 da manhã e as 15:10 da tarde.

33 tabelas sabem algo sobre um contador 8 delas não eram esvaziadas — todas criadas no dia anterior essas oito continham 4.840 linhas ao todo acrescentadas hoje, no lugar alfabético, não no fim 25 linhas órfãs encontradas noutras tabelas e removidas

Como funciona a eliminação

O dono pode apagar o seu contador. É preciso um POST, o sinal do dono e o número do contador escrito à mão, porque não há volta atrás. Nada é posto de lado: uma cópia à sombra seria o contrário do que foi pedido, e as ligações de exportação estão por cima do botão para quem quiser uma.

Depois uma lista de tabelas é esvaziada numa única transacção, a tabela principal em último, e uma lápide vai para o arquivo para que o número nunca possa ir para outra pessoa. Se alguma parte falhar, tudo é revertido. Nada apagado é melhor do que meio apagado.

Por cima dessa lista, no ficheiro, está isto:

«Cada tabela que sabe alguma coisa sobre este contador. Como lista e não espalhado pelo código: o que aqui faltar fica como linha órfã, e ninguém repara.»

Descreveu a sua própria falha com um dia de antecedência

Ontem apareceram seis tabelas novas para uma funcionalidade nova — tempo na página, profundidade de deslocamento, páginas de saída — e mais duas. Entre as 11:10 e as 15:10.

A lista de eliminação foi mexida nesse mesmo dia, para acrescentar outra tabela nova. As oito chegaram depois, e a lista não voltou a mexer-se. Assim, desde ontem à tarde, apagar um contador deixava para trás 4.840 linhas de dados de comportamento, espalhadas por oito tabelas, pertencentes a pessoas que tinham pedido para ser esquecidas.

Esta não é uma história de desleixo. Alguém escreveu a lista, percebeu exactamente porque é que era uma lista, deixou escrito o que acontece quando fica para trás — e nesse mesmo dia actualizou-a para uma tabela. E mesmo assim ficou para trás, porque manter duas coisas a par lembrando-se é uma coisa que as pessoas fazem de forma fiável até à tarde em que não fazem.

A correcção, e a outra correcção

Os oito nomes já estão na lista. Foram inseridos no seu lugar alfabético em vez de acrescentados ao fim, porque uma lista ordenada torna uma falha visível e uma lista por acrescento não.

Essa é a correcção pequena. A que interessa é um script que pergunta à base de dados que tabelas levam um número de contador, lê a lista do ficheiro fonte em vez de a repetir, e compara. Quem acrescenta uma tabela corre-o uma vez. Não se pode esquecer como se esquece uma lista, porque não guarda nada — deduz a resposta do esquema de cada vez.

Na primeira execução encontrou mais alguma coisa: 25 linhas em outras oito tabelas cujo número de contador não está nem na tabela viva nem no arquivo. Não são contadores apagados — esses deixam lápide. Números que não pertencem a nada, na maioria números de teste evidentes de antes de existir a verificação do arquivo. Foram escritos num ficheiro fora da raiz web e depois removidos.

Para que é que isto se generaliza

Qualquer lista que tenha de ser mantida a par de outra coisa acabará por sair do passo, e a falha será invisível, porque uma lista a que falta uma entrada tem exactamente o mesmo aspecto de uma completa.

A defesa não é a disciplina. É deduzir um lado do outro e verificar que concordam — e correr essa verificação no momento em que alguém acrescenta a coisa, não no momento em que alguém se interroga.

O comentário por cima da lista tinha razão em tudo excepto numa palavra. Dizia que ninguém repara. Alguém reparou, um dia depois, porque foi ver com um script em vez da memória.

Publicidade