92731b6b4a
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: d446fccf5a8c568b37dc8748621c8a5c546fe135
55 lines
1.4 KiB
Bash
Executable File
55 lines
1.4 KiB
Bash
Executable File
#! /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
|