aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2016-05-24 11:16:30 +0000
committerGravatar Yue Gan <yueg@google.com>2016-05-24 11:58:34 +0000
commitcf34cf9454e372926f36d4e669ac0d8d4ff77294 (patch)
treec2d9c37463249ade5337bbca03dc647b397d8f0b /src
parent34d4e6f1bbe80e8b0d42caddc22b5b941a3efeb1 (diff)
workers: When a WorkerFactory is instantiated, first remove old worker logs that belong to a prior running Bazel server.
-- MOS_MIGRATED_REVID=123092141
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java11
-rwxr-xr-xsrc/test/shell/bazel/bazel_worker_test.sh28
2 files changed, 38 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
index e16bd383c2..ef429461a3 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
@@ -59,7 +59,16 @@ public class WorkerModule extends BlazeModule {
if (workerFactory == null) {
Path logDir = env.getOutputBase().getRelative("worker-logs");
try {
- logDir.createDirectory();
+ if (!logDir.createDirectory()) {
+ // Clean out old log files.
+ for (Path logFile : logDir.getDirectoryEntries()) {
+ try {
+ logFile.delete();
+ } catch (IOException e) {
+ env.getReporter().handle(Event.error("Could not delete old worker log: " + logFile));
+ }
+ }
+ }
} catch (IOException e) {
env
.getReporter()
diff --git a/src/test/shell/bazel/bazel_worker_test.sh b/src/test/shell/bazel/bazel_worker_test.sh
index 38f768d3e9..36ff8dfead 100755
--- a/src/test/shell/bazel/bazel_worker_test.sh
+++ b/src/test/shell/bazel/bazel_worker_test.sh
@@ -394,4 +394,32 @@ EOF
expect_log "Build completed, shutting down worker pool..."
}
+function test_logs_are_deleted_on_server_restart() {
+ prepare_example_worker
+ cat >>BUILD <<'EOF'
+[work(
+ name = "hello_world_%s" % idx,
+ worker = ":worker",
+ args = ["--write_uuid", "--write_counter"],
+) for idx in range(10)]
+EOF
+
+ bazel build -s --worker_verbose --strategy=Work=worker --worker_max_instances=1 --worker_quit_after_build :hello_world_1 &> $TEST_log \
+ || fail "build failed"
+
+ expect_log "Created new Work worker (id [0-9]\+)"
+
+ worker_log=$(egrep -o -- 'logging to .*/worker-logs/.*' "$TEST_log" | sed 's/^logging to //')
+
+ [ -e "$worker_log" ] \
+ || fail "Worker log was not found"
+
+ # Running a build after a server shutdown should trigger the removal of old worker log files.
+ bazel shutdown &> $TEST_log
+ bazel build &> $TEST_log
+
+ [ ! -e "$worker_log" ] \
+ || fail "Worker log was not deleted"
+}
+
run_suite "Worker integration tests"