[ https://issues.apache.org/jira/browse/GEODE-8404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dale Emery reassigned GEODE-8404: --------------------------------- Assignee: (was: Dale Emery) > Simplify port reservation in tests > ---------------------------------- > > Key: GEODE-8404 > URL: https://issues.apache.org/jira/browse/GEODE-8404 > Project: Geode > Issue Type: Test > Components: tests > Reporter: Dale Emery > Priority: Major > Labels: GeodeOperationAPI, pull-request-available > Fix For: 1.14.0 > > > {{AvailablePort}}, {{AvailablePortHelper}}, and {{UniquePortSupplier}} > implement a variety of complex mechanisms to reserve ports for use in the > product and in tests. > This complexity is unnecessary in cases where the chosen port need not be > restricted to a specified range. Most of the ports allocated for tests have > no such range restrictions, and so can rely on the OS to allocate available > ports simply, directly, and efficiently. > In particular: > {{AvailablePort}} implements two methods to reserve only those ports that are > a multiple of a given modulus. These methods are implemented badly, so that > each call can render many ports unavailable before finding one that satisfies > the constraints. These methods are not used in Geode or in tests, so I will > remove them rather than fixing them. > {{AvailablePortHelper}} (used only in tests) attempts to reduce the number of > unavailable ports it tests by partitioning the available ports among VMS, and > by storing state in a global static variable. In almost all cases, this > mechanism can be replaced by letting the OS choose available ports. > {{UniquePortSupplier}} (used only in tests) remembers every port it allocates > and will not allocate the same port twice. This mechanism has the fatal > limitation that uniqueness is guaranteed only among uses of the same > {{UniquePortSupplier}} instance. This mechanism can be replaced by letting > the OS choose available ports. > {{AvailablePort.Keeper}} retains a port reservation until the caller is ready > to bind to the port. {{Keeper}}'s use within {{AvailablePort}} is > unnecessary. Its use in tests is limited to only a few instances. I will try > to make those instances unnecessary. If it turns out that some tests require > holding onto a reservation beyond its "natural" ({{TIME_WAIT}}) duration, I > will move {{Keeper}} to into the {{geode-junit}} module, near (or inside) > {{AvailablePortHelper}}. > Once this complexity is reduced to its necessary minimum, I will refactor > these classes (safely, with additional tests to cover currently untested > features) to remove duplication and make the remaining code clearer. -- This message was sent by Atlassian Jira (v8.3.4#803005)