cluster: STABLE3 - rgmanager: Fix build warnings
by Lon Hohberger
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: 2c9f4e1360ee8ce4190e22f20c8b15cc7e33470d
Parent: d4761edcda4a87f89f136224ce4aafc0194db84b
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Tue May 4 16:31:05 2010 -0400
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Tue May 4 16:31:05 2010 -0400
rgmanager: Fix build warnings
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/include/groups.h | 1 +
rgmanager/src/daemons/restree.c | 3 +--
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/rgmanager/include/groups.h b/rgmanager/include/groups.h
index 4f23540..f776a31 100644
--- a/rgmanager/include/groups.h
+++ b/rgmanager/include/groups.h
@@ -20,6 +20,7 @@ int get_service_property(const char *rg_name, const char *prop,
int add_restart(const char *rg_name);
int check_restart(const char *rg_name);
+int clear_restart(const char *rg_name);
void kill_resource_groups(void);
/* do this op on all resource groups. The handler for the request
diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c
index ebeb79e..56f54c7 100644
--- a/rgmanager/src/daemons/restree.c
+++ b/rgmanager/src/daemons/restree.c
@@ -1210,9 +1210,8 @@ clear_checks(resource_node_t *node)
{
time_t now;
int x = 0;
- resource_t *res = node->rn_resource;
- now = get_time("start", 0, node);
+ now = get_time((char *)"start", 0, node);
for (; node->rn_actions[x].ra_name; x++) {
14 years
cluster: STABLE3 - rgmanager: Fix max_restart threshold handling
by Lon Hohberger
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: d4761edcda4a87f89f136224ce4aafc0194db84b
Parent: 9e62d21fe1f216b97aa0ca39df400cef19062034
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Tue May 4 15:03:23 2010 -0400
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Tue May 4 16:22:55 2010 -0400
rgmanager: Fix max_restart threshold handling
Max_restart / restart_expire_time was not being correctly
handled, resulting in inconsistent amounts of restarts prior
to relocation (or in some cases, no relocation at all)
Resolves: bz588925
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/daemons/groups.c | 16 ++++++++++++++++
rgmanager/src/daemons/restart_counter.c | 5 +++++
rgmanager/src/daemons/rg_state.c | 6 +++++-
rgmanager/src/daemons/slang_event.c | 20 ++++++++++++++++++--
4 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/rgmanager/src/daemons/groups.c b/rgmanager/src/daemons/groups.c
index 369e555..afce054 100644
--- a/rgmanager/src/daemons/groups.c
+++ b/rgmanager/src/daemons/groups.c
@@ -1890,6 +1890,22 @@ check_restart(const char *rg_name)
return ret;
}
+int
+clear_restart(const char *rg_name)
+{
+ resource_node_t *node;
+ int ret = 0;
+
+ pthread_rwlock_rdlock(&resource_lock);
+ node = node_by_ref(&_tree, rg_name);
+ if (node) {
+ ret = restart_clear(node->rn_restart_counter);
+ }
+ pthread_rwlock_unlock(&resource_lock);
+
+ return ret;
+}
+
void
kill_resource_groups(void)
diff --git a/rgmanager/src/daemons/restart_counter.c b/rgmanager/src/daemons/restart_counter.c
index 8789987..8ed8f79 100644
--- a/rgmanager/src/daemons/restart_counter.c
+++ b/rgmanager/src/daemons/restart_counter.c
@@ -90,6 +90,11 @@ restart_threshold_exceeded(restart_counter_t arg)
restart_info_t *restarts = (restart_info_t *)arg;
time_t now;
+ if (!arg)
+ /* No max restarts / threshold = always
+ ok to restart! */
+ return 0;
+
VALIDATE(arg, -1);
now = time(NULL);
restart_timer_purge(arg, now);
diff --git a/rgmanager/src/daemons/rg_state.c b/rgmanager/src/daemons/rg_state.c
index 79ff59a..d23772f 100644
--- a/rgmanager/src/daemons/rg_state.c
+++ b/rgmanager/src/daemons/rg_state.c
@@ -749,7 +749,6 @@ svc_start(const char *svcName, int req)
svcStatus.rs_transition = (uint64_t)time(NULL);
if (svcStatus.rs_state == RG_STATE_RECOVER) {
- add_restart(svcName);
svcStatus.rs_restarts++;
} else {
svcStatus.rs_restarts = 0;
@@ -2084,20 +2083,25 @@ handle_recover_req(char *svcName, int *new_owner)
get_recovery_policy(svcName, policy, sizeof(policy));
if (!strcasecmp(policy, "disable")) {
+ clear_restart(svcName);
return svc_disable(svcName);
} else if (!strcasecmp(policy, "relocate")) {
+ clear_restart(svcName);
return handle_relocate_req(svcName, RG_START_RECOVER, -1,
new_owner);
}
/* Check restart counter/timer for this resource */
if (check_restart(svcName) > 0) {
+ clear_restart(svcName);
logt_print(LOG_NOTICE, "Restart threshold for %s exceeded; "
"attempting to relocate\n", svcName);
return handle_relocate_req(svcName, RG_START_RECOVER, -1,
new_owner);
}
+ add_restart(svcName);
+
return handle_start_req(svcName, RG_START_RECOVER, new_owner);
}
diff --git a/rgmanager/src/daemons/slang_event.c b/rgmanager/src/daemons/slang_event.c
index 76663e9..55f0341 100644
--- a/rgmanager/src/daemons/slang_event.c
+++ b/rgmanager/src/daemons/slang_event.c
@@ -1162,22 +1162,38 @@ static int
S_service_event(const char *file, const char *script, char *name,
int state, int owner, int last_owner)
{
+ char policy[20];
int ret;
_service_name = name;
_service_state = (char *)rg_state_str(state);
_service_owner = owner;
_service_last_owner = last_owner;
- _service_restarts_exceeded = check_restart(name);
+ _service_restarts_exceeded = 0;
switch(state) {
case RG_STATE_DISABLED:
case RG_STATE_STOPPED:
case RG_STATE_FAILED:
- case RG_STATE_RECOVER:
case RG_STATE_ERROR:
/* There is no owner for these states. Ever. */
_service_owner = -1;
+ break;
+ case RG_STATE_RECOVER:
+ get_recovery_policy(name, policy, sizeof(policy));
+ if (!strcasecmp(policy, "restart")) {
+ _service_restarts_exceeded = check_restart(name);
+ add_restart(name);
+ } else if (!strcasecmp(policy, "relocate")) {
+ /* Restart threshold is always exceeded
+ * with 'relocate' recovery policy */
+ _service_restarts_exceeded = 1;
+ }
+ _service_owner = -1;
+ }
+
+ if (_service_restarts_exceeded) {
+ clear_restart(name);
}
ret = do_slang_run(file, script);
14 years
cluster: STABLE3 - rgmanager: Fix resource start/check times
by Lon Hohberger
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: 9e62d21fe1f216b97aa0ca39df400cef19062034
Parent: 4a66dd6aa8e60fc03b027c1fbdbfd37681878954
Author: Lon Hohberger <lhh(a)redhat.com>
AuthorDate: Tue May 4 14:58:58 2010 -0400
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Tue May 4 14:58:58 2010 -0400
rgmanager: Fix resource start/check times
Resolves: bz#588890
Signed-off-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/include/reslist.h | 1 -
rgmanager/src/daemons/restree.c | 2 +-
2 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/rgmanager/include/reslist.h b/rgmanager/include/reslist.h
index 382dfae..6f0724b 100644
--- a/rgmanager/include/reslist.h
+++ b/rgmanager/include/reslist.h
@@ -97,7 +97,6 @@ typedef struct _resource {
char * r_name;
resource_attr_t * r_attrs;
resource_act_t * r_actions;
- time_t r_started; /** Time this resource was last started */
int r_flags;
int r_refs;
int r_incarnations; /** Number of instances running locally */
diff --git a/rgmanager/src/daemons/restree.c b/rgmanager/src/daemons/restree.c
index f0e57d7..ebeb79e 100644
--- a/rgmanager/src/daemons/restree.c
+++ b/rgmanager/src/daemons/restree.c
@@ -1212,7 +1212,7 @@ clear_checks(resource_node_t *node)
int x = 0;
resource_t *res = node->rn_resource;
- now = res->r_started;
+ now = get_time("start", 0, node);
for (; node->rn_actions[x].ra_name; x++) {
14 years