---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel