Implementación del cliente o servidor

Informar un problema . Ver fuente . Por la noche · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

El sistema Bazel se implementa como un proceso de servidor de larga duración. Esto le permite muchas optimizaciones que no son posibles con una implementación por lotes como el almacenamiento en caché de archivos BUILD, gráficos de dependencia y otros metadatos de uno construir para el siguiente. Esto mejora la velocidad de las compilaciones incrementales y permite comandos diferentes, como build y query, para compartir la misma caché de paquetes cargados, lo que hace que las consultas sean muy rápidas. Cada servidor puede administrar como máximo uno invocación a la vez; más invocaciones simultáneas bloquearán o falla-rápido (consulta --block_for_lock).

Cuando ejecutas bazel, ejecutas el cliente. El cliente encuentra el servidor según la base de salida, que, de forma predeterminada, es determinados por la ruta del directorio base del lugar de trabajo y tu ID de usuario, así que si Si compilas en múltiples lugares de trabajo, tendrás múltiples bases de salida y, por lo tanto, múltiples procesos de servidores de Bazel. Varios usuarios en la misma estación de trabajo pueden compilar de forma simultánea en el mismo espacio de trabajo, ya que sus bases de salida serán diferentes. (diferentes ID de usuario).

Si el cliente no puede encontrar una instancia de servidor en ejecución, inicia una nueva. Integra lo hace comprobando si la base de salida ya existe, lo que implica que ya se desempaquetaron. De lo contrario, si la base de salida no existe, el cliente descomprime los archivos del archivo y establece sus mtime en una fecha de 9 años. en el futuro. Una vez instalada, el cliente confirma que los mtime de la los archivos descomprimidos son iguales a la fecha lejana para garantizar que no se manipule la instalación el problema.

El proceso del servidor se detendrá tras un período de inactividad (3 horas, de forma predeterminada, que se puede modificar con la opción de inicio --max_idle_secs). Para la mayoría el hecho de que haya un servidor en ejecución es invisible para el usuario, a veces, es útil tener esto en mente. Por ejemplo, si ejecutas secuencias de comandos que realizan muchas compilaciones automáticas en diferentes directorios, es importante para asegurarse de no acumular muchos servidores inactivos. puedes hacerlo cerrándolos explícitamente cuando hayas terminado con ellos o especificando un tiempo de espera corto.

El nombre de un proceso del servidor de Bazel aparece en el resultado de ps x o ps -e f. como bazel(dirname), donde dirname es el nombre base del que contiene la raíz del directorio de tu lugar de trabajo. Por ejemplo:

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

Esto hace que sea más fácil averiguar qué proceso del servidor pertenece a un determinado Workspace. Ten en cuenta que con algunas otras opciones para ps, el servidor Bazel pueden llamarse únicamente java). Los servidores de Bazel pueden dejar de usar el shutdown.

Cuando se ejecuta bazel, el cliente primero verifica que el servidor sea el adecuado versión; De lo contrario, el servidor se detiene y se inicia uno nuevo. Esto garantiza que el uso de un proceso de servidor de larga duración no interfiere en el y el control de versiones.