Major CircleCI/Linux fixes / tweaks / enhancements (#7078)
Summary: Primarily, this change adds a way to work around a bug limiting the effective output (and therefore debugability) of the Linux builds using parallel make. We would get make[1]: write error: stdout probably due to a kernel bug, apparently affecting both available ubuntu 16 machine images (maybe not affecting docker images, less horsepower). https://bugs.launchpad.net/ubuntu/+source/linux-signed/+bug/1814393 Now in the CircleCI config, make output on Ubuntu is piped through a custom 'cat' that ignores EAGAIN errors, which seems to fix the problem. Significant other changes: * Add another linux build that combines * LIB_MODE=shared, to ensure this works with compile and unit test execution * Alternative rocksdb namespace, to ensure this works (not rely on Travis) * ASSERT_STATUS_CHECKED=1, but with building all unit tests and running those expected to pass with it * Run release build with and without gflags. (Was running only without, ignore large swaths of code in a normal release build! Two regressions in this build, only with gflags, in the last week not caught by CI!) * Use gflags with unity and LITE build, as typical case. Debugability improvements: * Use V=1 to show commands being executed (thanks to EAGAIN work-around) * Print kernel version and compiler versions as part of V=1 output from Makefile Cosmetic other changes: * Put more commands on one line, for less clutter in CircleCI output pages * Remove redundant "all" in "make all check" and put make command options before targets * Change some recursive "make clean" into dependency on "clean," toward minimizing unnecessary overhead (detect platform, build version, etc.) of extra recursive makes Pull Request resolved: https://github.com/facebook/rocksdb/pull/7078 Reviewed By: siying Differential Revision: D22391647 Pulled By: pdillinger fbshipit-source-id: d446fccf5a8c568b37dc8748621c8a5c546fe135main
parent
a693341604
commit
92731b6b4a
@ -0,0 +1,54 @@ |
||||
#! /bin/bash |
||||
|
||||
# Work around issue with parallel make output causing random error, as in |
||||
# make[1]: write error: stdout |
||||
# Probably due to a kernel bug: |
||||
# https://bugs.launchpad.net/ubuntu/+source/linux-signed/+bug/1814393 |
||||
# Seems to affect image ubuntu-1604:201903-01 and ubuntu-1604:202004-01 |
||||
|
||||
cd "$(dirname $0)" |
||||
|
||||
if [ ! -x cat_ignore_eagain.out ]; then |
||||
cc -x c -o cat_ignore_eagain.out - << EOF |
||||
#include <unistd.h> |
||||
#include <errno.h> |
||||
#include <stdio.h> |
||||
int main() { |
||||
int n, m, p; |
||||
char buf[1024]; |
||||
for (;;) { |
||||
n = read(STDIN_FILENO, buf, 1024); |
||||
if (n > 0 && n <= 1024) { |
||||
for (m = 0; m < n;) { |
||||
p = write(STDOUT_FILENO, buf + m, n - m); |
||||
if (p < 0) { |
||||
if (errno == EAGAIN) { |
||||
// ignore but pause a bit |
||||
usleep(100); |
||||
} else { |
||||
perror("write failed"); |
||||
return 42; |
||||
} |
||||
} else { |
||||
m += p; |
||||
} |
||||
} |
||||
} else if (n < 0) { |
||||
if (errno == EAGAIN) { |
||||
// ignore but pause a bit |
||||
usleep(100); |
||||
} else { |
||||
// Some non-ignorable error |
||||
perror("read failed"); |
||||
return 43; |
||||
} |
||||
} else { |
||||
// EOF |
||||
return 0; |
||||
} |
||||
} |
||||
} |
||||
EOF |
||||
fi |
||||
|
||||
exec ./cat_ignore_eagain.out |
Loading…
Reference in new issue