You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

As of July, 2021, Geode's build system no longer executes test worker processes in separate Docker containers.

This means that each test worker JVM and each Java process started by a test executes directly in the environment provided by the host machine. This creates a risk that tests running concurrently might try to bind to the same port.

To reduce this risk, Gradle now assigns each test worker JVM a distinct range of membership ports and a distinct range of non-membership ports. No two concurrently executing tests will have any ports in common. In CI, which runs 24 distributed tests concurrently, each test gets a range of about 400 membership ports and 800 non-membership ports.

In JVMs running the latest version of Geode, `AvailablePort` and `AvailablePortHelper` will choose random ports from these assigned ranges. As a result, no two well-behaved tests will ever try to bind to the same port, no matter how many are running concurrently.

When you write a test, keep the following guidelines in mind, to make sure your test uses only the ranges of ports that Gradle assigned to it:

  • To assign an available port, call `AvailablePortHelper` or `AvailablePort`. These are the only classes that know about the reduced port range for the test.
  • Call `AvailablePort` and `AvailablePortHelper` only in the current version of Geode. Do not call these classes in Child VMs running older versions of Geode. Older versions of Geode do not honor the new, reduced port ranges.
  • Do not launch any service using Geode’s default port for that service. Always explicitly assign an available port. The only safe use of default ports is in a test to verify that a service uses its default port by default.
  • Do not launch any service using a port number hard-coded into the test. Always explicitly assign an available port. There is no safe use of any hard-coded port number in tests that can run concurrently.


  • No labels