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.