nickva opened a new pull request, #5831:
URL: https://github.com/apache/couchdb/pull/5831

   A few improvements to the test suite to help it run better in parallel.
   
   The main improvement is to separate the per-app makefile targets early, 
during templating phase, so they never share a common app structure during 
runtime. That lets us avoid reconfiguring the data directory at runtime, which 
effectively is an almost full restart internally since we're tearing down all 
the couch servers. So we're saving an extra app shutdown + restart cycle per 
app with the new scheme and improving the isolation.
   
   The new scheme uses the `tmp/$app` namespace for each app. After the tests 
run any unsuccessful `tmp/$app` directories will be left behind so they can be 
inspected. This is especially useful for looking at the failed couch.log 
entries. There is a separate catlogs target to concatenate failed app couch.log 
files though maybe keeping them separately may be even easier to inspect. Since 
if app a failed, we'd just rather look at app a's logs and not app c's logs.
   
   Since setup_eunit rebar template now takes an app argument, opted to remove 
some older eunit targets keeping only the new ones supporting parallel 
execution. Otherwise, would have to add a special case statement in the plugin 
for no-app vs one app cases.
   
   Previously, `make eunit apps=a,b,c` did not run apps `a`, `b` and `c` as 
separate goals in parallel execution. They were passed in as the `a,b,c` goal. 
To fix that parse the apps into individual space separated goals, so they can
   be sped up by parallel execution as well.
   
   To keep the apps as isolated from each other as possible make 
build_eunit_config also create separate etc folders, use separate BUILDDIR 
macros and each apps only uses its own fixtures. Also use 0-valued ports 
theeunit template to avoid any chance of port collision and resulting flakiness.
   
   Rename SUBDIRS to EUNIT_SUBDIRS since they used for eunit tests currently 
only. Also, exclude docs and fauxton apps from the target list, since they are 
not proper erlang apps and don't have eunit tests.
   
   Newer Erlangs have `file:del_dir_r/1` so use that in cleanup_dirs to save a 
few lines of code.
   
   There are a few other separate commits to update application with a few 
timeouts I noticed when running with higher concurrency. Another is make the 
replicator use its own fixture for attachments and not dip into couch app's 
fixtures folder since those could be setup up or torn down separately and we 
would rather not add intra-target dependencies during parallel runs.
   
   Let's try running with `failfast=false` for a bit in Jenkins since it might 
make it easier to debug failures. Once things settle, or if we see a lot of 
backlog from failing (doomed run) we can switch back.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to