Skip to content

Commit

Permalink
Bug#34741098 component::deinit() will block if calling any registry
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Samar Pratap Singh committed Oct 16, 2023
1 parent 10678a7 commit d39330f
Show file tree
Hide file tree
Showing 12 changed files with 923 additions and 547 deletions.
1 change: 1 addition & 0 deletions components/libminchassis/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ SET(LIBMINCHASSIS_SOURCES
mysql_component.cc
mysql_service_implementation.cc
registry.cc
registry_no_lock.cc
rwlock_scoped_lock.cc
)

Expand Down
14 changes: 14 additions & 0 deletions components/libminchassis/minimal_chassis.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include "dynamic_loader_scheme_file_imp.h"
#include "minimal_chassis_runtime_error_imp.h"
#include "registry_imp.h"
#include "registry_no_lock_imp.h"

extern SERVICE_TYPE(registry) imp_mysql_minimal_chassis_registry;

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

BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis_no_lock, registry)
mysql_registry_no_lock_imp::acquire,
mysql_registry_no_lock_imp::acquire_related,
mysql_registry_no_lock_imp::release END_SERVICE_IMPLEMENTATION();

BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis, registry_registration)
mysql_registry_imp::register_service, mysql_registry_imp::unregister,
mysql_registry_imp::set_default END_SERVICE_IMPLEMENTATION();

BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis_no_lock,
registry_registration)
mysql_registry_no_lock_imp::register_service,
mysql_registry_no_lock_imp::unregister,
mysql_registry_no_lock_imp::set_default END_SERVICE_IMPLEMENTATION();

BEGIN_SERVICE_IMPLEMENTATION(mysql_minimal_chassis, registry_query)
mysql_registry_imp::iterator_create, mysql_registry_imp::iterator_get,
mysql_registry_imp::iterator_next, mysql_registry_imp::iterator_is_valid,
Expand Down Expand Up @@ -104,7 +116,9 @@ mysql_runtime_error_imp::emit END_SERVICE_IMPLEMENTATION();

BEGIN_COMPONENT_PROVIDES(mysql_minimal_chassis)
PROVIDES_SERVICE(mysql_minimal_chassis, registry),
PROVIDES_SERVICE(mysql_minimal_chassis_no_lock, registry),
PROVIDES_SERVICE(mysql_minimal_chassis, registry_registration),
PROVIDES_SERVICE(mysql_minimal_chassis_no_lock, registry_registration),
PROVIDES_SERVICE(mysql_minimal_chassis, registry_query),
PROVIDES_SERVICE(mysql_minimal_chassis, registry_metadata_enumerate),
PROVIDES_SERVICE(mysql_minimal_chassis, registry_metadata_query),
Expand Down
Loading

0 comments on commit d39330f

Please sign in to comment.