quarta-feira, 4 de julho de 2007

Entendendo, executando e agendando as atualizações do data warehouse do Team Foundation Server

Olá.

Depois de quase um mês sem escrever para o blog, venho trazer uma dica muito boa para quem está trabalhando com o Team Foundation Server.

Após instalarmos o TFS e criar nossos primeiros projetos percebemos que os relatórios exibidos nos portais dos projetos estavam desatualizados.

Antes de prosseguirmos com o artigo, dê uma olhada na figura abaixo. Ela representa como estão estruturados os bancos de dados do TFS bem como sua relação com o warehouse de onde os relatórios do Reporting Service acessam os dados.




Todo relatório do TFS possui em seu cabeçalho a informação “Last Warehouse Update” e percebemos que se iam vários dias sem que o warehouse fosse atualizado.

Após estudar mais a fundo a documentação do TFS descobri que, por padrão, o warehouse deveria ser atualizado automaticamente a cada 3.600 segundos, ou seja, 1 hora.
Para verificar o tempo deste agendamento, consulte a tabela _WarehouseConfig no banco de dados TFSWarehouse em seu servidor SQL Server do Team Foundation Server.
O campo RunIntervalSeconds informa a quantidade de segundos do agendamento.

Exemplo:
select * from _WarehouseConfig

Não aconselho alterar diretamente as tabelas dos bancos de dados do TFS. Caso necessitemos alterar a freqüência de execução da atualização do warehouse podemos fazer isso por meio dos web services expostos pelo TFS.
O web service responsável pelo gerenciamento do warehouse é o
http://localhost:8080/Warehouse/v1.0/warehousecontroller.asmx
e este web service expõe, dentre outros métodos, o método “ChangeSetting”.
Este método possui dois parâmetros: settingID e newValue.
Para alterar o intervalo de atualização do warehouse passe como parâmetros, respectivamente, RunIntervalSeconds e o número de segundos desejado.

Este web service também expõe o método “Run” que pode ser chamado a qualquer momento e não necessita de parâmetros. Ao executar este método as atualizações do warehouse são executadas imediatamente.
Caso você force a as atualizações do warehouse chamando o método “Run”, saiba que não necessariamente você terá seu portal de projetos atualizado imediatamente. Isto ocorre porque, por padrão, os relatórios do TFS no Reporting Service estão configurados para armazenar cache de 30 minutos. Isto quer dizer que, ou você aguarda no máximo mais meia hora para ver os novos dados ou altera as configurações do relatório desejado no Reporting Service.

Porém o problema pode não estar na execução do web method. Você chama o “Run” e tudo é atualizado normalmente só que esta atualização continua não acontecendo no intervalo de segundos configurado.

Este problema pode ser originado por várias razões. Aconselho uma visita a este link:
Troubleshooting the Data Warehouse

Também sugiro uma visita a How to: Use Web Services to Enable and Configure Trace for Team Foundation Server Components que orienta sobre como ativar o trace de um componente do Team Foundation Server.

Porém o nosso problema aqui era outro e não constava dos links que indiquei acima.

Quem realiza a atualização periódica do warehouse é um serviço do TFS chamado TFSServiceScheduler. Este serviço pode ser gerenciado pelo Services na área administrativa do Windows. Seu executável está localizado em <"diretório do TFS">\TFSServerScheduler.

Dentro desta pasta existe também um arquivo de configuração chamado TFSServerScheduler.exe.config. No nosso caso, neste arquivo, existia uma tag de configuração chamada “BisDomainUrl”. Verificando a documentação percebi que esta tag deveria ser trocada por “TFSNameUrl”.

Apensas alterei esta chave e o agendamento começou a funcionar perfeitamente, de acordo com o tempo determinado pelo RunIntervalSeconds.

Por enquanto é só.

Até o próximo post.