- fence_ibm_powervs: performance improvements
Resolves: rhbz#2155453
This commit is contained in:
		
							parent
							
								
									acc7086b1d
								
							
						
					
					
						commit
						8a918a13d7
					
				
							
								
								
									
										150
									
								
								bz2155453-fence_ibm_powervs-performance-improvements.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								bz2155453-fence_ibm_powervs-performance-improvements.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,150 @@ | |||||||
|  | From 22935608247816be0ccec85fc590f19b509f3614 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Andreas Schauberer <74912604+andscha@users.noreply.github.com> | ||||||
|  | Date: Thu, 15 Jun 2023 16:34:13 +0200 | ||||||
|  | Subject: [PATCH 1/3] fence_ibm_powervs: improved performance | ||||||
|  | 
 | ||||||
|  | fence_ibm_powervs: improved performance | ||||||
|  | - improved performance using less power-iaas.cloud.ibm.com API calls
 | ||||||
|  | - add support for reboot_cycle, method to fence (onoff|cycle) (Default: onoff)
 | ||||||
|  | 
 | ||||||
|  | Addressed comments by oalbrigt in ClusterLabs #PR542 | ||||||
|  | - you can use if options["--verbose-level"] > 1: to only print it when -vv or more or verbose_level is set to 2 or higher.
 | ||||||
|  | - Removed all_opt["method"] defaults
 | ||||||
|  | ---
 | ||||||
|  |  agents/ibm_powervs/fence_ibm_powervs.py | 70 ++++++++++++++++++------- | ||||||
|  |  1 file changed, 51 insertions(+), 19 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/agents/ibm_powervs/fence_ibm_powervs.py b/agents/ibm_powervs/fence_ibm_powervs.py
 | ||||||
|  | index 183893616..e65462cb9 100755
 | ||||||
|  | --- a/agents/ibm_powervs/fence_ibm_powervs.py
 | ||||||
|  | +++ b/agents/ibm_powervs/fence_ibm_powervs.py
 | ||||||
|  | @@ -12,6 +12,8 @@
 | ||||||
|  |  state = { | ||||||
|  |  	 "ACTIVE": "on", | ||||||
|  |  	 "SHUTOFF": "off", | ||||||
|  | +	 "HARD_REBOOT": "on",
 | ||||||
|  | +	 "SOFT_REBOOT": "on",
 | ||||||
|  |  	 "ERROR": "unknown" | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | @@ -37,21 +39,30 @@ def get_list(conn, options):
 | ||||||
|  |  		return outlets | ||||||
|  |   | ||||||
|  |  	for r in res["pvmInstances"]: | ||||||
|  | -		if "--verbose" in options:
 | ||||||
|  | +		if options["--verbose-level"] > 1:
 | ||||||
|  |  			logging.debug(json.dumps(r, indent=2)) | ||||||
|  |  		outlets[r["pvmInstanceID"]] = (r["serverName"], state[r["status"]]) | ||||||
|  |   | ||||||
|  |  	return outlets | ||||||
|  |   | ||||||
|  |  def get_power_status(conn, options): | ||||||
|  | +	outlets = {}
 | ||||||
|  | +	logging.debug("Info: getting power status for LPAR " + options["--plug"] + " instance " + options["--instance"])
 | ||||||
|  |  	try: | ||||||
|  |  		command = "cloud-instances/{}/pvm-instances/{}".format( | ||||||
|  |  				options["--instance"], options["--plug"]) | ||||||
|  |  		res = send_command(conn, command) | ||||||
|  | -		result = get_list(conn, options)[options["--plug"]][1]
 | ||||||
|  | +		outlets[res["pvmInstanceID"]] = (res["serverName"], state[res["status"]])
 | ||||||
|  | +		if options["--verbose-level"] > 1:
 | ||||||
|  | +			logging.debug(json.dumps(res, indent=2))
 | ||||||
|  | +		result = outlets[options["--plug"]][1]
 | ||||||
|  | +		logging.debug("Info: Status: {}".format(result))
 | ||||||
|  |  	except KeyError as e: | ||||||
|  | -		logging.debug("Failed: Unable to get status for {}".format(e))
 | ||||||
|  | -		fail(EC_STATUS)
 | ||||||
|  | +		try:
 | ||||||
|  | +			result = get_list(conn, options)[options["--plug"]][1]
 | ||||||
|  | +		except KeyError as ex:
 | ||||||
|  | +			logging.debug("Failed: Unable to get status for {}".format(ex))
 | ||||||
|  | +			fail(EC_STATUS)
 | ||||||
|  |   | ||||||
|  |  	return result | ||||||
|  |   | ||||||
|  | @@ -61,6 +72,7 @@ def set_power_status(conn, options):
 | ||||||
|  |  		"off" : '{"action" : "immediate-shutdown"}', | ||||||
|  |  	}[options["--action"]] | ||||||
|  |   | ||||||
|  | +	logging.debug("Info: set power status to " + options["--action"] + " for LPAR " + options["--plug"] + " instance " + options["--instance"])
 | ||||||
|  |  	try: | ||||||
|  |  		send_command(conn, "cloud-instances/{}/pvm-instances/{}/action".format( | ||||||
|  |  				options["--instance"], options["--plug"]), "POST", action) | ||||||
|  | @@ -68,6 +80,25 @@ def set_power_status(conn, options):
 | ||||||
|  |  		logging.debug("Failed: Unable to set power to {} for {}".format(options["--action"], e)) | ||||||
|  |  		fail(EC_STATUS) | ||||||
|  |   | ||||||
|  | +def reboot_cycle(conn, options):
 | ||||||
|  | +	action = {
 | ||||||
|  | +		"reboot" :  '{"action" : "hard-reboot"}',
 | ||||||
|  | +	}[options["--action"]]
 | ||||||
|  | +
 | ||||||
|  | +	logging.debug("Info: start reboot cycle with action " + options["--action"] + " for LPAR " + options["--plug"] + " instance " + options["--instance"])
 | ||||||
|  | +	try:
 | ||||||
|  | +		send_command(conn, "cloud-instances/{}/pvm-instances/{}/action".format(
 | ||||||
|  | +				options["--instance"], options["--plug"]), "POST", action)
 | ||||||
|  | +	except Exception as e:
 | ||||||
|  | +		result = get_power_status(conn, options)
 | ||||||
|  | +		logging.debug("Info: Status {}".format(result))
 | ||||||
|  | +		if result == "off":
 | ||||||
|  | +			return True
 | ||||||
|  | +		else:
 | ||||||
|  | +			logging.debug("Failed: Unable to cycle with {} for {}".format(options["--action"], e))
 | ||||||
|  | +			fail(EC_STATUS)
 | ||||||
|  | +	return True 
 | ||||||
|  | +
 | ||||||
|  |  def connect(opt, token): | ||||||
|  |  	conn = pycurl.Curl() | ||||||
|  |   | ||||||
|  | @@ -200,21 +231,21 @@ def define_new_opts():
 | ||||||
|  |  		"order" : 0 | ||||||
|  |  	} | ||||||
|  |  	all_opt["api-type"] = { | ||||||
|  | -                "getopt" : ":",
 | ||||||
|  | -                "longopt" : "api-type",
 | ||||||
|  | -                "help" : "--api-type=[public|private]          API-type: 'public' (default) or 'private'",
 | ||||||
|  | -                "required" : "0",
 | ||||||
|  | -                "shortdesc" : "API-type (public|private)",
 | ||||||
|  | -                "order" : 0
 | ||||||
|  | -        }
 | ||||||
|  | +		"getopt" : ":",
 | ||||||
|  | +		"longopt" : "api-type",
 | ||||||
|  | +		"help" : "--api-type=[public|private]          API-type: 'public' (default) or 'private'",
 | ||||||
|  | +		"required" : "0",
 | ||||||
|  | +		"shortdesc" : "API-type (public|private)",
 | ||||||
|  | +		"order" : 0
 | ||||||
|  | +	}
 | ||||||
|  |  	all_opt["proxy"] = { | ||||||
|  | -                "getopt" : ":",
 | ||||||
|  | -                "longopt" : "proxy",
 | ||||||
|  | -                "help" : "--proxy=[http://<URL>:<PORT>]          Proxy: 'http://<URL>:<PORT>'",
 | ||||||
|  | -                "required" : "0",
 | ||||||
|  | -                "shortdesc" : "Network proxy",
 | ||||||
|  | -                "order" : 0
 | ||||||
|  | -        }
 | ||||||
|  | +		"getopt" : ":",
 | ||||||
|  | +		"longopt" : "proxy",
 | ||||||
|  | +		"help" : "--proxy=[http://<URL>:<PORT>]          Proxy: 'http://<URL>:<PORT>'",
 | ||||||
|  | +		"required" : "0",
 | ||||||
|  | +		"shortdesc" : "Network proxy",
 | ||||||
|  | +		"order" : 0
 | ||||||
|  | +	}
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  |  def main(): | ||||||
|  | @@ -227,6 +258,7 @@ def main():
 | ||||||
|  |  		"proxy", | ||||||
|  |  		"port", | ||||||
|  |  		"no_password", | ||||||
|  | +		"method",
 | ||||||
|  |  	] | ||||||
|  |   | ||||||
|  |  	atexit.register(atexit_handler) | ||||||
|  | @@ -259,7 +291,7 @@ def main():
 | ||||||
|  |  	conn = connect(options, token) | ||||||
|  |  	atexit.register(disconnect, conn) | ||||||
|  |   | ||||||
|  | -	result = fence_action(conn, options, set_power_status, get_power_status, get_list)
 | ||||||
|  | +	result = fence_action(conn, options, set_power_status, get_power_status, get_list, reboot_cycle)
 | ||||||
|  |   | ||||||
|  |  	sys.exit(result) | ||||||
| @ -87,7 +87,7 @@ | |||||||
| Name: fence-agents | Name: fence-agents | ||||||
| Summary: Set of unified programs capable of host isolation ("fencing") | Summary: Set of unified programs capable of host isolation ("fencing") | ||||||
| Version: 4.2.1 | Version: 4.2.1 | ||||||
| Release: 118%{?alphatag:.%{alphatag}}%{?dist} | Release: 119%{?alphatag:.%{alphatag}}%{?dist} | ||||||
| License: GPLv2+ and LGPLv2+ | License: GPLv2+ and LGPLv2+ | ||||||
| Group: System Environment/Base | Group: System Environment/Base | ||||||
| URL: https://github.com/ClusterLabs/fence-agents | URL: https://github.com/ClusterLabs/fence-agents | ||||||
| @ -273,6 +273,7 @@ Patch130: bz2187329-fence_scsi-1-detect-devices-in-shared-vgs.patch | |||||||
| Patch131: bz2187329-fence_scsi-2-support-space-separated-devices.patch | Patch131: bz2187329-fence_scsi-2-support-space-separated-devices.patch | ||||||
| Patch132: bz2211460-fence_azure-arm-1-stack-hub-support.patch | Patch132: bz2211460-fence_azure-arm-1-stack-hub-support.patch | ||||||
| Patch133: bz2211460-fence_azure-arm-2-metadata-endpoint-error-message.patch | Patch133: bz2211460-fence_azure-arm-2-metadata-endpoint-error-message.patch | ||||||
|  | Patch134: bz2155453-fence_ibm_powervs-performance-improvements.patch | ||||||
| 
 | 
 | ||||||
| %if 0%{?fedora} || 0%{?rhel} > 7 | %if 0%{?fedora} || 0%{?rhel} > 7 | ||||||
| %global supportedagents amt_ws apc apc_snmp bladecenter brocade cisco_mds cisco_ucs compute drac5 eaton_snmp emerson eps evacuate hds_cb hpblade ibmblade ibm_powervs ibm_vpc ifmib ilo ilo_moonshot ilo_mp ilo_ssh intelmodular ipdu ipmilan kdump kubevirt lpar mpath redfish rhevm rsa rsb sbd scsi vmware_rest vmware_soap wti | %global supportedagents amt_ws apc apc_snmp bladecenter brocade cisco_mds cisco_ucs compute drac5 eaton_snmp emerson eps evacuate hds_cb hpblade ibmblade ibm_powervs ibm_vpc ifmib ilo ilo_moonshot ilo_mp ilo_ssh intelmodular ipdu ipmilan kdump kubevirt lpar mpath redfish rhevm rsa rsb sbd scsi vmware_rest vmware_soap wti | ||||||
| @ -484,6 +485,7 @@ BuildRequires: python3-google-api-client python3-pip python3-wheel python3-jinja | |||||||
| %patch131 -p1 | %patch131 -p1 | ||||||
| %patch132 -p1 | %patch132 -p1 | ||||||
| %patch133 -p1 | %patch133 -p1 | ||||||
|  | %patch134 -p1 | ||||||
| 
 | 
 | ||||||
| # prevent compilation of something that won't get used anyway | # prevent compilation of something that won't get used anyway | ||||||
| sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac | sed -i.orig 's|FENCE_ZVM=1|FENCE_ZVM=0|' configure.ac | ||||||
| @ -1481,6 +1483,10 @@ Fence agent for IBM z/VM over IP. | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Jul 11 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-119 | ||||||
|  | - fence_ibm_powervs: performance improvements | ||||||
|  |   Resolves: rhbz#2155453 | ||||||
|  | 
 | ||||||
| * Mon Jul  3 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-118 | * Mon Jul  3 2023 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.2.1-118 | ||||||
| - fence_azure_arm: add Stack Hub support | - fence_azure_arm: add Stack Hub support | ||||||
|   Resolves: rhbz#2211460 |   Resolves: rhbz#2211460 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user