Gitweb: http://git.fedorahosted.org/git/?p=cluster.git;a=commitdiff;h=02ae12174d1c19... Commit: 02ae12174d1c1908acb53c67cb04d26a3d19b536 Parent: efdb438ad868b447e28cde5959530b5dc763186f Author: Ryan McCabe rmccabe@redhat.com AuthorDate: Tue Feb 26 11:36:04 2013 -0500 Committer: Ryan McCabe rmccabe@redhat.com CommitterDate: Fri Apr 12 11:05:46 2013 -0400
rgmanager: Don't duplicate configuration change events
If a cluster configuration change is detected while there are events on the event queue that take some time to process, a large number of duplicate configuration update events are put onto the event queue. With a large number of services and a small status poll interval, thousands of duplicate events can be put onto the queue.
This patch causes rgmanager to queue only one config event per detected configuration change.
Signed-off-by: Ryan McCabe rmccabe@redhat.com --- rgmanager/src/daemons/main.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c index 1c7f746..59150c3 100644 --- a/rgmanager/src/daemons/main.c +++ b/rgmanager/src/daemons/main.c @@ -73,6 +73,7 @@ static int port = RG_PORT; static char *rgmanager_lsname = "rgmanager"; /* XXX default */ static int status_poll_interval = DEFAULT_CHECK_INTERVAL; static int stops_queued = 0; +static int lastqver = 0;
int next_node_id(cluster_member_list_t *membership, int me);
@@ -750,7 +751,7 @@ dump_internal_state(int fd) int event_loop(msgctx_t *localctx, msgctx_t *clusterctx) { - int n = 0, max, ret, oldver, newver; + int n = 0, max, ret, oldver = 0, newver = 0; fd_set rfds; msgctx_t *newctx; struct timeval tv; @@ -826,9 +827,14 @@ event_loop(msgctx_t *localctx, msgctx_t *clusterctx) return 0;
if (need_reconfigure || check_config_update(&oldver, &newver)) { + /* Only queue configuration events once per detected config update */ + if (!need_reconfigure && newver <= lastqver) + return 0; + need_reconfigure = 0; configure_rgmanager(-1, 0, NULL); config_event_q(oldver, newver); + lastqver = newver; return 0; }
cluster-commits@lists.fedorahosted.org