We could skip this test when coverage is active?
Or even better, we could allow 3 or 4 stderr lines when coverage is active?
This is a critical bug, because it's a CI failure. But it doesn't fail all the time. Maybe we should turn off CI caching on coverage builds, or exclude coverage records from the CI cache?
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related.
Learn more.
Here are the full logs, I'm going to restart the job to clear the error:
slow/crypto/fuzz_donna/ed25519_donna: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/crypto/fuzz_donna/ed25519_ref10: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/process/callbacks: profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108 FAIL src/test/test_process_slow.c:241: assert(smartlist_len(process_data->stderr_data) OP_EQ 3): 4 vs 3 [callbacks FAILED]slow/process/callbacks_terminate: profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_genpareto: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_geometric: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_uniform: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_logistic: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_log_logistic: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OKslow/prob_distr/stochastic_weibull: [forking] profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108OK1/20 TESTS FAILED. (0 skipped)profiling:/home/travis/build/torproject/tor/src/trunnel/src_trunnel_libor_trunnel_testing_a-socks5.gcda:Merge mismatch for function 108
I'm not sure if I read the output correctly, but does this error condition mean that the test binaries (and the child-process binary) output "Merge mismatch for function X" on standard error?
We can detect that line in stderr's first line if we want to in the process tests, but I don't think that would be the right solution. Can we either fail in an earlier way when this condition appears OR figure out a way to reset the state so these "Merge mismatch" disappear?
I'm not sure if I read the output correctly, but does this error condition mean that the test binaries (and the child-process binary) output "Merge mismatch for function X" on standard error?
We can detect that line in stderr's first line if we want to in the process tests, but I don't think that would be the right solution. Can we either fail in an earlier way when this condition appears OR figure out a way to reset the state so these "Merge mismatch" disappear?
Let's try deleting the cached coverage files before building?
Or let's delete the coverage files after a coverage run, so they don't take up space in the cache?
I think it would make the most sense to delete the coverage files so they don't take up space in the cache rather than deleting them from the cache before we (maybe?) update them. It seems like these files should never be cached, right?
I think it would make the most sense to delete the coverage files so they don't take up space in the cache rather than deleting them from the cache before we (maybe?) update them. It seems like these files should never be cached, right?
It doesn't make sense to cache the files, and it's probably a bad thing: coverage can change when unrelated modules change.
If we delete the files before caching, they'll disappear from the cache after the first build on each branch. So the initial build, and old branches, might still have this bug. I think that's ok?
Please rebase on maint-0.2.9: we need to fix the process test failure on master, but we also need reliable coverage stats on 0.2.9 and later. And we want smaller caches on all branches to speed up the build.
change make reset-gcov so it deletes ".gcov" files
so we don't accidentally use stale files if the coverage command fails
it also makes the cache smaller
I still think we should change reset-gcov so it deletes the .gcov files. They aren't any good in the cache, and they will hide some kinds of coverage build/execution failures. What do you think?
catalyst, can you review my extra commits on #29036 (moved), and my extra commits on #29962 (moved)?
(You've already reviewed ahf's commits on #29036 (moved), and I reviewed rl1987's commits on #29962 (moved).)
Thanks! These look good.
Sorry, I think we need a different target name for this new "reset-gcov" semantics, if that's what we're going for. In the current semantics, running 'reset-gcov' after a test run resets the coverage, but doesn't stop you from running "make check" again. But if we change it to remove the gcno files too, that will means that you need to do a full "make clean" and "make" before you can run the tests for coverage again.
Sorry, I think we need a different target name for this new "reset-gcov" semantics, if that's what we're going for. In the current semantics, running 'reset-gcov' after a test run resets the coverage, but doesn't stop you from running "make check" again. But if we change it to remove the gcno files too, that will means that you need to do a full "make clean" and "make" before you can run the tests for coverage again.
I think I understand better now:
we MUST NOT delete gcno files, because they are created when the code is compiled
we MUST delete gcda files to remove the warning (and make our coverage accurate)
we MAY delete gcov files, because they take up space in the cache (and leaving old files around might make our coverage inaccurate)
I'll amend that commit to delete gcda and gcov files, but leave gcno files.