Implementação do cliente/servidor

7.3 · 7.2 · 7.1 · 7.0 · 6.5

O sistema Bazel é implementado como um processo de servidor de longa duração. Isso permite que ele realize muitas otimizações que não são possíveis com uma implementação orientada por lote, como armazenamento em cache de arquivos BUILD, gráficos de dependência e outros metadados de um build para o próximo. Isso melhora a velocidade de builds incrementais e permite que comandos diferentes, como build e query, compartilhem o mesmo cache de pacotes carregados, tornando as consultas muito rápidas.

Ao executar bazel, você executa o cliente. O cliente encontra o servidor com base na base de saída, que, por padrão, é determinada pelo caminho do diretório do espaço de trabalho base e pelo seu ID de usuário. Portanto, se você criar vários espaços de trabalho, terá várias bases de saída e, portanto, vários processos de servidor do Bazel. Vários usuários na mesma estação de trabalho podem criar simultaneamente no mesmo espaço de trabalho porque as bases de saída deles serão diferentes (IDs de usuário distintos). Se o cliente não encontrar uma instância de servidor em execução, ele vai iniciar uma nova. O processo do servidor será interrompido após um período de inatividade (o padrão é de três horas, que pode ser modificado com a opção de inicialização --max_idle_secs).

Na maioria das vezes, o fato de um servidor estar em execução é invisível para o usuário, mas às vezes é útil ter isso em mente. Por exemplo, se você estiver executando scripts que executam muitas versões automatizadas em diretórios diferentes, é importante garantir que não acumule muitos servidores inativos. Para fazer isso, encerre-os explicitamente quando terminar de usá-los ou especifique um tempo limite curto.

O nome de um processo do servidor do Bazel aparece na saída de ps x ou ps -e f como bazel(dirname), em que dirname é o nome básico do diretório que contém a raiz do diretório do espaço de trabalho. Exemplo:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

Assim, fica mais fácil descobrir qual processo do servidor pertence a um determinado espaço de trabalho. Esteja ciente de que, com algumas outras opções para ps, os processos do servidor do Bazel podem ser nomeados apenas como java. Os servidores do Bazel podem ser interrompidos usando o comando shutdown.

Ao executar bazel, o cliente primeiro verifica se o servidor é a versão adequada. Caso contrário, o servidor é interrompido e um novo é iniciado. Isso garante que o uso de um processo de servidor de longa duração não interfira no controle de versões adequado.