# create a new device with lctl
def newdev(self, type, name, uuid, setup = ""):
- self.attach(type, name, uuid);
+ if type != 'mds':
+ self.attach(type, name, uuid);
try:
self.setup(name, setup)
except CommandError, e:
print "detach " + dev + " <-> " + realfile
ret, out = run('losetup -d', dev)
if ret:
- log('unable to clean loop device:', dev, 'for file:', realfile)
+ log('unable to clean loop device', dev, 'for file', realfile)
logall(out)
# finilizes passed device
mountfsoptions = "errors=remount-ro"
if target == 'ost' and sys_get_branch() == '2.4':
mountfsoptions = "%s,asyncdel" % (mountfsoptions)
+ if target == 'ost' and sys_get_branch() == '2.6':
+ mountfsoptions = "%s,extents,mballoc" % (mountfsoptions)
return mountfsoptions
return ""
def __init__(self, db, name, target_uuid, uuid):
Module.__init__(self, 'CONFDEV', db)
self.devpath = self.db.get_val('devpath','')
- self.backdevpath = self.db.get_val('backdevpath','')
+ self.backdevpath = self.db.get_val('devpath','')
self.size = self.db.get_val_int('devsize', 0)
self.journal_size = self.db.get_val_int('journalsize', 0)
self.fstype = self.db.get_val('fstype', '')
self.client_uuids = self.target.get_refs('client')
self.obdtype = self.db.get_val('obdtype', '')
+ self.mds_sec = self.db.get_val('mds_sec', '')
+ self.oss_sec = self.db.get_val('oss_sec', '')
+ self.deny_sec = self.db.get_val('deny_sec', '')
+
+ if config.mds_mds_sec:
+ self.mds_sec = config.mds_mds_sec
+ if config.mds_oss_sec:
+ self.oss_sec = config.mds_oss_sec
+ if config.mds_deny_sec:
+ if self.deny_sec:
+ self.deny_sec = "%s,%s" %(self.deny_sec, config.mds_deny_sec)
+ else:
+ self.deny_sec = config.mds_deny_sec
+
if self.obdtype == None:
self.obdtype = 'dumb'
if self.target.get_class() == 'mds':
if options:
- options = "%s,iopen_nopriv" %(options)
+ options = "%s,acl,user_xattr,iopen_nopriv" %(options)
else:
options = "iopen_nopriv"
self.backdevpath)
if self.fstype == 'smfs':
- realdev = self.fstype
+ realdev = blkdev
else:
realdev = blkdev
config.record = 1
lctl.clear_log(self.name, self.target.getName() + '-conf')
lctl.record(self.name, self.target.getName() + '-conf')
+ lctl.attach("mds", self.conf_name, self.conf_uuid)
+ if self.mds_sec:
+ lctl.set_security(self.conf_name, "mds_sec", self.mds_sec)
+ if self.oss_sec:
+ lctl.set_security(self.conf_name, "oss_sec", self.oss_sec)
+ if self.deny_sec:
+ for flavor in string.split(self.deny_sec, ','):
+ lctl.set_security(self.conf_name, "deny_sec", flavor)
lctl.newdev("mds", self.conf_name, self.conf_uuid,
setup ="%s %s %s %s %s %s" %(self.realdev, self.fstype,
- self.conf_name, self.mountfsoptions,
- master_name, self.obdtype))
+ self.conf_name, self.mountfsoptions,
+ master_name, self.obdtype))
lctl.end_record()
config.record = 0
def __init__(self,db):
Module.__init__(self, 'MDSDEV', db)
self.devpath = self.db.get_val('devpath','')
- self.backdevpath = self.db.get_val('backdevpath','')
+ self.backdevpath = self.db.get_val('devpath','')
self.size = self.db.get_val_int('devsize', 0)
self.journal_size = self.db.get_val_int('journalsize', 0)
self.fstype = self.db.get_val('fstype', '')
if self.master != None:
self.master.prepare()
- lctl.attach("mds", self.name, self.uuid)
- if config.mds_mds_sec:
- lctl.set_security(self.name, "mds_mds_sec", config.mds_mds_sec)
- if config.mds_ost_sec:
- lctl.set_security(self.name, "mds_ost_sec", config.mds_ost_sec)
- lctl.detach(self.name)
-
if not config.record:
self.confobd.start()
Module.__init__(self, 'OSD', db)
self.osdtype = self.db.get_val('osdtype')
self.devpath = self.db.get_val('devpath', '')
- self.backdevpath = self.db.get_val('backdevpath', '')
+ self.backdevpath = self.db.get_val('devpath', '')
self.size = self.db.get_val_int('devsize', 0)
self.journal_size = self.db.get_val_int('journalsize', 0)
self.inode_size = self.db.get_val_int('inodesize', 0)
else:
self.failover_ost = 'n'
+ self.deny_sec = self.db.get_val('deny_sec', '')
+
+ if config.ost_deny_sec:
+ if self.deny_sec:
+ self.deny_sec = "%s,%s" %(self.deny_sec, config.ost_deny_sec)
+ else:
+ self.deny_sec = config.ost_deny_sec
+
active_uuid = get_active_target(ost)
if not active_uuid:
panic("No target device found:", target_uuid)
self.uuid = target_uuid
self.confobd = CONFDEV(self.db, self.name,
target_uuid, self.uuid)
-
+
def add_module(self, manager):
if not self.active:
return
return
run_acceptors()
+
if self.osdtype == 'obdecho':
self.info(self.osdtype)
lctl.newdev("obdecho", self.name, self.uuid)
if not config.record:
self.confobd.start()
+ if self.deny_sec:
+ for flavor in string.split(self.deny_sec, ','):
+ lctl.set_security(self.name, "deny_sec", flavor)
+
def write_conf(self):
if is_prepared(self.name):
return
elif master_class == 'mds':
self.master = get_mdc(db, self.name, self.master_uuid)
elif master_class == 'lmv':
- client_uuid = "%s_lmv_master_UUID" % (self.name)
+ #tmp fix: cobd and cmobd will use same uuid, so use const name here
+ client_uuid = "%s_lmv_master_UUID" % "master"
self.master = LMV(master_obd, client_uuid, self.name);
else:
panic("unknown master obd class '%s'" %(master_class))
elif cache_class == 'mds':
self.cache = get_mdc(db, self.name, self.cache_uuid)
elif cache_class == 'lmv':
- client_uuid = "%s_lmv_cache_UUID" % (self.name)
+ client_uuid = "%s_lmv_cache_UUID" % (self.name)
self.cache = LMV(cache_obd, client_uuid, self.name);
else:
panic("unknown cache obd class '%s'" %(cache_class))
self.master.cleanup()
def add_module(self, manager):
+ manager.add_lustre_module('smfs', 'smfs')
manager.add_lustre_module('cmobd', 'cmobd')
self.master.add_module(manager)
elif master_class == 'mds':
self.master = get_mdc(db, name, self.master_uuid)
elif master_class == 'lmv':
- client_uuid = "%s_lmv_master_UUID" % (self.name)
+ #tmp fix: cobd and cmobd will use same uuid, so use const name here
+ client_uuid = "%s_lmv_master_UUID" % "master"
self.master = LMV(master_obd, client_uuid, self.name);
else:
panic("unknown master obd class '%s'" %(master_class))
elif cache_class == 'mds':
self.cache = get_mdc(db, name, self.cache_uuid)
elif cache_class == 'lmv':
- client_uuid = "%s_lmv_cache_UUID" % (self.name)
+ client_uuid = "%s_lmv_cache_UUID" % "cache"
self.cache = LMV(cache_obd, client_uuid, self.name);
else:
panic("unknown cache obd class '%s'" %(cache_class))
return self.cache.name
def prepare(self):
- self.master.prepare()
- self.cache.prepare()
if not config.record and is_prepared(self.name):
return
+ self.master.prepare()
+ self.cache.prepare()
self.info(self.master_uuid, self.cache_uuid)
lctl.newdev("cobd", self.name, self.uuid,
setup ="%s %s" %(self.master.name,
self.obd_uuid = fs.get_first_ref('obd')
client_uuid = generate_client_uuid(self.name)
+ self.oss_sec = self.db.get_val('oss_sec','null')
+ self.mds_sec = self.db.get_val('mds_sec','null')
+ if config.mds_sec:
+ self.mds_sec = config.mds_sec
+ if config.oss_sec:
+ self.oss_sec = config.oss_sec
+
ost = self.db.lookup(self.obd_uuid)
if not ost:
panic("no ost: ", self.obd_uuid)
# so replace it with Lustre async
self.clientoptions = string.replace(self.clientoptions, "async", "lasync")
- if not config.sec:
- config.sec = "null"
- cmd = "mount -t lustre_lite -o osc=%s,mdc=%s,sec=%s%s %s %s" % \
- (self.vosc.get_name(), self.vmdc.get_name(), config.sec,
- self.clientoptions, config.config, self.path)
+ cmd = "mount -t lustre_lite -o osc=%s,mdc=%s,mds_sec=%s,oss_sec=%s%s %s %s" % \
+ (self.vosc.get_name(), self.vmdc.get_name(), self.mds_sec,
+ self.oss_sec, self.clientoptions, config.config, self.path)
run("mkdir", self.path)
ret, val = run(cmd)
if ret:
ret = 40
elif type in ('lmv',):
ret = 45
- elif type in ('cmobd',):
- ret = 50
elif type in ('mountpoint', 'echoclient'):
- ret = 70
+ ret = 60
+ elif type in ('cmobd',):
+ ret = 70
else:
panic("Unknown type: ", type)
if ptldebug:
try:
val = eval(ptldebug, ptldebug_names)
- val = "0x%x" % (id(val) & 0xffffffffL)
+ val = "0x%x" % (val & 0xffffffffL)
sysctl('portals/debug', val)
except NameError, e:
panic(str(e))
if subsystem:
try:
val = eval(subsystem, subsystem_names)
- val = "0x%x" % (id(val) & 0xffffffffL)
+ val = "0x%x" % (val & 0xffffffffL)
sysctl('portals/subsystem_debug', val)
except NameError, e:
panic(str(e))
('config', "Cluster config name used for LDAP query", PARAM),
('select', "service=nodeA,service2=nodeB ", PARAMLIST),
('node', "Load config for <nodename>", PARAM),
- ('sec', "security flavor <null|krb5i|krb5p> of client", PARAM),
- ('mds_mds_sec', "security flavor <null|krb5i|krb5p> of inter mds's", PARAM),
- ('mds_ost_sec', "security flavor <null|krb5i|krb5p> of mds's-ost's", PARAM),
+ ('sec',"security flavor <null|krb5i|krb5p> between this client with mds", PARAM),
+ ('mds_sec',"security flavor <null|krb5i|krb5p> between this client with mds", PARAM),
+ ('oss_sec',"security flavor <null|krb5i|krb5p> between this client with ost", PARAM),
+ ('mds_mds_sec',"security flavor <null|krb5i|krb5p> between this mds with other mds", PARAM),
+ ('mds_oss_sec',"security flavor <null|krb5i|krb5p> between this mds with ost", PARAM),
+ ('mds_deny_sec', "security flavor <null|krb5i|krb5p> denied by this mds", PARAM),
+ ('ost_deny_sec', "security flavor <null|krb5i|krb5p> denied by this ost", PARAM),
('cleanup,d', "Cleans up config. (Shutdown)"),
('force,f', "Forced unmounting and/or obd detach during cleanup",
FLAG, 0),