From 3c4f38dd5d88813899846dc75cb2a63d45c9e06d Mon Sep 17 00:00:00 2001 From: pschwan Date: Mon, 28 Oct 2002 19:30:55 +0000 Subject: [PATCH] Backout sravi's changes; please contact Robert with your patches. --- lustre/utils/lconf | 291 +++++++++++++++++------------------------------------ lustre/utils/lmc | 36 ++----- 2 files changed, 99 insertions(+), 228 deletions(-) diff --git a/lustre/utils/lconf b/lustre/utils/lconf index 8f2c50a..a0b90ab 100755 --- a/lustre/utils/lconf +++ b/lustre/utils/lconf @@ -2,8 +2,6 @@ # # Copyright (C) 2002 Cluster File Systems, Inc. # Author: Robert Read -# : Ravindranadh Chowdary Sahukara - # This file is part of Lustre, http://www.lustre.org. # # Lustre is free software; you can redistribute it and/or @@ -38,7 +36,6 @@ DEFAULT_TCPBUF = 1048576 # # Maximum number of devices to search for. # (the /dev/loop* nodes need to be created beforehand) - MAX_LOOP_DEVICES = 256 first_cleanup_error = 0 @@ -47,13 +44,14 @@ def cleanup_error(rc): if not first_cleanup_error: first_cleanup_error = rc + def usage(): print """usage: lconf config.xml config.xml Lustre configuration in xml format. --get URL to fetch a config file --node Load config for --d | --cleanup Cleans up config. (Shutdown) +-d | --cleanup Cleans up config. (Shutdown) -f | --force Forced unmounting and/or obd detach during cleanup -v | --verbose Print system commands as they are run -h | --help Print this help @@ -64,10 +62,8 @@ config.xml Lustre configuration in xml format. config file is doing what it should be doing. (Implies -v) --nomod Skip load/unload module step. --nosetup Skip device setup/cleanup step. ---reformat Reformat all devices (without question) ---dump Dump the kernel debug log before portals is unloaded ---start [client|MDS|OST] Start the client|MDS|OST services (bug is there need to fixit) ---stop [client|MDS|OST] Stop the client|MDS|OST services (bug is there need to fix it) +--reformat Reformat all devices (without question) +--dump Dump the kernel debug log before portals is unloaded --startlevel Specify the level of services to start with (default 0) --endlevel Specify the level of services to end with (default 100) Levels are aproximatly like: @@ -80,7 +76,7 @@ config.xml Lustre configuration in xml format. 70 - mountpoint """ TODO = """ ---ldap server LDAP server with lustre config database +--ldap server LDAP server with lustre config database --makeldiff Translate xml source to LDIFF This are perhaps not needed: --lustre="src dir" Base directory of lustre sources. Used to search @@ -101,8 +97,6 @@ class Config: self._gdb = 0 self._nomod = 0 self._nosetup = 0 - self._start= "" - self._stop= 0 self._force = 0 # parameters self._modules = None @@ -143,14 +137,6 @@ class Config: if flag: self._nosetup = flag return self._nosetup - def start(self, flag = None): - if flag: self._start= flag - return self._start - - def stop(self, flag = None): - if flag: self._stop= flag - return self._stop - def force(self, flag = None): if flag: self._force = flag return self._force @@ -191,6 +177,8 @@ class Config: if val: self._end_level = int(val) return self._end_level + + config = Config() # ============================================================ @@ -267,7 +255,7 @@ class LCTLInterface: self.lctl = 'lctl' else: raise CommandError('lctl', "unable to find lctl binary.") - + def run(self, cmds): """ run lctl @@ -340,7 +328,7 @@ class LCTLInterface: self.run(cmds) - # delete a route + # add a route to a range def del_route(self, net, gw, lo, hi): cmds = """ ignore_errors @@ -607,7 +595,6 @@ def if2addr(iface): ip = string.split(addr, ':')[1] return ip - def get_local_address(net_type, wildcard): """Return the local address for the network type.""" local = "" @@ -659,6 +646,7 @@ class Module: msg = string.join(map(str,args)) print self.module_name + ":", self.name, self.uuid, msg + def lookup_server(self, srv_uuid): """ Lookup a server's network information """ net = get_ost_net(self.dom_node.parentNode, srv_uuid) @@ -771,7 +759,6 @@ class Network(Module): ret, out = run(TCP_ACCEPTOR, '-s', self.send_mem, '-r', self.recv_mem, self.port) if ret: raise CommandError(TCP_ACCEPTOR, out, ret) - ret = self.dom_node.getElementsByTagName('route_tbl') for a in ret: for r in a.getElementsByTagName('route'): @@ -791,8 +778,6 @@ class Network(Module): lctl.network(self.net_type, self.nid) lctl.newdev(attach = "ptlrpc RPCDEV") - - def cleanup(self): self.info(self.net_type, self.nid, self.port) ret = self.dom_node.getElementsByTagName('route_tbl') @@ -805,7 +790,6 @@ class Network(Module): if not srv: panic("no server for nid", lo) else: - try: lctl.disconnect(srv.net_type, srv.nid, srv.port, srv.uuid) except CommandError, e: @@ -818,6 +802,7 @@ class Network(Module): print "del_route failed: ", self.name e.dump() cleanup_error(e.rc) + try: lctl.cleanup("RPCDEV", "") except CommandError, e: @@ -847,12 +832,8 @@ class LOV(Module): def __init__(self,dom_node): Module.__init__(self, 'LOV', dom_node) self.mds_uuid = get_first_ref(dom_node, 'mds') - self.mdc_uuid = get_first_ref(dom_node, 'mdc') mds= lookup(dom_node.parentNode, self.mds_uuid) - self.mdc = lookup(dom_node.parentNode, self.mdc_uuid) - if mds: - self.mds_name = getName(mds) - + self.mds_name = getName(mds) devs = dom_node.getElementsByTagName('devices') if len(devs) > 0: dev_node = devs[0] @@ -872,9 +853,11 @@ class LOV(Module): n.prepare() else: panic('osc not found:', osc_uuid) - mdc_uuid = get_first_ref(self.dom_node,'mdc') - self.info(mdc_uuid, self.stripe_cnt, self.stripe_sz, self.stripe_off, self.pattern, self.devlist,self.mds_name) - lctl.newdev(attach="lov %s %s" % (self.name, self.uuid), setup ="%s" % (mdc_uuid)) + mdc_uuid = prepare_mdc(self.dom_node.parentNode, self.mds_uuid) + self.info(self.mds_uuid, self.stripe_cnt, self.stripe_sz, + self.stripe_off, self.pattern, self.devlist, self.mds_name) + lctl.newdev(attach="lov %s %s" % (self.name, self.uuid), + setup ="%s" % (mdc_uuid)) def cleanup(self): for osc_uuid in self.devlist: @@ -885,10 +868,7 @@ class LOV(Module): else: panic('osc not found:', osc_uuid) Module.cleanup(self) - n = MDC(self.mdc) - global mdc_cleaned - mdc_cleaned = None - n.cleanup() + cleanup_mdc(self.dom_node.parentNode, self.mds_uuid) def load_module(self): @@ -902,6 +882,7 @@ class LOV(Module): panic('osc not found:', osc_uuid) Module.load_module(self) + def cleanup_module(self): Module.cleanup_module(self) for osc_uuid in self.devlist: @@ -922,12 +903,11 @@ class LOVConfig(Module): def prepare(self): lov = self.lov - oscUUIDs="" - for i in range(len(lov.devlist)): - oscUUIDs=oscUUIDs+" "+lov.devlist[i] - self.info(lov.mds_uuid, lov.stripe_cnt, lov.stripe_sz, lov.stripe_off, lov.pattern, oscUUIDs) - - lctl.lov_setconfig(lov.uuid, lov.mds_name, lov.stripe_cnt, lov.stripe_sz, lov.stripe_off, lov.pattern, oscUUIDs) + self.info(lov.mds_uuid, lov.stripe_cnt, lov.stripe_sz, lov.stripe_off, + lov.pattern, lov.devlist, lov.mds_name) + lctl.lov_setconfig(lov.uuid, lov.mds_name, lov.stripe_cnt, + lov.stripe_sz, lov.stripe_off, lov.pattern, + string.join(lov.devlist)) def cleanup(self): #nothing to do here @@ -944,7 +924,7 @@ class MDS(Module): self.add_module('lustre/extN', 'extN') self.add_module('lustre/mds', 'mds') self.add_module('lustre/mds', 'mds_%s' % (self.fstype)) - + def prepare(self): self.info(self.devname, self.fstype, self.format) blkdev = block_dev(self.devname, self.size, self.fstype, self.format) @@ -954,53 +934,31 @@ class MDS(Module): Module.cleanup(self) clean_loop(self.devname) -mdc_cleaned = None # Very unusual case, as there is no MDC element in the XML anymore # Builds itself from an MDS node class MDC(Module): def __init__(self,dom_node): - Module.__init__(self, 'MDC', dom_node) - self.mds_uuid = get_first_ref(dom_node,'mds') + self.mds = MDS(dom_node) self.dom_node = dom_node self.module_name = 'MDC' self.kmodule_list = [] self._server = None self._connected = 0 + host = socket.gethostname() + self.name = 'MDC_'+host + self.uuid = self.name+'_UUID' - self.net_uuid = get_first_ref(dom_node, 'network') - net = get_osc_net(dom_node,self.net_uuid) - self._server = Network(net) - self.add_module('lustre/mdc','mdc') - self.mdcname = get_attr(dom_node, 'name') - self.mdcuuid = get_attr(dom_node, 'uuid') + self.lookup_server(self.mds.uuid) + self.add_module('lustre/mdc', 'mdc') def prepare(self): - self.info(self.uuid) + self.info(self.mds.uuid) srv = self.get_server() lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_mem, srv.recv_mem) lctl.newdev(attach="mdc %s %s" % (self.name, self.uuid), - setup ="%s %s" %(self.mds_uuid, srv.uuid)) - - def cleanup(self): - global mdc_cleaned - if not mdc_cleaned: - srv = self.get_server() - if local_net(srv): - Module.cleanup(self) - mdc_cleaned = 'yes' - else: - self.info(self.uuid) - r = find_route(srv) - if r: - try: - lctl.del_route_host(r[0], srv.uuid, r[1], r[2]) - except CommandError, e: - print "del_route failed: ", self.name - e.dump() - cleanup_error(e.rc) - Module.cleanup(self) - + setup ="%s %s" %(self.mds.uuid, srv.uuid)) + class OBD(Module): def __init__(self, dom_node): Module.__init__(self, 'OBD', dom_node) @@ -1062,14 +1020,12 @@ class OSC(Module): def __init__(self,dom_node): Module.__init__(self, 'OSC', dom_node) self.obd_uuid = get_first_ref(dom_node, 'obd') - - self.net_uuid = get_first_ref(dom_node,'network') - net = get_osc_net(dom_node,self.net_uuid) - self._server = Network(net) + self.ost_uuid = get_first_ref(dom_node, 'ost') + self.lookup_server(self.ost_uuid) self.add_module('lustre/osc', 'osc') def prepare(self): - self.info(self.obd_uuid,self.uuid) + self.info(self.obd_uuid, self.ost_uuid) srv = self.get_server() if local_net(srv): lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_mem, srv.recv_mem) @@ -1098,36 +1054,33 @@ class OSC(Module): e.dump() cleanup_error(e.rc) Module.cleanup(self) - - + class Mountpoint(Module): def __init__(self,dom_node): Module.__init__(self, 'MTPT', dom_node) - self.dom_node = dom_node self.path = get_text(dom_node, 'path') - self.mdc_uuid = get_first_ref(dom_node, 'mdc') + self.mds_uuid = get_first_ref(dom_node, 'mds') self.lov_uuid = get_first_ref(dom_node, 'osc') self.add_module('lustre/mdc', 'mdc') self.add_module('lustre/llite', 'llite') l = lookup(self.dom_node.parentNode, self.lov_uuid) self.osc = VOSC(l) - m = lookup(self.dom_node.parentNode, self.mdc_uuid) - self.mdc = MDC(m) def prepare(self): - self.mdc.prepare() self.osc.prepare() - self.info(self.path, self.mdc_uuid,self.lov_uuid) + mdc_uuid = prepare_mdc(self.dom_node.parentNode, self.mds_uuid) + + self.info(self.path, self.mds_uuid,self.lov_uuid) cmd = "mount -t lustre_lite -o osc=%s,mdc=%s none %s" % \ - (self.lov_uuid, self.mdc_uuid, self.path) + (self.lov_uuid, mdc_uuid, self.path) run("mkdir", self.path) ret, val = run(cmd) if ret: panic("mount failed:", self.path) def cleanup(self): - self.info(self.path, self.mdc_uuid,self.lov_uuid) + self.info(self.path, self.mds_uuid,self.lov_uuid) if config.force(): (rc, out) = run("umount -f", self.path) else: @@ -1136,7 +1089,7 @@ class Mountpoint(Module): log("umount failed, cleanup will most likely not work.") l = lookup(self.dom_node.parentNode, self.lov_uuid) self.osc.cleanup() - self.mdc.cleanup() + cleanup_mdc(self.dom_node.parentNode, self.mds_uuid) def load_module(self): self.osc.load_module() @@ -1231,12 +1184,6 @@ def get_ost_net(dom_node, uuid): return None return lookup(dom_node, uuid) -def get_osc_net(dom_node, uuid): - uuid = get_first_ref(dom_node,'network') - if not uuid: - return None - return lookup(dom_node.parentNode,uuid) - def nid2server(dom_node, nid): netlist = dom_node.getElementsByTagName('network') for net_node in netlist: @@ -1295,8 +1242,6 @@ def getServiceLevel(dom_node): ret = 0 return ret - - # # return list of services in a profile. list is a list of tuples # [(level, dom_node),] @@ -1320,7 +1265,7 @@ def getByName(lustreNode, name, tag): if getName(nd) == name: return nd return None - + ############################################################ # MDC UUID hack - @@ -1339,7 +1284,18 @@ def prepare_mdc(dom_node, mds_uuid): mdc_uuid = mdc.uuid return mdc_uuid - +mdc_cleaned = None +def cleanup_mdc(dom_node, mds_uuid): + global mdc_cleaned + mds_node = lookup(dom_node, mds_uuid); + if not mds_node: + panic("no mds:", mds_uuid) + if not mdc_cleaned: + mdc = MDC(mds_node) + mdc.cleanup() + mdc_uuid = None + mdc_cleaned = 'yes' + ############################################################ # routing ("rooting") @@ -1426,91 +1382,43 @@ def startService(dom_node, module_flag): debug('Service:', type, getName(dom_node), getUUID(dom_node)) # there must be a more dynamic way of doing this... n = None - if config._start or config._stop: - if config._start == "client" or config._stop == "client": - if type == 'ldlm': - n = LDLM(dom_node) - elif type == 'lov': - n = LOV(dom_node) - elif type == 'network': - n = Network(dom_node) - elif type == 'osc': - n = VOSC(dom_node) - elif type == 'mdc': - n = MDC(dom_node) - elif type == 'mountpoint': - n = Mountpoint(dom_node) - else: - return - #panic ("unknown service type:", type) - - elif config._start == "MDS" or config._stop == "MDS": - if type == 'ldlm': - n = LDLM(dom_node) - elif type == 'lovconfig': - n = LOVConfig(dom_node) - elif type == 'network': - n = Network(dom_node) - elif type == 'mds': - n = MDS(dom_node) - else: - return - #panic ("unknown service type:", type) - - elif config._start == "OST" or config._stop == "OST": - if type == 'ldlm': - n = LDLM(dom_node) - elif type == 'network': - n = Network(dom_node) - elif type == 'obd': - n = OBD(dom_node) - elif type == 'ost': - n = OST(dom_node) - else: - return - #panic ("unknown service type:", type) + if type == 'ldlm': + n = LDLM(dom_node) + elif type == 'lov': + n = LOV(dom_node) + elif type == 'lovconfig': + n = LOVConfig(dom_node) + elif type == 'network': + n = Network(dom_node) + elif type == 'obd': + n = OBD(dom_node) + elif type == 'ost': + n = OST(dom_node) + elif type == 'mds': + n = MDS(dom_node) + elif type == 'osc': + n = VOSC(dom_node) + elif type == 'mdc': + n = MDC(dom_node) + elif type == 'mountpoint': + n = Mountpoint(dom_node) else: - if type == 'ldlm': - n = LDLM(dom_node) - elif type == 'lov': - n = LOV(dom_node) - elif type == 'lovconfig': - n = LOVConfig(dom_node) - elif type == 'network': - n = Network(dom_node) - elif type == 'obd': - n = OBD(dom_node) - elif type == 'ost': - n = OST(dom_node) - elif type == 'mds': - n = MDS(dom_node) - elif type == 'osc': - n = VOSC(dom_node) - elif type == 'mdc': - n = MDC(dom_node) - elif type == 'mountpoint': - n = Mountpoint(dom_node) - else: - panic ("unknown service type:", type) + panic ("unknown service type:", type) if module_flag: if config.nomod(): return if config.cleanup(): - if n: - n.cleanup_module() + n.cleanup_module() else: - if n: - n.load_module() + n.load_module() else: if config.nosetup(): return if config.cleanup(): - if n: - n.cleanup() + n.cleanup() else: - if n: - n.prepare() + n.prepare() # # Prepare the system to run lustre using a particular profile @@ -1579,12 +1487,11 @@ def parse_cmdline(argv): long_opts = ["ldap", "reformat", "lustre=", "verbose", "gdb", "portals=", "makeldiff", "cleanup", "noexec", "help", "node=", "nomod", "nosetup", - "dump=", "force", "start=", "stop=", "startlevel=", "endlevel="] + "dump=", "force", "startlevel=", "endlevel="] opts = [] args = [] try: opts, args = getopt.getopt(argv, short_opts, long_opts) - except getopt.error: print "invalid opt" usage() @@ -1603,29 +1510,24 @@ def parse_cmdline(argv): config.portals = a if o == "--lustre": config.lustre = a - if o == "--reformat": + if o == "--reformat": config.reformat(1) - if o == "--node": + if o == "--node": config.node(a) - if o == "--gdb": + if o == "--gdb": config.gdb(1) - if o == "--nomod": + if o == "--nomod": config.nomod(1) - if o == "--nosetup": + if o == "--nosetup": config.nosetup(1) - if o == "--dump": + if o == "--dump": config.dump_file(a) - if o in ("-f", "--force"): + if o in ("-f", "--force"): config.force(1) if o in ("--startlevel",): config.startlevel(a) if o in ("--endlevel",): config.endlevel(a) - if o == "--start": - config.start(a) - if o == "--stop": - config.stop(a) - config.cleanup(1) return args @@ -1692,8 +1594,6 @@ def sanitise_path(): for dir in DEFAULT_PATH: add_to_path(dir) - - # Initialize or shutdown lustre according to a configuration file # * prepare the system for lustre # * configure devices with lctl @@ -1706,12 +1606,7 @@ def main(): sanitise_path() args = parse_cmdline(sys.argv[1:]) - if config.start() or config.stop(): - if not os.access("/etc/lustre/config.xml", os.R_OK ): - print 'File not found or readable:', "/etc/lustre/config.xml" - sys.exit(1) - dom = xml.dom.minidom.parse("/etc/lustre/config.xml") - elif len(args) > 0: + if len(args) > 0: if not os.access(args[0], os.R_OK): print 'File not found or readable:', args[0] sys.exit(1) @@ -1758,7 +1653,7 @@ if __name__ == "__main__": print e except CommandError, e: e.dump() - sys.exit(e.rc) + sys.exit(e.rc) if first_cleanup_error: sys.exit(first_cleanup_error) diff --git a/lustre/utils/lmc b/lustre/utils/lmc index b4de811..bb6377f 100755 --- a/lustre/utils/lmc +++ b/lustre/utils/lmc @@ -116,7 +116,7 @@ def error(*args): def warning(*args): msg = string.join(map(str,args)) print "Warning: ", msg - + # # manage names and uuids # need to initialize this by walking tree to ensure @@ -249,7 +249,7 @@ class GenConfig: def osc(self, name, uuid, obd_uuid, net_uuid): osc = self.newService("osc", name, uuid) - osc.appendChild(self.ref("network", net_uuid)) + osc.appendChild(self.ref("ost", net_uuid)) osc.appendChild(self.ref("obd", obd_uuid)) return osc @@ -287,15 +287,9 @@ class GenConfig: mds.appendChild(self.ref("failover", failover_uuid)) return mds - def mdc(self, name, uuid, mds_uuid, net_uuid): - mdc = self.newService("mdc",name,uuid) - mdc.appendChild(self.ref("mds",mds_uuid)) - mdc.appendChild(self.ref("network",net_uuid)) - return mdc - - def mountpoint(self, name, uuid, mdc_uuid, osc_uuid, path): + def mountpoint(self, name, uuid, mds_uuid, osc_uuid, path): mtpt = self.newService("mountpoint", name, uuid) - mtpt.appendChild(self.ref("mdc", mdc_uuid)) + mtpt.appendChild(self.ref("mds", mds_uuid)) mtpt.appendChild(self.ref("osc", osc_uuid)) self.addElement(mtpt, "path", path) return mtpt @@ -532,7 +526,6 @@ def add_ost(gen, lustre, options, args): if options.has_key('obdtype'): obdtype = options['obdtype'] - if obdtype == 'obdecho': fstype = '' else: @@ -561,7 +554,7 @@ def add_ost(gen, lustre, options, args): obd = gen.obd(obdname, obd_uuid, fstype, obdtype, devname, get_format_flag(options), size) ost = gen.ost(ostname, ost_uuid, obd_uuid, net_uuid) - osc = gen.osc(oscname, osc_uuid, obd_uuid, net_uuid) + osc = gen.osc(oscname, osc_uuid, obd_uuid, ost_uuid) if lovname: lov = findByName(lustre, lovname, "lov") @@ -652,24 +645,7 @@ def add_mtpt(gen, lustre, options, args): lov_uuid = name2uuid(lustre, lov_name, tag='osc', fatal=1) uuid = new_uuid(name) - mdc_name = new_name('MDC_'+mds_name) - mdc_uuid = new_uuid(mdc_name) - lovnode = lookup(lustre,lov_uuid) - - - mdsnode = lookup(lustre,mds_uuid) - ref = mdsnode.getElementsByTagName('network_ref') - net_uuid = ref[0].getAttribute('uuidref') - - mdc = gen.mdc(mdc_name,mdc_uuid,mds_uuid,net_uuid) - lustre.appendChild(mdc) - - - lovnode.appendChild(gen.ref("mdc",mdc_uuid)) - - - mtpt = gen.mountpoint(name, uuid, mdc_uuid, lov_uuid, path) - + mtpt = gen.mountpoint(name, uuid, mds_uuid, lov_uuid, path) node = findByName(lustre, node_name, "node") if not node: error('node:', node_name, "not found.") -- 1.8.3.1