You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Dale Emery (Jira)" <ji...@apache.org> on 2020/09/16 20:50:00 UTC

[jira] [Updated] (GEODE-8404) Simplify port reservation in tests [PERMANENT]

     [ https://issues.apache.org/jira/browse/GEODE-8404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dale Emery updated GEODE-8404:
------------------------------
    Summary: Simplify port reservation in tests [PERMANENT]  (was: Simplify port reservation in tests)

> Simplify port reservation in tests [PERMANENT]
> ----------------------------------------------
>
>                 Key: GEODE-8404
>                 URL: https://issues.apache.org/jira/browse/GEODE-8404
>             Project: Geode
>          Issue Type: Test
>          Components: tests
>            Reporter: Dale Emery
>            Assignee: Dale Emery
>            Priority: Major
>              Labels: GeodeOperationAPI, pull-request-available
>
> {{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)