BazelCon 2022 findet vom 16. bis 17. November in New York und online statt.
Jetzt anmelden

Client-/Server-Implementierung

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Das Bazel-System ist als langlebiger Serverprozess implementiert. Dies ermöglicht viele Optimierungen, die mit einer Batch-orientierten Implementierung nicht möglich sind, z. B. das Caching von BUILD-Dateien, Abhängigkeitsdiagrammen und anderen Metadaten von einem Build zum nächsten. Dies erhöht die Geschwindigkeit inkrementeller Builds und ermöglicht es verschiedenen Befehlen wie build und query, denselben Cache von geladenen Paketen zu teilen, wodurch Abfragen sehr schnell werden.

Wenn Sie bazel ausführen, wird der Client ausgeführt. Der Client findet den Server anhand der Ausgabebasis, die standardmäßig durch den Pfad des Basisarbeitsverzeichnisses und Ihre Nutzer-ID bestimmt wird. Wenn Sie also in mehreren Arbeitsbereichen erstellen, haben Sie mehrere Ausgabebasen und somit mehrere Bazel-Server-Prozesse. Mehrere Nutzer auf derselben Workstation können gleichzeitig im selben Arbeitsbereich erstellen, da sich ihre Ausgabebasen (unterschiedliche User-IDs) unterscheiden. Wenn der Client keine laufende Serverinstanz finden kann, wird eine neue gestartet. Der Serverprozess wird nach einer bestimmten Zeit der Inaktivität beendet (standardmäßig 3 Stunden). Dies kann mit der Startoption --max_idle_secs geändert werden.

In den meisten Fällen ist die Tatsache, dass ein Server ausgeführt wird, für den Nutzer unsichtbar. Manchmal kann es jedoch hilfreich sein, dies zu berücksichtigen. Wenn Sie beispielsweise Skripts ausführen, die viele automatisierte Builds in verschiedenen Verzeichnissen ausführen, sollten Sie darauf achten, dass Sie nur wenige inaktive Server sammeln. Dazu können Sie sie explizit herunterfahren, wenn Sie sie nicht mehr benötigen, oder ein kurzes Zeitlimit festlegen.

Der Name eines Bazel-Server-Prozesses wird in der Ausgabe von ps x oder ps -e f als bazel(dirname) angezeigt, wobei dirname der Basisname des Verzeichnisses ist, das den Stammverzeichnis Ihres Arbeitsbereichs. Beispiel:

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

So können Sie leichter feststellen, welcher Serverprozess zu einem bestimmten Arbeitsbereich gehört. (Beachten Sie, dass Bazel-Serverprozesse mit bestimmten anderen Optionen für ps nur java genannt werden können.) Bazel-Server können mit dem Befehl Shutdown beendet werden.

Wenn bazel ausgeführt wird, überprüft der Client zuerst, ob der Server die richtige Version ist. Ist dies nicht der Fall, wird der Server gestoppt und ein neuer gestartet. Dadurch wird die Verwendung der Versionsverwaltung mit langer Ausführungszeit nicht beeinträchtigt.