Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
List overview
Download
cluster-commits
October 2009
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
cluster-commits@lists.stg.fedorahosted.org
9 participants
151 discussions
Start a n
N
ew thread
fence-agents: master - fencing: Correct exit codes for status operation
by Marek Grác
19 Oct '09
19 Oct '09
Gitweb:
http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commi…
Commit: 19c01e65ffe8f0f190682c10347a62d4906f70b6 Parent: e0fae3825aa2aff58cda631e77ea958c02cb1ce8 Author: Marek 'marx' Grac <mgrac(a)redhat.com> AuthorDate: Mon Oct 19 14:47:12 2009 +0200 Committer: Marek 'marx' Grac <mgrac(a)redhat.com> CommitterDate: Mon Oct 19 14:47:12 2009 +0200 fencing: Correct exit codes for status operation According to standard operation status should return 0 (if ON) and 2 (if OFF). In all other cases if operation was succesfull then agent return 0. --- fence/agents/alom/fence_alom.py | 4 ++- fence/agents/apc/fence_apc.py | 4 ++- fence/agents/apc_snmp/fence_apc_snmp.py | 3 +- fence/agents/baytech/fence_baytech.pl | 8 +++++- fence/agents/bladecenter/fence_bladecenter.py | 4 ++- fence/agents/bullpap/fence_bullpap.pl | 6 ++++- fence/agents/cisco_mds/fence_cisco_mds.py | 4 ++- fence/agents/drac/fence_drac.pl | 17 +++++++++---- fence/agents/drac5/fence_drac5.py | 4 ++- fence/agents/eps/fence_eps.py | 4 ++- fence/agents/ibmblade/fence_ibmblade.py | 3 +- fence/agents/ifmib/fence_ifmib.py | 4 ++- fence/agents/ilo/fence_ilo.py | 4 ++- fence/agents/ilo_mp/fence_ilo_mp.py | 4 ++- fence/agents/intelmodular/fence_intelmodular.py | 4 ++- fence/agents/ipmilan/ipmilan.c | 28 ++++++++++++++++++++-- fence/agents/ldom/fence_ldom.py | 6 +++- fence/agents/lib/fencing.py.py | 12 +++++++-- fence/agents/lpar/fence_lpar.py | 3 +- fence/agents/rsa/fence_rsa.py | 6 +++- fence/agents/rsb/fence_rsb.py | 8 ++++++ fence/agents/sanbox2/fence_sanbox2.py | 4 ++- fence/agents/virsh/fence_virsh.py | 3 +- fence/agents/vmware/fence_vmware.py | 4 ++- fence/agents/wti/fence_wti.py | 4 ++- 25 files changed, 121 insertions(+), 34 deletions(-) diff --git a/fence/agents/alom/fence_alom.py b/fence/agents/alom/fence_alom.py index 4fffa0a..8793e92 100644 --- a/fence/agents/alom/fence_alom.py +++ b/fence/agents/alom/fence_alom.py @@ -64,7 +64,7 @@ def main(): # Operate the fencing device conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status,None) + result = fence_action(conn, options, set_power_status, get_power_status,None) # Logout from system try: @@ -75,5 +75,7 @@ def main(): except pexpect.ExceptionPexpect: pass + sys.exit(result) + if __name__ == "__main__": main() diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py index 685a154..92b109c 100755 --- a/fence/agents/apc/fence_apc.py +++ b/fence/agents/apc/fence_apc.py @@ -212,7 +212,7 @@ def main(): ## Operate the fencing device #### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, get_power_status) + result = fence_action(conn, options, set_power_status, get_power_status, get_power_status) ## ## Logout from system @@ -228,6 +228,8 @@ def main(): pass except pexpect.ExceptionPexpect: pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/apc_snmp/fence_apc_snmp.py b/fence/agents/apc_snmp/fence_apc_snmp.py index 7e8118e..0c36b66 100644 --- a/fence/agents/apc_snmp/fence_apc_snmp.py +++ b/fence/agents/apc_snmp/fence_apc_snmp.py @@ -192,7 +192,8 @@ def main(): show_docs(options) # Operate the fencing device - fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/baytech/fence_baytech.pl b/fence/agents/baytech/fence_baytech.pl index 7325ee6..b625968 100644 --- a/fence/agents/baytech/fence_baytech.pl +++ b/fence/agents/baytech/fence_baytech.pl @@ -570,7 +570,13 @@ elsif ($action =~ /status/i) { print "Outlet '$bt_name' is $bt_state and is ". (($bt_locked eq "")?"not ":"")."Locked\n"; - $exit=0; + + if ($bt_state =~ /on/i) + { + $exit=0; + } else { + $exit=2; + } } elsif ($bt_locked ne "") { diff --git a/fence/agents/bladecenter/fence_bladecenter.py b/fence/agents/bladecenter/fence_bladecenter.py index d55f31a..414c260 100644 --- a/fence/agents/bladecenter/fence_bladecenter.py +++ b/fence/agents/bladecenter/fence_bladecenter.py @@ -110,7 +110,7 @@ def main(): ## Operate the fencing device ###### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, get_blades_list) + result = fence_action(conn, options, set_power_status, get_power_status, get_blades_list) ## ## Logout from system @@ -122,6 +122,8 @@ def main(): pass except pexpect.ExceptionPexpect: pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/bullpap/fence_bullpap.pl b/fence/agents/bullpap/fence_bullpap.pl index 11382dc..6915f57 100644 --- a/fence/agents/bullpap/fence_bullpap.pl +++ b/fence/agents/bullpap/fence_bullpap.pl @@ -297,6 +297,7 @@ elsif (/^status$/i) { $action = "status"; } # $success=0; $_ = $action; +my $exit_code=0; if (/(on|off)/) { my $timeout = 120; # 120 = max of (60, 120). Max timeout for "on" @@ -341,6 +342,9 @@ elsif (/status/) get_power_state $host,$domain,$login,$passwd; $state=$_; $success = 1 if defined $state; + if ($state eq "OFF") { + $exit_code = 2; + } } else { @@ -351,7 +355,7 @@ if ($success) { print "success: domain $domain $action". ((defined $state) ? ": $state":"") ."\n" unless defined $quiet; - exit 0; + exit $exit_code; } else { diff --git a/fence/agents/cisco_mds/fence_cisco_mds.py b/fence/agents/cisco_mds/fence_cisco_mds.py index d007b72..bd8d858 100644 --- a/fence/agents/cisco_mds/fence_cisco_mds.py +++ b/fence/agents/cisco_mds/fence_cisco_mds.py @@ -113,7 +113,9 @@ def main(): port_oid=cisco_port2oid(options["-n"]) # Operate the fencing device - fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl index 78c4735..5cc1a52 100644 --- a/fence/agents/drac/fence_drac.pl +++ b/fence/agents/drac/fence_drac.pl @@ -445,7 +445,7 @@ sub do_action if ($status =~ /^on$/i) { msg "success: already on"; - return; + return 0; } set_power_status on; @@ -458,7 +458,7 @@ sub do_action if ($status =~ /^off$/i) { msg "success: already off"; - return; + return 0; } set_power_status off; @@ -482,12 +482,19 @@ sub do_action elsif ($action =~ /^status$/i) { msg "status: $status"; - return; + if ($status =~ /on/i) + { + return 0; + } else { + return 2; + } } else { fail "failed: unrecognised action: '$action'"; } + + return 0; } # @@ -651,10 +658,10 @@ elsif ($drac_version eq $DRAC_VERSION_MC) unless defined $modulename; } -do_action; +my $res = do_action; logout; -exit 0; +exit $res; diff --git a/fence/agents/drac5/fence_drac5.py b/fence/agents/drac5/fence_drac5.py index d7fbdaa..ab5056b 100644 --- a/fence/agents/drac5/fence_drac5.py +++ b/fence/agents/drac5/fence_drac5.py @@ -115,7 +115,7 @@ def main(): ## Assume this is DRAC 5 by default as we don't want to break anything options["model"]="DRAC 5" - fence_action(conn, options, set_power_status, get_power_status, get_list_devices) + result = fence_action(conn, options, set_power_status, get_power_status, get_list_devices) ## ## Logout from system @@ -127,6 +127,8 @@ def main(): pass except pexpect.ExceptionPexpect: pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/eps/fence_eps.py b/fence/agents/eps/fence_eps.py index 604a481..d9118a7 100644 --- a/fence/agents/eps/fence_eps.py +++ b/fence/agents/eps/fence_eps.py @@ -110,7 +110,9 @@ def main(): show_docs(options) #Run fence action. Conn is None, beacause we always need open new http connection - fence_action(None, options, set_power_status, get_power_status,get_power_status) + result = fence_action(None, options, set_power_status, get_power_status,get_power_status) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/ibmblade/fence_ibmblade.py b/fence/agents/ibmblade/fence_ibmblade.py index 4ff334e..4548a29 100644 --- a/fence/agents/ibmblade/fence_ibmblade.py +++ b/fence/agents/ibmblade/fence_ibmblade.py @@ -74,7 +74,8 @@ def main(): show_docs(options) # Operate the fencing device - fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/ifmib/fence_ifmib.py b/fence/agents/ifmib/fence_ifmib.py index 7645afa..159554e 100644 --- a/fence/agents/ifmib/fence_ifmib.py +++ b/fence/agents/ifmib/fence_ifmib.py @@ -131,7 +131,9 @@ def main(): show_docs(options) # Operate the fencing device - fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/ilo/fence_ilo.py b/fence/agents/ilo/fence_ilo.py index 574f944..0ff40d7 100755 --- a/fence/agents/ilo/fence_ilo.py +++ b/fence/agents/ilo/fence_ilo.py @@ -105,7 +105,9 @@ def main(): ## ## Fence operations #### - fence_action(conn, options, set_power_status, get_power_status, None) + result = fence_action(conn, options, set_power_status, get_power_status, None) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/ilo_mp/fence_ilo_mp.py b/fence/agents/ilo_mp/fence_ilo_mp.py index dfd4c1e..2ddd733 100644 --- a/fence/agents/ilo_mp/fence_ilo_mp.py +++ b/fence/agents/ilo_mp/fence_ilo_mp.py @@ -65,7 +65,7 @@ def main(): ## ## Fence operations #### - fence_action(conn, options, set_power_status, get_power_status) + result = fence_action(conn, options, set_power_status, get_power_status) try: conn.send("exit\r\n") @@ -73,6 +73,8 @@ def main(): pass except pexpect.ExceptionPexpect: pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/intelmodular/fence_intelmodular.py b/fence/agents/intelmodular/fence_intelmodular.py index a03e4a6..c943c1e 100644 --- a/fence/agents/intelmodular/fence_intelmodular.py +++ b/fence/agents/intelmodular/fence_intelmodular.py @@ -80,7 +80,9 @@ def main(): show_docs(options) # Operate the fencing device - fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status, get_outlets_status) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/ipmilan/ipmilan.c b/fence/agents/ipmilan/ipmilan.c index e001f3d..ad35001 100644 --- a/fence/agents/ipmilan/ipmilan.c +++ b/fence/agents/ipmilan/ipmilan.c @@ -34,6 +34,19 @@ #define DEFAULT_METHOD "onoff" +/* We should follow FenceAgentsAPI standard*/ +#define ERR_OFF_SUCCESSFUL 0 +#define ERR_OFF_FAIL 1 + +#define ERR_ON_SUCCESSFUL 0 +#define ERR_ON_FAIL 1 + +#define ERR_STATUS_ON 0 +#define ERR_STATUS_FAIL 1 +#define ERR_STATUS_OFF 2 + +#define ERR_OK 0 + #define log(lvl, fmt, args...) fprintf(stderr, fmt, ##args) #include <libgen.h> #include "copyright.cf" @@ -844,6 +857,7 @@ main(int argc, char **argv) int timeout=DEFAULT_TIMEOUT; int cipher=-1; int print_final_status=1; + int translated_ret = -1; memset(ip, 0, sizeof(ip)); memset(authtype, 0, sizeof(authtype)); @@ -1013,19 +1027,22 @@ main(int argc, char **argv) } else { /* Original onoff method */ ret = ipmi_off(i); - if (ret != 0) + translated_ret = (ret==0?ERR_OFF_SUCCESSFUL:ERR_OFF_FAIL); + if (ret != 0) { goto out; + } ret = ipmi_on(i); } } else if (!strcasecmp(op, "on")) { printf("Powering on machine @ IPMI:%s...", ip); fflush(stdout); ret = ipmi_on(i); - + translated_ret = (ret==0?ERR_ON_SUCCESSFUL:ERR_ON_FAIL); } else if (!strcasecmp(op, "off")) { printf("Powering off machine @ IPMI:%s...", ip); fflush(stdout); ret = ipmi_off(i); + translated_ret = (ret==0?ERR_ON_SUCCESSFUL:ERR_ON_FAIL); } else if (!strcasecmp(op, "status") || !strcasecmp(op, "monitor")) { printf("Getting status of IPMI:%s...",ip); fflush(stdout); @@ -1034,26 +1051,31 @@ main(int argc, char **argv) case STATE_ON: if (!strcasecmp(op, "status")) printf("Chassis power = On\n"); + translated_ret = ERR_STATUS_ON; ret = 0; break; case STATE_OFF: if (!strcasecmp(op, "status")) printf("Chassis power = Off\n"); + translated_ret = ERR_STATUS_OFF; ret = 0; break; default: if (!strcasecmp(op, "status")) printf("Chassis power = Unknown\n"); + translated_ret = ERR_STATUS_FAIL; ret = 1; break; } } else if (!strcasecmp(op, "list")) { printf("%s\n","N/A"); ret=0; + translated_ret = ERR_OK; print_final_status=0; } else if (!strcasecmp(op, "metadata")) { print_xml_metadata(pname); ret=0; + translated_ret = ERR_OK; print_final_status=0; } @@ -1068,5 +1090,5 @@ out: else printf("Failed\n"); } - return ret; + return translated_ret; } diff --git a/fence/agents/ldom/fence_ldom.py b/fence/agents/ldom/fence_ldom.py index 4806982..94d1429 100644 --- a/fence/agents/ldom/fence_ldom.py +++ b/fence/agents/ldom/fence_ldom.py @@ -105,7 +105,7 @@ def main(): ## Operate the fencing device #### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status,get_power_status) + result = fence_action(conn, options, set_power_status, get_power_status,get_power_status) ## ## Logout from system @@ -116,7 +116,9 @@ def main(): except exceptions.OSError: pass except pexpect.ExceptionPexpect: - pass + pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py index a099a0a..566cebf 100644 --- a/fence/agents/lib/fencing.py.py +++ b/fence/agents/lib/fencing.py.py @@ -363,7 +363,7 @@ def atexit_handler(): os.close(1) except IOError: sys.stderr.write("%s failed to close standard output\n"%(sys.argv[0])) - sys.exit(1) + sys.exit(EC_GENERIC_ERROR) def version(command, release, build_date, copyright_notice): print command, " ", release, " ", build_date @@ -374,7 +374,7 @@ def fail_usage(message = ""): if len(message) > 0: sys.stderr.write(message+"\n") sys.stderr.write("Please use '-h' for usage\n") - sys.exit(EC_BAD_ARGS) + sys.exit(EC_GENERIC_ERROR) def fail(error_code): message = { @@ -387,7 +387,7 @@ def fail(error_code): EC_STATUS_HMC : "Failed: Either unable to obtaion correct plug status, partition is not available or incorrect HMC version used" }[error_code] + "\n" sys.stderr.write(message) - sys.exit(error_code) + sys.exit(EC_GENERIC_ERROR) def usage(avail_opt): global all_opt @@ -678,6 +678,8 @@ def show_docs(options, docs = None): sys.exit(0) def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list = None): + result = 0 + ## Process options that manipulate fencing device ##### if (options["-o"] == "list") and (0 == options["device_opt"].count("port")) and (0 == options["device_opt"].count("partition")): @@ -744,8 +746,12 @@ def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list = None print "Success: Rebooted" elif options["-o"] == "status": print "Status: " + status.upper() + if status.upper() == "OFF": + result = 2 elif options["-o"] == "monitor": 1 + + return result def fence_login(options): force_ipvx="" diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py index 451ca93..37ff2b4 100644 --- a/fence/agents/lpar/fence_lpar.py +++ b/fence/agents/lpar/fence_lpar.py @@ -161,7 +161,7 @@ def main(): ## Operate the fencing device #### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, get_lpar_list) + result = fence_action(conn, options, set_power_status, get_power_status, get_lpar_list) ## ## Logout from system @@ -174,5 +174,6 @@ def main(): except pexpect.ExceptionPexpect: pass + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/rsa/fence_rsa.py b/fence/agents/rsa/fence_rsa.py index 16457a9..583a84a 100644 --- a/fence/agents/rsa/fence_rsa.py +++ b/fence/agents/rsa/fence_rsa.py @@ -62,7 +62,7 @@ def main(): ## Operate the fencing device ###### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, None) + result = fence_action(conn, options, set_power_status, get_power_status, None) ## ## Logout from system @@ -73,7 +73,9 @@ def main(): except exceptions.OSError: pass except pexpect.ExceptionPexpect: - pass + pass + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/rsb/fence_rsb.py b/fence/agents/rsb/fence_rsb.py index 1df0374..77ac26b 100644 --- a/fence/agents/rsb/fence_rsb.py +++ b/fence/agents/rsb/fence_rsb.py @@ -56,6 +56,9 @@ def main(): POWER_STATUS = 2 POWER_REBOOT = 3 + STATUS_ON = 0 + STATUS_OFF = 2 + power_command_issued = 0 address = "" @@ -69,6 +72,8 @@ def main(): standard_err = 2 + result = 0 + #set up regex list USERNAME = 0 PASSWORD = 1 @@ -368,8 +373,10 @@ def main(): print "Determining power state..." if power_state == 1: print "Server is On" + result = STATUS_ON elif power_state == 0: print "Server is Off" + result = STATUS_OFF else: os.write(standard_err, ("FENCE: Cannot determine power state: %s" % buf)) sys.exit(1) @@ -382,6 +389,7 @@ def main(): sock.write("\r") sock.close() + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/sanbox2/fence_sanbox2.py b/fence/agents/sanbox2/fence_sanbox2.py index d1e65cf..38adaa2 100644 --- a/fence/agents/sanbox2/fence_sanbox2.py +++ b/fence/agents/sanbox2/fence_sanbox2.py @@ -139,7 +139,7 @@ def main(): sys.stderr.write("Failed: Unable to switch to admin section\n") sys.exit(EC_GENERIC_ERROR) - fence_action(conn, options, set_power_status, get_power_status, get_list_devices) + result = fence_action(conn, options, set_power_status, get_power_status, get_list_devices) ## ## Logout from system @@ -153,5 +153,7 @@ def main(): except pexpect.ExceptionPexpect: pass + sys.exit(result) + if __name__ == "__main__": main() diff --git a/fence/agents/virsh/fence_virsh.py b/fence/agents/virsh/fence_virsh.py index 7ef71a3..7d883dd 100644 --- a/fence/agents/virsh/fence_virsh.py +++ b/fence/agents/virsh/fence_virsh.py @@ -82,7 +82,7 @@ def main(): ## Operate the fencing device conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(conn, options, set_power_status, get_power_status, get_outlets_status) ## Logout from system try: @@ -93,5 +93,6 @@ def main(): except pexpect.ExceptionPexpect: pass + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/vmware/fence_vmware.py b/fence/agents/vmware/fence_vmware.py index 63e9360..b7a8eeb 100644 --- a/fence/agents/vmware/fence_vmware.py +++ b/fence/agents/vmware/fence_vmware.py @@ -310,7 +310,9 @@ def main(): fail_usage("Unsupported version of vmrun command! You must use at least version %d!"%(VMRUN_MINIMUM_REQUIRED_VERSION)) # Operate the fencing device - fence_action(None, options, set_power_status, get_power_status, get_outlets_status) + result = fence_action(None, options, set_power_status, get_power_status, get_outlets_status) + + sys.exit(result) if __name__ == "__main__": main() diff --git a/fence/agents/wti/fence_wti.py b/fence/agents/wti/fence_wti.py index 514bc9d..f5eb169 100644 --- a/fence/agents/wti/fence_wti.py +++ b/fence/agents/wti/fence_wti.py @@ -130,7 +130,7 @@ def main(): else: conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status, get_power_status) + result = fence_action(conn, options, set_power_status, get_power_status, get_power_status) ## ## Logout from system @@ -142,6 +142,8 @@ def main(): pass except pexpect.ExceptionPexpect: pass + + sys.exit(result) if __name__ == "__main__": main()
1
0
0
0
fence-agents: master - fence_rackswich: Accept unknown options without value
by Marek Grác
19 Oct '09
19 Oct '09
Gitweb:
http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commi…
Commit: e0fae3825aa2aff58cda631e77ea958c02cb1ce8 Parent: 744df71768fc561693bee28e635501cf641d8d29 Author: Marek 'marx' Grac <mgrac(a)redhat.com> AuthorDate: Mon Oct 19 14:03:19 2009 +0200 Committer: Marek 'marx' Grac <mgrac(a)redhat.com> CommitterDate: Mon Oct 19 14:03:19 2009 +0200 fence_rackswich: Accept unknown options without value --- fence/agents/rackswitch/do_rack.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fence/agents/rackswitch/do_rack.c b/fence/agents/rackswitch/do_rack.c index a4bad8d..854b475 100644 --- a/fence/agents/rackswitch/do_rack.c +++ b/fence/agents/rackswitch/do_rack.c @@ -239,9 +239,13 @@ static void get_options(int argc, char **argv) } *value = 0; if( (value = strchr(arg, '=')) == NULL){ + /* in this agent we can ignore options without value + * as we don't need any of them, here. But we should + * accept and ignore them. + */ fprintf(stderr, "invalid input: '%s'\n", arg); - exit(DID_FAILURE); - } + continue; + } *value = 0; value++; /* bahfuck. "agent" is not passed to us anyway
1
0
0
0
cluster: STABLE3 - cman init: fix another set_networking_params check
by Fabio M. Di Nitto
19 Oct '09
19 Oct '09
Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=3f…
Commit: 3fdca6cd60c75ddccde21ae4c3298efd75f09455 Parent: 1ece3abed41a6debf4175201c4061108e9034e68 Author: Fabio M. Di Nitto <fdinitto(a)redhat.com> AuthorDate: Mon Oct 19 10:15:44 2009 +0200 Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com> CommitterDate: Mon Oct 19 10:15:44 2009 +0200 cman init: fix another set_networking_params check Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com> --- cman/init.d/cman.in | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in index b5b6192..d03e33d 100644 --- a/cman/init.d/cman.in +++ b/cman/init.d/cman.in @@ -508,7 +508,7 @@ set_networking_params() if [ "$(cat $rmemmax)" -lt $NET_RMEM_MAX ]; then echo $NET_RMEM_MAX > /proc/sys/net/core/rmem_max - [ "$(cat $rmemmax)" -lt $NET_RMEM_MAX ] && return 1 + [ "$(cat $rmemmax)" != $NET_RMEM_MAX ] && return 1 fi return 0
1
0
0
0
cluster: STABLE3 - cman init: fix set_networking_params
by Fabio M. Di Nitto
18 Oct '09
18 Oct '09
Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=1e…
Commit: 1ece3abed41a6debf4175201c4061108e9034e68 Parent: 9fe781d4070527ea89acd848a5d50f3d24302f90 Author: Fabio M. Di Nitto <fdinitto(a)redhat.com> AuthorDate: Mon Oct 19 06:46:36 2009 +0200 Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com> CommitterDate: Mon Oct 19 06:46:36 2009 +0200 cman init: fix set_networking_params Do not fail if the current value of rmem_default or rmem_max are already higher than the minimum required. rhbz#529498 Check that the requested value is active. Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com> --- cman/init.d/cman.in | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in index 055abda..b5b6192 100644 --- a/cman/init.d/cman.in +++ b/cman/init.d/cman.in @@ -499,15 +499,19 @@ set_networking_params() [ ! -f $rmemdefault ] && return 0 - value="$(cat $rmemdefault)" - - [ $value -le $NET_RMEM_DEFAULT ] && \ + if [ "$(cat $rmemdefault)" -lt $NET_RMEM_DEFAULT ]; then echo $NET_RMEM_DEFAULT > $rmemdefault + [ "$(cat $rmemdefault)" != $NET_RMEM_DEFAULT ] && return 1 + fi - value="$(cat /proc/sys/net/core/rmem_max)" + rmemmax="/proc/sys/net/core/rmem_max" - [ $value -le $NET_RMEM_MAX ] && \ + if [ "$(cat $rmemmax)" -lt $NET_RMEM_MAX ]; then echo $NET_RMEM_MAX > /proc/sys/net/core/rmem_max + [ "$(cat $rmemmax)" -lt $NET_RMEM_MAX ] && return 1 + fi + + return 0 } start_cman()
1
0
0
0
cluster: STABLE3 - fencing: Accept unknown options from standard input
by Marek Grác
16 Oct '09
16 Oct '09
Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=9f…
Commit: 9fe781d4070527ea89acd848a5d50f3d24302f90 Parent: 622002d75df7bb067bca51f46731b89f2104b65a Author: Marek 'marx' Grac <mgrac(a)redhat.com> AuthorDate: Fri Oct 16 17:31:10 2009 +0200 Committer: Marek 'marx' Grac <mgrac(a)redhat.com> CommitterDate: Fri Oct 16 17:31:10 2009 +0200 fencing: Accept unknown options from standard input libefence added new option 'nodename' to every query, as most of the agents does not need such feature, we will ignore it. Unknown options from STDIN where handled differently before. New policy: fence agent should accept unknown args from STDIN. It can print on STDERR warning that it is ignoring that option. --- fence/agents/bullpap/fence_bullpap.pl | 4 ---- fence/agents/drac/fence_drac.pl | 5 ----- fence/agents/egenera/fence_egenera.pl | 7 ------- fence/agents/lib/fencing.py.py | 3 ++- 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/fence/agents/bullpap/fence_bullpap.pl b/fence/agents/bullpap/fence_bullpap.pl index b643413..11382dc 100644 --- a/fence/agents/bullpap/fence_bullpap.pl +++ b/fence/agents/bullpap/fence_bullpap.pl @@ -148,10 +148,6 @@ sub get_options_stdin { $verbose = $val; } - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl index e743aae..78c4735 100644 --- a/fence/agents/drac/fence_drac.pl +++ b/fence/agents/drac/fence_drac.pl @@ -560,11 +560,6 @@ sub get_options_stdin { $cmd_prompt = $val; } - # Excess name/vals will fail - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/egenera/fence_egenera.pl b/fence/agents/egenera/fence_egenera.pl index a193fb0..8df0029 100644 --- a/fence/agents/egenera/fence_egenera.pl +++ b/fence/agents/egenera/fence_egenera.pl @@ -164,13 +164,6 @@ sub get_options_stdin { $user = $val; } - - # FIXME should we do more error checking? - # Excess name/vals will be eaten for now - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py index fe83a3f..5e9b3cc 100644 --- a/fence/agents/lib/fencing.py.py +++ b/fence/agents/lib/fencing.py.py @@ -538,7 +538,8 @@ def process_input(avail_opt): ## ###### if avail_opt.count(name) == 0: - fail_usage("Parse error: Unknown option '"+line+"'") + sys.stderr.write("Parse error: Ignoring unknown option '"+line+"'\n") + continue if all_opt[name]["getopt"].endswith(":"): opt["-"+all_opt[name]["getopt"].rstrip(":")] = value
1
0
0
0
fence-agents: master - fencing: Accept unknown options from standard input
by Marek Grác
16 Oct '09
16 Oct '09
Gitweb:
http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commi…
Commit: 744df71768fc561693bee28e635501cf641d8d29 Parent: 460609f46485cd39f1ea158a00e1ca8fa3dd809f Author: Marek 'marx' Grac <mgrac(a)redhat.com> AuthorDate: Fri Oct 16 17:23:21 2009 +0200 Committer: Marek 'marx' Grac <mgrac(a)redhat.com> CommitterDate: Fri Oct 16 17:28:40 2009 +0200 fencing: Accept unknown options from standard input libefence added new option 'nodename' to every query, as most of the agents does not need such feature, we will ignore it. Unknown options from STDIN where handled differently before. New policy: fence agent should accept unknown args from STDIN. It can print on STDERR warning that it is ignoring that option. --- fence/agents/bullpap/fence_bullpap.pl | 4 ---- fence/agents/drac/fence_drac.pl | 5 ----- fence/agents/egenera/fence_egenera.pl | 7 ------- fence/agents/lib/fencing.py.py | 3 ++- 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/fence/agents/bullpap/fence_bullpap.pl b/fence/agents/bullpap/fence_bullpap.pl index b643413..11382dc 100644 --- a/fence/agents/bullpap/fence_bullpap.pl +++ b/fence/agents/bullpap/fence_bullpap.pl @@ -148,10 +148,6 @@ sub get_options_stdin { $verbose = $val; } - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl index e743aae..78c4735 100644 --- a/fence/agents/drac/fence_drac.pl +++ b/fence/agents/drac/fence_drac.pl @@ -560,11 +560,6 @@ sub get_options_stdin { $cmd_prompt = $val; } - # Excess name/vals will fail - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/egenera/fence_egenera.pl b/fence/agents/egenera/fence_egenera.pl index a193fb0..8df0029 100644 --- a/fence/agents/egenera/fence_egenera.pl +++ b/fence/agents/egenera/fence_egenera.pl @@ -164,13 +164,6 @@ sub get_options_stdin { $user = $val; } - - # FIXME should we do more error checking? - # Excess name/vals will be eaten for now - else - { - fail "parse error: unknown option \"$opt\""; - } } } diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py index 9df1190..a099a0a 100644 --- a/fence/agents/lib/fencing.py.py +++ b/fence/agents/lib/fencing.py.py @@ -543,7 +543,8 @@ def process_input(avail_opt): ## ###### if avail_opt.count(name) == 0: - fail_usage("Parse error: Unknown option '"+line+"'") + sys.stderr.write("Parse error: Ignoring unknown option '"+line+"'\n") + continue if all_opt[name]["getopt"].endswith(":"): opt["-"+all_opt[name]["getopt"].rstrip(":")] = value
1
0
0
0
gfs2-utils: master - build: check for libquorum
by Fabio M. Di Nitto
16 Oct '09
16 Oct '09
Gitweb:
http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdif…
Commit: 9a8c4736e28903aacd14589c6c13b6efdaebb52f Parent: c87787214e61794d55fb424bf6b35a206c5f410a Author: Fabio M. Di Nitto <fdinitto(a)redhat.com> AuthorDate: Fri Oct 16 09:25:16 2009 +0200 Committer: Fabio M. Di Nitto <fdinitto(a)redhat.com> CommitterDate: Fri Oct 16 09:25:16 2009 +0200 build: check for libquorum Signed-off-by: Fabio M. Di Nitto <fdinitto(a)redhat.com> --- configure.ac | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/configure.ac b/configure.ac index 6b537d4..be55a79 100644 --- a/configure.ac +++ b/configure.ac @@ -118,6 +118,7 @@ PKG_CHECK_MODULES([ccs],[libccs]) PKG_CHECK_MODULES([cfg],[libcfg]) PKG_CHECK_MODULES([fenced],[libfenced]) PKG_CHECK_MODULES([dlmcontrol],[libdlmcontrol]) +PKG_CHECK_MODULES([quorum],[libquorum]) # old versions of ncurses don't ship pkg-config files PKG_CHECK_MODULES([ncurses],[ncurses],,
1
0
0
0
gfs2-utils: master - gfs_controld: watch cluster membership
by David Teigland
15 Oct '09
15 Oct '09
Gitweb:
http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdif…
Commit: c87787214e61794d55fb424bf6b35a206c5f410a Parent: 8428fc6366ab3948099258548a325c7d34f182fb Author: David Teigland <teigland(a)redhat.com> AuthorDate: Thu Oct 15 12:56:34 2009 -0500 Committer: David Teigland <teigland(a)redhat.com> CommitterDate: Thu Oct 15 12:56:34 2009 -0500 gfs_controld: watch cluster membership Keep track of cluster membership changes so we can call the recently added node_history_cluster_{add,remove}. Copied from dlm_controld. Signed-off-by: David Teigland <teigland(a)redhat.com> --- group/gfs_controld/Makefile.am | 4 +- group/gfs_controld/gfs_daemon.h | 4 + group/gfs_controld/main.c | 8 ++ group/gfs_controld/member_cman.c | 131 +++++++++++++++++++++++++++++++++++--- 4 files changed, 136 insertions(+), 11 deletions(-) diff --git a/group/gfs_controld/Makefile.am b/group/gfs_controld/Makefile.am index 6e20244..f8d646d 100644 --- a/group/gfs_controld/Makefile.am +++ b/group/gfs_controld/Makefile.am @@ -17,8 +17,8 @@ gfs_controld_CPPFLAGS = -I$(top_srcdir)/group/libgfscontrol \ gfs_controld_CFLAGS = $(ccs_CFLAGS) $(logt_CFLAGS) $(dlmcontrol_CFLAGS) \ $(fenced_CFLAGS) $(sackpt_CFLAGS) $(cpg_CFLAGS) \ - $(cfg_CFLAGS) + $(cfg_CFLAGS) $(quorum_CFLAGS) gfs_controld_LDFLAGS = $(ccs_LIBS) $(logt_LIBS) $(dlmcontrol_LIBS) \ $(cpg_LIBS) $(cfg_LIBS) $(sackpt_LIBS) \ - $(fenced_LIBS) -lpthread + $(fenced_LIBS) $(quorum_LIBS) -lpthread diff --git a/group/gfs_controld/gfs_daemon.h b/group/gfs_controld/gfs_daemon.h index 1d89497..fdfc603 100644 --- a/group/gfs_controld/gfs_daemon.h +++ b/group/gfs_controld/gfs_daemon.h @@ -212,6 +212,10 @@ void process_connection(int ci); void cluster_dead(int ci); /* member_cman.c */ +int setup_cluster(void); +void close_cluster(void); +void process_cluster(int ci); +void update_cluster(void); int setup_cluster_cfg(void); void close_cluster_cfg(void); void process_cluster_cfg(int ci); diff --git a/group/gfs_controld/main.c b/group/gfs_controld/main.c index 2b5a87e..e52f04b 100644 --- a/group/gfs_controld/main.c +++ b/group/gfs_controld/main.c @@ -1049,6 +1049,13 @@ static void loop(void) goto out; client_add(rv, process_cluster_cfg, cluster_dead); + rv = setup_cluster(); + if (rv < 0) + goto out; + client_add(rv, process_cluster, cluster_dead); + + update_cluster(); + rv = setup_ccs(); if (rv < 0) goto out; @@ -1135,6 +1142,7 @@ static void loop(void) close_cpg_daemon(); close_logging(); close_ccs(); + close_cluster(); close_cluster_cfg(); if (!list_empty(&mountgroups)) diff --git a/group/gfs_controld/member_cman.c b/group/gfs_controld/member_cman.c index 16631d3..1c377f8 100644 --- a/group/gfs_controld/member_cman.c +++ b/group/gfs_controld/member_cman.c @@ -2,8 +2,129 @@ #include "config.h" #include <corosync/corotypes.h> #include <corosync/cfg.h> +#include <corosync/quorum.h> -static corosync_cfg_handle_t ch; +static corosync_cfg_handle_t ch; +static quorum_handle_t qh; +static uint32_t old_nodes[MAX_NODES]; +static int old_node_count; +static uint32_t quorum_nodes[MAX_NODES]; +static int quorum_node_count; + +static int is_member(uint32_t *node_list, int count, uint32_t nodeid) +{ + int i; + + for (i = 0; i < count; i++) { + if (node_list[i] == nodeid) + return 1; + } + return 0; +} + +static int is_old_member(uint32_t nodeid) +{ + return is_member(old_nodes, old_node_count, nodeid); +} + +int is_cluster_member(uint32_t nodeid) +{ + return is_member(quorum_nodes, quorum_node_count, nodeid); +} + +static void quorum_callback(quorum_handle_t h, uint32_t quorate, + uint64_t ring_seq, uint32_t node_list_entries, + uint32_t *node_list) +{ + int i; + + old_node_count = quorum_node_count; + memcpy(&old_nodes, &quorum_nodes, sizeof(old_nodes)); + + quorum_node_count = 0; + memset(&quorum_nodes, 0, sizeof(quorum_nodes)); + + for (i = 0; i < node_list_entries; i++) + quorum_nodes[quorum_node_count++] = node_list[i]; + + for (i = 0; i < old_node_count; i++) { + if (!is_cluster_member(old_nodes[i])) { + log_debug("cluster node %u removed", old_nodes[i]); + node_history_cluster_remove(old_nodes[i]); + } + } + + for (i = 0; i < quorum_node_count; i++) { + if (!is_old_member(quorum_nodes[i])) { + log_debug("cluster node %u added", quorum_nodes[i]); + node_history_cluster_add(quorum_nodes[i]); + } + } +} + +static quorum_callbacks_t quorum_callbacks = +{ + .quorum_notify_fn = quorum_callback, +}; + +void process_cluster(int ci) +{ + cs_error_t err; + + err = quorum_dispatch(qh, CS_DISPATCH_ALL); + if (err != CS_OK) + cluster_dead(0); +} + +/* Force re-read of quorum nodes */ +void update_cluster(void) +{ + cs_error_t err; + + err = quorum_dispatch(qh, CS_DISPATCH_ONE); + if (err != CS_OK) + cluster_dead(0); +} + +int setup_cluster(void) +{ + cs_error_t err; + int fd; + + err = quorum_initialize(&qh, &quorum_callbacks); + if (err != CS_OK) { + log_error("quorum init error %d", err); + return -1; + } + + err = quorum_fd_get(qh, &fd); + if (err != CS_OK) { + log_error("quorum fd_get error %d", err); + goto fail; + } + + err = quorum_trackstart(qh, CS_TRACK_CURRENT); + if (err != CS_OK) { + log_error("quorum trackstart error %d", err); + goto fail; + } + + old_node_count = 0; + memset(&old_nodes, 0, sizeof(old_nodes)); + quorum_node_count = 0; + memset(&quorum_nodes, 0, sizeof(quorum_nodes)); + + return fd; + fail: + quorum_finalize(qh); + return -1; +} + +void close_cluster(void) +{ + quorum_trackstop(qh); + quorum_finalize(qh); +} void kick_node_from_cluster(int nodeid) { @@ -84,11 +205,3 @@ void close_cluster_cfg(void) corosync_cfg_finalize(ch); } -/* what's the replacement for this? - * case CMAN_REASON_CONFIG_UPDATE: - * setup_logging(); - * setup_ccs(); - * break; - * } - */ -
1
0
0
0
gfs2-utils: master - Revert "gfs_controld: Remove three unused functions"
by David Teigland
15 Oct '09
15 Oct '09
Gitweb:
http://git.fedorahosted.org/git/gfs2-utils.git?p=gfs2-utils.git;a=commitdif…
Commit: 8428fc6366ab3948099258548a325c7d34f182fb Parent: b5c970dd8facb2b78aefc1b91ecd90bca192044e Author: David Teigland <teigland(a)redhat.com> AuthorDate: Thu Oct 15 11:42:41 2009 -0500 Committer: David Teigland <teigland(a)redhat.com> CommitterDate: Thu Oct 15 11:42:41 2009 -0500 Revert "gfs_controld: Remove three unused functions" This reverts commit b5c970dd8facb2b78aefc1b91ecd90bca192044e. --- group/gfs_controld/cpg-new.c | 36 ++++++++++++++++++++++++++++++++++++ group/gfs_controld/gfs_daemon.h | 3 +++ group/gfs_controld/main.c | 11 +++++++++++ 3 files changed, 50 insertions(+), 0 deletions(-) diff --git a/group/gfs_controld/cpg-new.c b/group/gfs_controld/cpg-new.c index e355590..23b7a86 100644 --- a/group/gfs_controld/cpg-new.c +++ b/group/gfs_controld/cpg-new.c @@ -530,6 +530,42 @@ static void node_history_init(struct mountgroup *mg, int nodeid, node->added_seq = cg->seq; /* for queries */ } +void node_history_cluster_add(int nodeid) +{ + struct mountgroup *mg; + struct node *node; + + list_for_each_entry(mg, &mountgroups, list) { + node_history_init(mg, nodeid, NULL); + + node = get_node_history(mg, nodeid); + if (!node) { + log_error("node_history_cluster_add no nodeid %d", + nodeid); + return; + } + + node->cluster_add_time = time(NULL); + } +} + +void node_history_cluster_remove(int nodeid) +{ + struct mountgroup *mg; + struct node *node; + + list_for_each_entry(mg, &mountgroups, list) { + node = get_node_history(mg, nodeid); + if (!node) { + log_error("node_history_cluster_remove no nodeid %d", + nodeid); + return; + } + + node->cluster_remove_time = time(NULL); + } +} + static void node_history_start(struct mountgroup *mg, int nodeid) { struct node *node; diff --git a/group/gfs_controld/gfs_daemon.h b/group/gfs_controld/gfs_daemon.h index 7199c00..1d89497 100644 --- a/group/gfs_controld/gfs_daemon.h +++ b/group/gfs_controld/gfs_daemon.h @@ -189,6 +189,8 @@ int set_mountgroups(int *count, struct gfsc_mountgroup **mgs_out); int set_mountgroup_nodes(struct mountgroup *mg, int option, int *node_count, struct gfsc_node **nodes_out); void free_mg(struct mountgroup *mg); +void node_history_cluster_add(int nodeid); +void node_history_cluster_remove(int nodeid); /* main.c */ int do_read(int fd, void *buf, size_t count); @@ -200,6 +202,7 @@ void client_ignore(int ci, int fd); void client_back(int ci, int fd); struct mountgroup *create_mg(char *name); struct mountgroup *find_mg(char *name); +struct mountgroup *find_mg_id(uint32_t id); void client_reply_remount(struct mountgroup *mg, int ci, int result); void client_reply_join(int ci, struct gfsc_mount_args *ma, int result); void client_reply_join_full(struct mountgroup *mg, int result); diff --git a/group/gfs_controld/main.c b/group/gfs_controld/main.c index 959954c..2b5a87e 100644 --- a/group/gfs_controld/main.c +++ b/group/gfs_controld/main.c @@ -178,6 +178,17 @@ struct mountgroup *find_mg(char *name) return NULL; } +struct mountgroup *find_mg_id(uint32_t id) +{ + struct mountgroup *mg; + + list_for_each_entry(mg, &mountgroups, list) { + if (mg->id == id) + return mg; + } + return NULL; +} + enum { Env_ACTION = 0, Env_SUBSYSTEM,
1
0
0
0
dlm: master - dlm_controld: tidy cman code
by David Teigland
15 Oct '09
15 Oct '09
Gitweb:
http://git.fedorahosted.org/git/dlm.git?p=dlm.git;a=commitdiff;h=3fe2f1f087…
Commit: 3fe2f1f087d64c52a4bdf7b86cc68699a2ac2a10 Parent: e0a214768b9b91e4b466405f0d24c4c634e6cfb2 Author: David Teigland <teigland(a)redhat.com> AuthorDate: Thu Oct 15 12:55:15 2009 -0500 Committer: David Teigland <teigland(a)redhat.com> CommitterDate: Thu Oct 15 12:55:15 2009 -0500 dlm_controld: tidy cman code To match the same code in gfs_controld. Signed-off-by: David Teigland <teigland(a)redhat.com> --- group/dlm_controld/main.c | 2 +- group/dlm_controld/member_cman.c | 40 ++++++++++++------------------------- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/group/dlm_controld/main.c b/group/dlm_controld/main.c index fe5be04..f90cd21 100644 --- a/group/dlm_controld/main.c +++ b/group/dlm_controld/main.c @@ -881,7 +881,7 @@ static void loop(void) setup_monitor(); - rv = setup_configfs(); + rv = setup_configfs(); /* calls update_cluster() */ if (rv < 0) goto out; diff --git a/group/dlm_controld/member_cman.c b/group/dlm_controld/member_cman.c index 880e3c1..b7fa8c3 100644 --- a/group/dlm_controld/member_cman.c +++ b/group/dlm_controld/member_cman.c @@ -12,19 +12,6 @@ static int old_node_count; static uint32_t quorum_nodes[MAX_NODES]; static int quorum_node_count; -void kick_node_from_cluster(int nodeid) -{ - if (!nodeid) { - log_error("telling corosync to shut down cluster locally"); - corosync_cfg_try_shutdown(ch, - COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE); - } else { - log_error("telling corosync to remove nodeid %d from cluster", - nodeid); - corosync_cfg_kill_node(ch, nodeid, "dlm_controld"); - } -} - static int is_member(uint32_t *node_list, int count, uint32_t nodeid) { int i; @@ -46,20 +33,6 @@ int is_cluster_member(uint32_t nodeid) return is_member(quorum_nodes, quorum_node_count, nodeid); } -/* what's the replacement for this? */ -#if 0 -static void cman_callback(cman_handle_t h, void *private, int reason, int arg) -{ - case CMAN_REASON_CONFIG_UPDATE: - setup_logging(); - setup_ccs(); - break; -} -#endif - -/* add a configfs dir for cluster members that don't have one, - del the configfs dir for cluster members that are now gone */ - static void quorum_callback(quorum_handle_t h, uint32_t quorate, uint64_t ring_seq, uint32_t node_list_entries, uint32_t *node_list) @@ -177,6 +150,19 @@ void close_cluster(void) quorum_finalize(qh); } +void kick_node_from_cluster(int nodeid) +{ + if (!nodeid) { + log_error("telling corosync to shut down cluster locally"); + corosync_cfg_try_shutdown(ch, + COROSYNC_CFG_SHUTDOWN_FLAG_IMMEDIATE); + } else { + log_error("telling corosync to remove nodeid %d from cluster", + nodeid); + corosync_cfg_kill_node(ch, nodeid, "dlm_controld"); + } +} + static void shutdown_callback(corosync_cfg_handle_t h, corosync_cfg_shutdown_flags_t flags) {
1
0
0
0
← Newer
1
...
4
5
6
7
8
9
10
...
16
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Results per page:
10
25
50
100
200