Sunday, July 25, 2010

A bug can undermine your troubleshooting / Como um bug pode minar a resolução de problemas

This article will be written in English and Portuguese.
Este artigo será escrito em Inglês e Português.

English version:

A few articles ago I tried to lecture on how to do a good troubleshooting. And I wrote that it all starts with an error or a bad behavior. When we have an error we should start from there. If we don't have it, it's harder.... But what about the situations when we have an error that says:

"No error message available"

Not good... I faced a situation on a customer where this happened. It's a Web application written in ASP using the windows driver (OleDB) and running on IIS. After an engine restart they started having an error that says:

No error message available, result code: E_UNEXPECTED(0x8000FFFF)
ErrorCode -2147418113

So, we had an error, but it wasn't really helpful. It wasn't too hard to find out what happened, since this particular engine has some variables to avoid problems with code set conversions and it was started without those variables in the environment. But It would have been quicker to understand if we had a proper error code. So, after solving the main issue, I dig in to the subject and found a very interesting APAR:

IC64220: THREADED OLEDB DOES NOT RETURN THE CORRECT ERROR MESSAGE

Basically, the driver was doing a bad use of the MS API to expose errors and in some situations the error structures were not properly initialized. This caused the "No error message available" information.
The fix is in CSDK 3.50.xC5 and if nothing else, this would be a good reason to upgrade.
It was not the first time I had "weird errors" in Windows environment, and in fact there were other similar bugs reported. So I leave here the suggestion to upgrade. Obviously, like with any other upgrade, test, test, test....

Portuguese version:

Há alguns artigos atrás eu dei um "sermão" sobre como fazer um bom despiste de problemas. E escrevi que tudo deve começar com um erro ou com um mau comportamento. Quando temos um erro devemos começar por aí. Se não tivermos é mais dificíl.... Mas e se tivermos um erro que diz:

"No error message available"

Nada bom... Encontrei uma situação num cliente onde isto apareceu. É uma aplicação Web escrita em ASP utilizando os drivers Windows (OleDB) a correr em IIS. Após uma paragem de um motor, começaram a ter o seguinte erro:

No error message available, result code: E_UNEXPECTED(0x8000FFFF)
ErrorCode -2147418113

Portanto, tinhamos um erro, mas não era grande ajuda. Não foi muito difícil descobrir o que se tinha passado, dado que este motor em particular tem algumas variáveis posicionadas para evitar problemas na conversão de caracteres entre diferentes mapas ou codesets, e estas variáveis não estavam posicionadas quando se arrancou com o motor. Mas teria sido mais rápido de entender se tivéssemos tido um código e mensagem de erro válidos. Assim, após resolver o problema principal, investiguei um pouco mais e encontrei o seguinte APAR:


IC64220: THREADED OLEDB DOES NOT RETURN THE CORRECT ERROR MESSAGE

Basicamente, o driver estava a fazer uma utilização errada da API da MS para expor erros, e em determinadas situações as estruturas de erro não eram devidamente inicializadas. Isto causava a mensagem "No error message available"

A correcção está no CSDK 3.50.xC5, e mesmo só por isto já seria uma boa razão para fazer a actualização.
Não foi a primeira vez que me deparei com erros "estranhos" no ambiente Windows, e na verdade havia outros bugs semelhantes reportados. Assim, deixo a sugestão para se fazer a actualização. Claro que em qualquer situação de actulização de versões, a ordem é testar, testar, testar....

No comments:

Post a Comment