From: lhh@sourceware.org <lhh@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/groups ...
Date: 12 Dec 2007 21:41:33 -0000 [thread overview]
Message-ID: <20071212214133.18210.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: lhh at sourceware.org 2007-12-12 21:41:32
Modified files:
rgmanager : ChangeLog
rgmanager/src/daemons: groups.c slang_event.c
rgmanager/src/resources: default_event_script.sl
Log message:
Misc. minor central processing bugfixes
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/ChangeLog.diff?cvsroot=cluster&r1=1.63&r2=1.64
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/groups.c.diff?cvsroot=cluster&r1=1.41&r2=1.42
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/slang_event.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/default_event_script.sl.diff?cvsroot=cluster&r1=1.1&r2=1.2
--- cluster/rgmanager/ChangeLog 2007/12/12 15:27:34 1.63
+++ cluster/rgmanager/ChangeLog 2007/12/12 21:41:32 1.64
@@ -1,5 +1,12 @@
2007-12-12 Lon Hohberger <lhh@redhat.com>
* Misc changes; add missing ds.h
+ * src/resources/default*.sl: Make clusvcadm -r go to a different
+ node. Don't notice() that we're starting a service if it's
+ disabled.
+ * src/daemons/groups.c: Make clustat not interfere with startup
+ when central processing is enabled
+ * src/daemons/slang_event.c: Make clusvcadm correctly report
+ service owner after relocate/restart/enable requests.
2007-11-30 Lon Hohberger <lhh@redhat.com>
* Commit RIND / S-Lang script engine [untested]
--- cluster/rgmanager/src/daemons/groups.c 2007/11/30 21:36:28 1.41
+++ cluster/rgmanager/src/daemons/groups.c 2007/12/12 21:41:32 1.42
@@ -1126,48 +1126,6 @@
}
-#if 0
-/**
- Send the state of the transition master to a given file descriptor.
-
- @param fd File descriptor to send state to
- @param rgname Resource group name whose state we want to send.
- @see send_rg_states
- */
-void
-send_master_state(msgctx_t *ctx)
-{
- rg_state_msg_t msg, *msgp = &msg;
- event_master_t master;
- rg_state_t *rs = &msg.rsm_state;
-
- strncpy(rs->rs_name, "internal:CentralProcessor",
- sizeof(rs->rs_name));
- rs->rs_last_owner = 0;
- rs->rs_restarts = 0;
-
- if (event_master_info_cached(&master) < 0) {
- rs->rs_owner = 0;
- rs->rs_transition = master.m_master_time;
- rs->rs_state = RG_STATE_UNINITIALIZED;
- } else {
- rs->rs_owner = master.m_nodeid;
- rs->rs_transition = master.m_master_time;
- rs->rs_state = RG_STATE_STARTED;
- }
-
- msgp->rsm_hdr.gh_magic = GENERIC_HDR_MAGIC;
- msgp->rsm_hdr.gh_length = sizeof(msg);
- msgp->rsm_hdr.gh_command = RG_STATUS;
-
- swab_rg_state_msg_t(msgp);
-
- if (msg_send(ctx, msgp, sizeof(msg)) < 0)
- perror("msg_send");
-}
-#endif
-
-
/**
Send status from a thread because we don't want rgmanager's
main thread to block in the case of DLM issues
@@ -1183,6 +1141,14 @@
free(arg);
+ if (central_events_enabled()) {
+ /* Never call get_rg_state() (distributed) if
+ central events are enabled, otherwise we
+ might overwrite the rg state with 'stopped'
+ when it should be 'disabled' (e.g. autostart="0") */
+ fast = 1;
+ }
+
/* See if we have a slot... */
if (rg_inc_status() < 0) {
/* Too many outstanding status checks. try again later. */
@@ -1327,6 +1293,7 @@
resource_node_t *curr;
rg_state_t svcblk;
char rg[64];
+ struct dlm_lksb lockp;
/* Only one status thread@a time, please! */
if (pthread_mutex_trylock(&status_mutex) != 0)
@@ -1340,7 +1307,13 @@
/* Local check - no one will make us take a service */
if (get_rg_state_local(rg, &svcblk) < 0) {
- continue;
+ if (rg_lock(rg, &lockp) != 0)
+ continue;
+ if (get_rg_state(rg, &svcblk) < 0) {
+ rg_unlock(&lockp);
+ continue;
+ }
+ rg_unlock(&lockp);
}
if (svcblk.rs_owner != my_id() ||
--- cluster/rgmanager/src/daemons/slang_event.c 2007/12/07 00:53:44 1.2
+++ cluster/rgmanager/src/daemons/slang_event.c 2007/12/12 21:41:32 1.3
@@ -487,7 +487,7 @@
char *svcname = NULL;
int *pref_list = NULL, pref_list_len = 0;
int *illegal_list = NULL, illegal_list_len = 0;
- int nargs, t, x, ret = -1;
+ int nargs, t, newowner = 0, ret = -1;
nargs = SLang_Num_Function_Args;
@@ -528,8 +528,10 @@
/* TODO: Meat of function goes here */
ret = service_op_start(svcname, pref_list,
- pref_list_len, &x); ;
+ pref_list_len, &newowner);
+ if (ret == 0 && newowner > 0)
+ ret = newowner;
out:
if (svcname)
free(svcname);
@@ -1123,7 +1125,17 @@
/* XXX Send response code to caller - that 0 should be the
new service owner, if there is one */
if (ctx) {
- send_ret(ctx, name, _user_return, request, 0);
+ if (_user_return > 0) {
+ /* sl_start_service() squashes return code and
+ node ID into one value. <0 = error, >0 =
+ success, return-value == node id running
+ service */
+ send_ret(ctx, name, 0, request, _user_return);
+ } else {
+ /* return value < 0 ... pass directly back;
+ don't transpose */
+ send_ret(ctx, name, _user_return, request, 0);
+ }
msg_close(ctx);
msg_free_ctx(ctx);
}
--- cluster/rgmanager/src/resources/default_event_script.sl 2007/11/30 21:36:29 1.1
+++ cluster/rgmanager/src/resources/default_event_script.sl 2007/12/12 21:41:32 1.2
@@ -192,7 +192,8 @@
}
(owner, state) = service_status(services[x]);
- if ((service_state == "started") and (owner < 0)) {
+ if ((service_state == "started") and (owner < 0) and
+ (state == "stopped")) {
info("Dependency met; starting ", services[x]);
nodes = allowed_nodes(services[x]);
()=move_or_start(services[x], nodes);
@@ -245,6 +246,10 @@
if (user_target > 0) {
for (x = 0; x < length(nodes); x++) {
+ %
+ % Put the preferred node@the front of the
+ % list for a user-relocate operation
+ %
if (nodes[x] == user_target) {
reordered = union(user_target, nodes);
nodes = reordered;
@@ -262,6 +267,13 @@
if (service_stop(service_name) < 0) {
return ERR_ABORT;
}
+
+ %
+ % The current owner shouldn't be the default
+ % for a relocate operation
+ %
+ reordered = subtract(nodes, owner);
+ nodes = union(reordered, owner);
}
ret = move_or_start(service_name, nodes);
@@ -275,7 +287,10 @@
ret = service_stop(service_name);
}
+
+ %
% todo - migrate
+ %
return ret;
}
next reply other threads:[~2007-12-12 21:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-12 21:41 lhh [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-09-28 15:14 [Cluster-devel] cluster/rgmanager ChangeLog src/daemons/groups lhh
2007-07-31 18:26 lhh
2007-07-10 18:25 lhh
2007-07-10 18:24 lhh
2007-07-02 15:15 lhh
2007-07-02 15:13 lhh
2007-04-19 18:05 lhh
2007-04-19 17:59 lhh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071212214133.18210.qmail@sourceware.org \
--to=lhh@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.