def main(argv): """main""" global KERNEL_RESERVED_MEM global USERLAND_RESERVED_MEM adv = Advanced.objects.order_by('-id')[0] if not adv.adv_autotune: return parser = argparse.ArgumentParser() parser.add_argument( '-c', '--conf', default='loader', type=str, choices=['loader', 'sysctl'], ) parser.add_argument('-o', '--overwrite', default=False, action="store_true") parser.add_argument( '-k', '--kernel-reserved', default=KERNEL_RESERVED_MEM, type=int, ) parser.add_argument( '-u', '--userland-reserved', default=USERLAND_RESERVED_MEM, type=int, ) args = parser.parse_args() knobs = DEF_KNOBS.get(args.conf) if not knobs: parser.error('Invalid conf specified: %s' % (args.conf, )) if args.kernel_reserved < DEFAULT_KERNEL_RESERVED_MEM: parser.error('Value specified for --kernel-reserved is < %d' % (DEFAULT_KERNEL_RESERVED_MEM, )) KERNEL_RESERVED_MEM = args.kernel_reserved if args.userland_reserved < DEFAULT_USERLAND_RESERVED_MEM: parser.error('Value specified for --userland-reserved is < %d' % (DEFAULT_USERLAND_RESERVED_MEM, )) USERLAND_RESERVED_MEM = args.userland_reserved recommendations = {} for knob in knobs: func = 'guess_%s()' % (knob.replace('.', '_'), ) retval = eval(func) if retval is None: continue recommendations[knob] = str(retval) changed_values = False open(NO_HASYNC, 'w').close() for var, value in recommendations.items(): qs = Tunable.objects.filter(tun_var=var) if qs.exists() and not args.overwrite: # Already exists and we're honoring the user setting. Move along. continue if qs.exists(): obj = qs[0] # We bail out here because if we set a value to what the database # already has we'll set changed_values = True which will # cause ix-loader to reboot the system. if obj.tun_value == value: continue else: obj = Tunable() obj.tun_var = var obj.tun_value = value obj.tun_type = args.conf obj.tun_comment = 'Generated by autotune' obj.save() # If we got this far, that means the database save went through just # fine at least once. changed_values = True cleanup() if changed_values: # Informs the caller that a change was made and a reboot is required. sys.exit(2)
def fiberchanneltotarget(request): i = 0 sysctl_set = {} loader = False while True: fc_port = request.POST.get('fcport-%d-port' % i) fc_target = request.POST.get('fcport-%d-target' % i) if fc_port is None: break port_number = int(fc_port.replace('isp', '')) role = sysctl.filter('dev.isp.%d.role' % int(port_number)) if role: role = role[0] tun_var = 'hint.isp.%d.role' % port_number qs = models.FiberChannelToTarget.objects.filter(fc_port=fc_port) if qs.exists(): fctt = qs[0] else: fctt = models.FiberChannelToTarget() fctt.fc_port = fc_port # Initiator mode if fc_target in ('false', False): if role: # From disabled to initiator, just set sysctl if role.value == 0: role.value = 2 # From target to initiator, reload ctld then set to 2 elif role.value == 1: sysctl_set[int(port_number)] = 2 fctt.fc_target = None fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): tun = qs[0] if tun.tun_value != '2': tun.tun_value = '2' loader = True tun.save() else: tun = Tunable() tun.tun_var = tun_var tun.tun_value = '2' tun.save() loader = True # Disabled elif fc_target is None: if role: # From initiator to disabled, just set sysctl if role.value == 2: role.value = 0 if fctt.id: fctt.delete() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() # Target mode else: if role: # From initiator to target, first set sysctl if role.value == 2: role.value = 0 fctt.fc_target = models.iSCSITarget.objects.get(id=fc_target) fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() i += 1 if i > 0: notifier().reload("iscsitarget") for port, val in sysctl_set.items(): role = sysctl.filter('dev.isp.%d.role' % int(port)) if role: role = role[0] role.value = val if loader: notifier().reload('loader') return JsonResp( request, message=_('Fiber Channel Ports have been successfully changed.'), )
def main(argv): """main""" global KERNEL_RESERVED_MEM global USERLAND_RESERVED_MEM adv = Advanced.objects.order_by('-id')[0] if not adv.adv_autotune: return parser = argparse.ArgumentParser() parser.add_argument('-c', '--conf', default='loader', type=str, choices=['loader', 'sysctl'], ) parser.add_argument('-o', '--overwrite', default=False, action="store_true" ) parser.add_argument('-k', '--kernel-reserved', default=KERNEL_RESERVED_MEM, type=int, ) parser.add_argument('-u', '--userland-reserved', default=USERLAND_RESERVED_MEM, type=int, ) args = parser.parse_args() knobs = DEF_KNOBS.get(args.conf) if not knobs: parser.error('Invalid conf specified: %s' % (args.conf, )) if args.kernel_reserved < DEFAULT_KERNEL_RESERVED_MEM: parser.error('Value specified for --kernel-reserved is < %d' % (DEFAULT_KERNEL_RESERVED_MEM, )) KERNEL_RESERVED_MEM = args.kernel_reserved if args.userland_reserved < DEFAULT_USERLAND_RESERVED_MEM: parser.error('Value specified for --userland-reserved is < %d' % (DEFAULT_USERLAND_RESERVED_MEM, )) USERLAND_RESERVED_MEM = args.userland_reserved recommendations = {} for knob in knobs: func = 'guess_%s()' % (knob.replace('.', '_'), ) retval = eval(func) if retval is None: continue recommendations[knob] = str(retval) changed_values = False open(NO_HASYNC, 'w').close() for var, value in recommendations.items(): qs = Tunable.objects.filter(tun_var=var) if qs.exists() and not args.overwrite: # Already exists and we're honoring the user setting. Move along. continue if qs.exists(): obj = qs[0] # We bail out here because if we set a value to what the database # already has we'll set changed_values = True which will # cause ix-loader to reboot the system. if obj.tun_type == args.conf and obj.tun_value == value: continue else: obj = Tunable() obj.tun_var = var obj.tun_value = value obj.tun_type = args.conf obj.tun_comment = 'Generated by autotune' obj.save() # If we got this far, that means the database save went through just # fine at least once. changed_values = True cleanup() if changed_values: # Informs the caller that a change was made and a reboot is required. sys.exit(2)
def fibrechanneltotarget(request): i = 0 sysctl_set = {} loader = False while True: fc_port = request.POST.get('fcport-%d-port' % i) fc_target = request.POST.get('fcport-%d-target' % i) if fc_port is None: break port = fc_port.replace('isp', '').replace('/', ',') if ',' in port: port_number, vport = port.split(',', 1) mibname = '%s.chan%s' % (port_number, vport) else: port_number = port vport = None mibname = port role = sysctl.filter('dev.isp.%s.role' % mibname) if role: role = role[0] tun_var = 'hint.isp.%s.role' % mibname qs = models.FibreChannelToTarget.objects.filter(fc_port=fc_port) if qs.exists(): fctt = qs[0] else: fctt = models.FibreChannelToTarget() fctt.fc_port = fc_port # Initiator mode if fc_target in ('false', False): if role: # From disabled to initiator, just set sysctl if role.value == 0: role.value = 2 # From target to initiator, reload ctld then set to 2 elif role.value == 1: sysctl_set[mibname] = 2 fctt.fc_target = None fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): tun = qs[0] if tun.tun_value != '2': tun.tun_value = '2' loader = True tun.save() else: tun = Tunable() tun.tun_var = tun_var tun.tun_value = '2' tun.save() loader = True # Disabled elif fc_target is None: if role: # From initiator to disabled, just set sysctl if role.value == 2: role.value = 0 if fctt.id: fctt.delete() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() # Target mode else: if role: # From initiator to target, first set sysctl if role.value == 2: role.value = 0 fctt.fc_target = models.iSCSITarget.objects.get(id=fc_target) fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() i += 1 if i > 0: notifier().reload("iscsitarget") for mibname, val in list(sysctl_set.items()): role = sysctl.filter('dev.isp.%s.role' % mibname) if role: role = role[0] role.value = val if loader: notifier().reload('loader') return JsonResp( request, message=_('Fibre Channel Ports have been successfully changed.'), )
def fibrechanneltotarget(request): i = 0 sysctl_set = {} loader = False while True: fc_port = request.POST.get("fcport-%d-port" % i) fc_target = request.POST.get("fcport-%d-target" % i) if fc_port is None: break port = fc_port.replace("isp", "").replace("/", ",") if "," in port: port_number, vport = port.split(",", 1) mibname = "%s.chan%s" % (port_number, vport) else: port_number = port vport = None mibname = port role = sysctl.filter("dev.isp.%s.role" % mibname) if role: role = role[0] tun_var = "hint.isp.%s.role" % mibname qs = models.FibreChannelToTarget.objects.filter(fc_port=fc_port) if qs.exists(): fctt = qs[0] else: fctt = models.FibreChannelToTarget() fctt.fc_port = fc_port # Initiator mode if fc_target in ("false", False): if role: # From disabled to initiator, just set sysctl if role.value == 0: role.value = 2 # From target to initiator, reload ctld then set to 2 elif role.value == 1: sysctl_set[mibname] = 2 fctt.fc_target = None fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): tun = qs[0] if tun.tun_value != "2": tun.tun_value = "2" loader = True tun.save() else: tun = Tunable() tun.tun_var = tun_var tun.tun_value = "2" tun.save() loader = True # Disabled elif fc_target is None: if role: # From initiator to disabled, just set sysctl if role.value == 2: role.value = 0 if fctt.id: fctt.delete() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() # Target mode else: if role: # From initiator to target, first set sysctl if role.value == 2: role.value = 0 fctt.fc_target = models.iSCSITarget.objects.get(id=fc_target) fctt.save() qs = Tunable.objects.filter(tun_var=tun_var) if qs.exists(): loader = True qs.delete() i += 1 if i > 0: notifier().reload("iscsitarget") for mibname, val in sysctl_set.items(): role = sysctl.filter("dev.isp.%s.role" % mibname) if role: role = role[0] role.value = val if loader: notifier().reload("loader") return JsonResp(request, message=_("Fibre Channel Ports have been successfully changed."))