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 2021/12/02 17:41:00 UTC

[jira] [Resolved] (GEODE-9824) AvailablePortHelper configures itself poorly in a test JVM

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

Dale Emery resolved GEODE-9824.
-------------------------------
    Fix Version/s: 1.15.0
       Resolution: Fixed

> AvailablePortHelper configures itself poorly in a test JVM
> ----------------------------------------------------------
>
>                 Key: GEODE-9824
>                 URL: https://issues.apache.org/jira/browse/GEODE-9824
>             Project: Geode
>          Issue Type: Bug
>          Components: tests
>    Affects Versions: 1.15.0
>            Reporter: Dale Emery
>            Assignee: Dale Emery
>            Priority: Major
>              Labels: GeodeOperationAPI, pull-request-available
>             Fix For: 1.15.0
>
>
> In the test JVM, `AvailablePortHelper` initializes its "next port to check" to a randomly selected port. That randomly selected port might be one of the ones that a child VM will check early.
> Here's a problematic sequence of events:
>  # In the test JVM, `AvailablePortHelper` learns that the range of ports available to it is (say) 23750–24166. It randomly selects one of those as its "next port to check." Let's suppose it randomly picks 23854 as its starting port.
>  # The test starts vm0. In vm0 `AvailablePortHelper` initializes its "next port to check" by computing it based on its VM number. For the given available port range (23750–24166), vm0 will *always* start at 23854.
>  # At this point, both the test JVM and child vm0 have the exact same "next port to check." Trouble is looming.
>  # The test requests a port in the test JVM, and gets the randomly selected one: 23854. It doesn't bind to this port yet. Later it will try to start a server on this port in vm1. Trouble is fast approaching.
>  # The test invokes `AvailablePortHelper` in vm0, and gets vm0's starting port: 23854. The test then starts a server, which binds to that port.
>  # At this point, the test JVM thinks it has reserved the port, but vm0 has bound to it. Trouble is imminent.
>  # The test tries to start a server in vm1, using the port it believes it reserved. Trouble has arrived. The operation fails because the port is already in use.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)