--- src/amf/amfd/cb.h | 1 + src/amf/amfd/main.cc | 32 ++++++++++++++++++++++++++++++++ src/amf/amfd/osaf-amfd.in | 1 + 3 files changed, 34 insertions(+)
diff --git a/src/amf/amfd/cb.h b/src/amf/amfd/cb.h index 7ac743e..89cf15d 100644 --- a/src/amf/amfd/cb.h +++ b/src/amf/amfd/cb.h @@ -202,6 +202,7 @@ typedef struct cl_cb_tag { AVD_TMR heartbeat_tmr; /* The timer for sending heart beats to nd. */ SaTimeT heartbeat_tmr_period; uint32_t minimum_cluster_size; + std::string fmd_conf_file; uint32_t nodes_exit_cnt; /* The counter to identifies the number of nodes that have exited the membership diff --git a/src/amf/amfd/main.cc b/src/amf/amfd/main.cc index 563dea5..a86e536 100644 --- a/src/amf/amfd/main.cc +++ b/src/amf/amfd/main.cc @@ -45,6 +45,7 @@ #include "base/daemon.h" #include "base/logtrace.h" +#include "osaf/consensus/consensus.h" #include "nid/agent/nid_api.h" #include "rde/agent/rda_papi.h" @@ -70,6 +71,7 @@ enum { FD_MBX, FD_MBCSV, FD_CLM, + FD_SIGHUP, FD_IMM // must be last }; @@ -82,12 +84,16 @@ AVD_CL_CB *avd_cb = &_control_block; static nfds_t nfds = FD_IMM + 1; static struct pollfd fds[FD_IMM + 1]; +static NCS_SEL_OBJ sighup_sel_obj; + static void process_event(AVD_CL_CB *cb_now, AVD_EVT *evt); static void invalid_evh(AVD_CL_CB *cb, AVD_EVT *evt); static void standby_invalid_evh(AVD_CL_CB *cb, AVD_EVT *evt); static void qsd_invalid_evh(AVD_CL_CB *cb, AVD_EVT *evt); static void qsd_ignore_evh(AVD_CL_CB *cb, AVD_EVT *evt); +static void sighup_handler(int signum, siginfo_t *info, void *ptr); + /* list of all the function pointers related to handling the events * for active director. */ @@ -574,6 +580,7 @@ static uint32_t initialize(void) { } cb->minimum_cluster_size = base::GetEnv("OSAF_AMF_MIN_CLUSTER_SIZE", uint32_t{2}); + cb->fmd_conf_file = base::GetEnv("FMS_CONF_FILE", ""); node_list_db = new AmfDb<uint32_t, AVD_FAIL_OVER_NODE>; amfnd_svc_db = new std::set<uint32_t>; @@ -626,8 +633,23 @@ static void main_loop(void) { mbx_fd = ncs_ipc_get_sel_obj(&cb->avd_mbx); daemon_sigterm_install(&term_fd); + int rc = ncs_sel_obj_create(&sighup_sel_obj); + osafassert(rc == NCSCC_RC_SUCCESS); + + struct sigaction sighup; + sigemptyset(&sighup.sa_mask); + sighup.sa_sigaction = sighup_handler; + sighup.sa_flags = SA_SIGINFO; + + if (sigaction(SIGHUP, &sighup, NULL) != 0) { + osafassert(false); + } + + fds[FD_TERM].fd = term_fd; fds[FD_TERM].events = POLLIN; + fds[FD_SIGHUP].fd = sighup_sel_obj.rmv_obj; + fds[FD_SIGHUP].events = POLLIN; fds[FD_MBX].fd = mbx_fd.rmv_obj; fds[FD_MBX].events = POLLIN; while (1) { @@ -668,6 +690,12 @@ static void main_loop(void) { daemon_exit(); } + if (fds[FD_SIGHUP].revents & POLLIN) { + ncs_sel_obj_rmv_ind(&sighup_sel_obj, true, true); + Consensus consensus_service; + consensus_service.ReloadConfiguration(); + } + if (fds[FD_MBX].revents & POLLIN) { evt = (AVD_EVT *)ncs_ipc_non_blk_recv(&cb->avd_mbx); @@ -823,6 +851,10 @@ static void process_event(AVD_CL_CB *cb_now, AVD_EVT *evt) { TRACE_LEAVE(); } +static void sighup_handler(int signum, siginfo_t *info, void *ptr) { + ncs_sel_obj_ind(&sighup_sel_obj); +} + /** * Entry point for the AMF Director process * @param argc diff --git a/src/amf/amfd/osaf-amfd.in b/src/amf/amfd/osaf-amfd.in index 822b003..0aae769 100644 --- a/src/amf/amfd/osaf-amfd.in +++ b/src/amf/amfd/osaf-amfd.in @@ -28,6 +28,7 @@ else unset args . $pkgsysconfdir/nid.conf . $pkgsysconfdir/amfd.conf + export FMS_CONF_FILE=$pkgsysconfdir/fmd.conf fi binary=$pkglibdir/$osafprog -- 2.7.4 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel