Build Update for apache/geode-native
-------------------------------------

Build: #2790
Status: Broken

Duration: 1 min and 47 secs
Commit: 72455cd (develop)
Author: Mario Salazar de Torres
Message: GEODE-8553: Fix inter-locks in ThinClientLocator (#660)

 - ThinClientLocatorHelper uses a mutex called m_locatorLock, which is
   used in the entire scope of all the public member functions for this
   class.
 - Problem with that is all of those functions perform some network
   communication and in the event of networking issues, this will result
   in having all the application threads inter-locked.
 - Also, the only purpose of this mutex is to avoid that the locators
   list is read while it's being updated.
 - Given all of the above, the class has been refactored, so every time
   the locators list has to be accessed, a copy of it is created, being
   that copy created only while owning the mutex.
 - And for the case of the update, a new locators list is composed and
   its only at the end of the update function where the mutex is locked
   and the locators list swapped by the new one.
 - This whole change ensures that the time the mutex is in use is
   minimal while the functionality remains intact.
 - Refactored ConnectionWrapper so is move constructible.
 - Locators list is now initialized using iterator range constructor.
 - Added getConnRetries utility function.
 - Changed mutex for a shared mutex.
 - getLocators function now returns a shuffled list each time.
 - Cleaned-up repeated code. As a result of this createConnection has been
   refactored and a new function called sendRequest has been created.
 - Implemented proposal for locator connections retries, treating the locators
   list as a circular buffer.
 - Added new integration test to verify that threads don't inter-lock anymore.
 - The test works as follow:
   * Set 5s connect-timeout.
   * Deploy 1 locator.
   * Add 1 non-existent locator to the pool.
   * Send 64 concurrent requests to get the server list.
   * By probability if there are no interlocks ~50%+-E% of the requests should
     have completed in a brief period of time.
   * Note that E% is the error allowance percentage, which is set to 10%.
   * Therefore a 10 seconds timeout is set in order to reach the request
     completed treshold.
   * Test passes if the number of completed requests before the timeout was
     greater or equal to the thresholds, otherwise it fails.

View the changeset: 
https://github.com/apache/geode-native/compare/a771a1ec215c...72455cd0811b

View the full build log and details: 
https://travis-ci.com/github/apache/geode-native/builds/202227263?utm_medium=notification&utm_source=email


--

You can unsubscribe from build emails from the apache/geode-native repository 
going to 
https://travis-ci.com/account/preferences/unsubscribe?repository=16807653&utm_medium=notification&utm_source=email.
Or unsubscribe from *all* email updating your settings at 
https://travis-ci.com/account/preferences/unsubscribe?utm_medium=notification&utm_source=email.
Or configure specific recipients for build notifications in your .travis.yml 
file. See https://docs.travis-ci.com/user/notifications.

Reply via email to