O sistema Bazel é implementado como um processo de servidor de longa duração. Isso permite
a realização de muitas otimizações que não são possíveis com uma implementação orientada a lotes,
como o 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 dos 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ê está executando 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, consequentemente, vários processos do servidor 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 são diferentes (diferentes userids). Se o
cliente não encontrar uma instância de servidor em execução, ele vai iniciar uma nova. O processo do servidor
é interrompido após um período de inatividade (3 horas, por padrão, que pode
ser modificado usando a opção de inicialização --max_idle_secs
).
Na maioria das vezes, o fato de que há um servidor em execução é invisível para o usuário, mas às vezes é útil lembrar disso. Por exemplo, se você estiver executando scripts que realizam muitos builds automáticos em diretórios diferentes, é importante garantir que não haja muitos servidores ociosos. Para isso, desligue-os explicitamente quando terminar de usá-los ou especifique um período de 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=...
Isso facilita a descoberta de qual processo do servidor pertence a um determinado
espaço de trabalho. 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ão adequado.