KISS - Keep it simple, stupid!

Programador, nem sempre é você que está errado!

postado por Fabrício Ferracioli em 19/11/2009 14:51:11

Pois é amigos, quando estamos falando de programação nem sempre você é o cara errado da história.

Digo isso pois acabo de passar por uma situação em que estava certo, mas por não acreditar muito nisso acabei perdendo algum tempo procurando erros inexistentes.

Estava testando uma aplicação e apenas um caso de teste falhava.
Ao verificar o código aparentemente não havia nada errado, e poucos dias atrás o mesmo trecho não apresentava problemas. O que estaria acontecendo?

Teste com 1 falha

Fiquei um bom tempo tentando encontrar algum erro bobo de lógica em um código que eu havia acabado de inserir, mas não encontrava nada. Além disso, o trecho de código que falhava nos testes não tinha relação nenhuma com as alterações que havia feito.

Então pensei que poderia ser uma alteração do CakePHP 1.2.5 que não havia passado para o meu código. Também procurei por isso em vão. Então percebi que o problema estava com uma função que utiliza transações, o que já foi uma fonte de problemas nesse projeto, ou seja, um problema recorrente.

    if($init_transaction){
        $db =& ConnectionManager::getDataSource($this->useDbConfig);
        $db->begin($this);
    }
    foreach( $balloonContents['BalloonContent'] as $index => $content ) {
        $content['balloon_id'] = $balloon_id;
        $this->create($content);
        $save = $this->save();
        $status = $status && $save;
    }
 
    if(!$init_transaction){
        return $status;
    }
    elseif ($status && $db->commit($this)) {
        return true;
    }
    else {
        $db->rollback($this);
        return false;
    }

É um código simples, e não existe nenhum problema com ele. Como eu acabei de instalar o openSuse 11.2, que agora está com o MySQL 5.1 nativo, me lembrei que ele poderia não estar configurado corretamente para usar a storage engine InnoDB. E era exatamente isso! Como o MyISAM fica habilitado por padrão, e essa storage engine não tem suporte total a transações, se você deseja utilizar esse recurso deve dizer ao banco de dados.
Ou seja, meu ambiente estava configurado de modo inconsistente com as necessidades da aplicação. Alterei o arquivo de configuração do MySQL, o my.cnf, adicionando a seguinte opção:

default-storage-engine=InnoDB

Depois disso o teste passou e tudo voltou ao normal.

Testes passando após trocar a storage engine

Portanto rapaziada, em alguns casos não adianta procurar pelos seus erros. Procure se lembrar que qualquer tarefa necessita de subsídios, e no caso de nós programadores, um ambiente bem configurado faz toda diferença.

Alguém já passou por situação semelhante?

Trackback

Faça seu comentário

Topo

Sem comentários

Creative Commons License
Sou Ágil: KISS em http://kiss.souagil.com.br está licenciado sobre
Creative Commons Attribution-Share Alike 2.5 Brazil License.

souÁgil