Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

integration: speed up dockerized end2end test #3719

Merged
merged 3 commits into from
Apr 20, 2020

Conversation

lukedirtwalker
Copy link
Collaborator

@lukedirtwalker lukedirtwalker commented Apr 20, 2020

The overhead of running a binary in a docker container with
docker-compose exec is around 1 second.

Since our integration tests are serialized and a cartesian product between
all ASes is taken, this overhead easily amounts to multiple minutes.

With this PR, all servers are started in parallel for the end2end test.

All pairs with the same source are executed in on single docker exec
command. And all executions are done in parallel.

To get a progress update, the end2end binary talks through a unix socket
to the integration binary.

We can eventually move the server wait to this RPC framework as well.

With this style of invoking the end2end test, we can reduce the execution
time on CI from >10 minutes (timeout) to a bit more than 1 minute.
Most of the execution time is actually spent in starting the topology,
not in execution the tests.


This change is Reviewable

oncilla and others added 3 commits April 20, 2020 07:23
The overhead of running a binary in a docker container with
docker-compose exec is around 1 second.

Since our integration tests are serialized and a cartesian product between
all ASes is taken, this overhead easily amounts to multiple minutes.

With this PR, all servers are started in parallel for the end2end test.

All pairs with the same source are executed in on single docker exec
command. And all executions are done in parallel.

To get a progress update, the end2end binary talks through a unix socket
to the integration binary.

We can eventually move the server wait to this RPC framework as well.

With this style of invoking the end2end test, we can reduce the execution
time on CI from >10 minutes (timeout) to a bit more than 1 minute.
Most of the execution time is actually spent in starting the topology,
not in execution the tests.
It looks like CI is not capable of handling large parallelism in the dockerized topology.
Until we have time to investigate this, let's just reduce the parallelism to 1 on CI.

Also, increase the timeouts for the integration tests, because it can take quite a bit of time for containerized applications to start with docker-compose.
@lukedirtwalker lukedirtwalker requested a review from oncilla April 20, 2020 05:52
Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewed 11 of 16 files at r1, 6 of 6 files at r2.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved

@lukedirtwalker lukedirtwalker merged commit 3f726cc into scionproto:master Apr 20, 2020
@lukedirtwalker lukedirtwalker deleted the pubintegrationdocker branch April 20, 2020 06:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants