Implementação do cliente/servidor

Informar um problema Mostrar fonte Por noite · 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 realizar 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 criar para o próximo. Isso melhora a velocidade de builds incrementais e permite comandos diferentes, como build e query, para compartilhar o mesmo cache de os 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 espaço de trabalho e seu ID de usuário. Portanto, se você criar em vários espaços de trabalho, você terá várias bases de saída e, portanto, vários processos do servidor Bazel. Vários usuários na mesma estação de trabalho podem compilar simultaneamente na mesma espaço de trabalho porque suas bases de saída serão diferentes (IDs de usuário diferentes).

Se o cliente não encontrar uma instância do servidor em execução, uma nova será iniciada. Ela faz isso verificando se a base de saída já existe, o que implica o blaze arquivo já foi descompactado. Caso contrário, se a base de saída não existir, o cliente descompacta os arquivos e define o mtime para a data de nove anos no futuro. Após a instalação, o cliente confirma que os mtimes do arquivos descompactados são iguais à data distante para garantir que não haja adulteração da instalação ocorreu.

O processo do servidor será interrompido após um período de inatividade (por padrão, três horas que pode ser modificado usando a opção de inicialização --max_idle_secs). Para a maioria de que há um servidor em execução é invisível para o usuário, mas mas, às vezes, é bom ter isso em mente. Por exemplo, se você executa scripts que executam muitos builds automatizados em diretórios diferentes, é importante para evitar o acúmulo de muitos servidores inativos, é possível fazer isso desativá-los explicitamente quando terminar de usá-los ou especificando um curto período de tempo limite.

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-base do 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=...

Isso torna mais fácil descobrir qual processo do servidor pertence a um espaço de trabalho. Esteja ciente de que, com algumas outras opções para ps, servidor Bazel processos podem ter o nome apenas java. Os servidores do Bazel podem ser interrompidos usando a shutdown.

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