client_messenger(Messenger::create(g_ceph_context, "async", entity_name_t::CLIENT(-1), "client", getpid())),
objecter{g_ceph_context, client_messenger.get(), &monc, poolctx},
client{client_messenger.get(), &monc, &objecter},
- timer(g_ceph_context, lock),
+ timer(g_ceph_context, beacon_lock),
orig_argc(argc),
orig_argv(argv)
{
client.init();
timer.init();
- tick();
+ {
+ std::lock_guard bl(beacon_lock);
+ tick();
+ }
dout(10) << "Complete." << dendl;
return 0;
void NVMeofGwMonitorClient::send_beacon()
{
- ceph_assert(ceph_mutex_is_locked_by_me(lock));
+ ceph_assert(ceph_mutex_is_locked_by_me(beacon_lock));
gw_availability_t gw_availability = gw_availability_t::GW_CREATED;
BeaconSubsystems subs;
NVMeofGwClient gw_client(
// stop sending beacon first, I use monc to talk with monitors
- timer.shutdown();
+ {
+ std::lock_guard bl(beacon_lock);
+ timer.shutdown();
+ }
// client uses monc and objecter
client.shutdown();
// Stop asio threads, so leftover events won't call into shut down
Client client;
std::map<NvmeGroupKey, NvmeGwMonClientStates> map;
ceph::mutex lock = ceph::make_mutex("NVMeofGw::lock");
+ // allow beacons to be sent independently of handle_nvmeof_gw_map
+ ceph::mutex beacon_lock = ceph::make_mutex("NVMeofGw::beacon_lock");
SafeTimer timer;
int orig_argc;