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. Cada servidor pode lidar com no máximo um
de uma invocação por vez. outras invocações simultâneas bloquearão ou
fail-fast (consulte --block_for_lock
).
Ao executar bazel
, você executa o cliente. O cliente encontra o servidor
com base na base de saída, que, por padrão, é
determinado pelo caminho do diretório base do espaço de trabalho e seu ID de usuário,
que você criar em 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 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 mtime
s 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.