Skip to content

Commit d39330f

Browse files
author
Samar Pratap Singh
committed
Bug#34741098 component::deinit() will block if calling any registry
update APIs 1. A no_lock version of registry and registry_registration service is implemented which provides the same functionality without taking any lock on the registry. 2. MySQL command service is updated to use either the lock or no_lock version based on the new flag no_lock_registry added in mcs_ext. 3. The no_lock_registry flag is set to true by health monitor query thread before calling MySQL command service APIs (close, connect). Change-Id: I8ebf8f07cffb8ddc4de0f17c48c10cb15be7dad8
1 parent 10678a7 commit d39330f

File tree

12 files changed

+923
-547
lines changed

12 files changed

+923
-547
lines changed

components/libminchassis/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ SET(LIBMINCHASSIS_SOURCES
3333
mysql_component.cc
3434
mysql_service_implementation.cc
3535
registry.cc
36+
registry_no_lock.cc
3637
rwlock_scoped_lock.cc
3738
)
3839

components/libminchassis/minimal_chassis.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
3434
#include "dynamic_loader_scheme_file_imp.h"
3535
#include "minimal_chassis_runtime_error_imp.h"
3636
#include "registry_imp.h"
37+
#include "registry_no_lock_imp.h"
3738

3839
extern SERVICE_TYPE(registry) imp_mysql_minimal_chassis_registry;
3940

@@ -52,10 +53,21 @@ BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis, registry)
5253
mysql_registry_imp::acquire, mysql_registry_imp::acquire_related,
5354
mysql_registry_imp::release END_SERVICE_IMPLEMENTATION();
5455

56+
BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis_no_lock, registry)
57+
mysql_registry_no_lock_imp::acquire,
58+
mysql_registry_no_lock_imp::acquire_related,
59+
mysql_registry_no_lock_imp::release END_SERVICE_IMPLEMENTATION();
60+
5561
BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis, registry_registration)
5662
mysql_registry_imp::register_service, mysql_registry_imp::unregister,
5763
mysql_registry_imp::set_default END_SERVICE_IMPLEMENTATION();
5864

65+
BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis_no_lock,
66+
registry_registration)
67+
mysql_registry_no_lock_imp::register_service,
68+
mysql_registry_no_lock_imp::unregister,
69+
mysql_registry_no_lock_imp::set_default END_SERVICE_IMPLEMENTATION();
70+
5971
BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis, registry_query)
6072
mysql_registry_imp::iterator_create, mysql_registry_imp::iterator_get,
6173
mysql_registry_imp::iterator_next, mysql_registry_imp::iterator_is_valid,
@@ -104,7 +116,9 @@ mysql_runtime_error_imp::emit END_SERVICE_IMPLEMENTATION();
104116

105117
BEGIN_COMPONENT_PROVIDES(mysql_minimal_chassis)
106118
PROVIDES_SERVICE(mysql_minimal_chassis, registry),
119+
PROVIDES_SERVICE(mysql_minimal_chassis_no_lock, registry),
107120
PROVIDES_SERVICE(mysql_minimal_chassis, registry_registration),
121+
PROVIDES_SERVICE(mysql_minimal_chassis_no_lock, registry_registration),
108122
PROVIDES_SERVICE(mysql_minimal_chassis, registry_query),
109123
PROVIDES_SERVICE(mysql_minimal_chassis, registry_metadata_enumerate),
110124
PROVIDES_SERVICE(mysql_minimal_chassis, registry_metadata_query),

0 commit comments

Comments
 (0)