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 não consegue encontrar uma instância do servidor em execução, ele inicia uma nova. O servidor do processo será interrompido após um período de inatividade (por padrão, três horas, que pode ser modificada usando a opção de inicialização --max_idle_secs).

Na maioria das vezes, o fato de haver um servidor em execução é invisível para o mas, às vezes, é útil ter isso em mente. Por exemplo, se você estiver executar scripts que executam muitos builds automatizados em diretórios diferentes, é importante não acumular muitos servidores inativos. você pode fazer isso ao desligá-los explicitamente quando terminar de usá-los, ou especificando 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-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.