sys.exit(1) PrjObj = thisPrjObj if not PrjObj : sys.stderr.write("Cannot guess Project for volume %s" % VolumeName) VolObj=Volume() VolObj.name=VolumeName VolObj.type=VolumeType if VolObj.type == "RW" : RWServ,RWPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj)) print "Creating new volume %s of type %s on %s %s with size %d" % (VolObj.name, VolObj.type, RWServ,RWPart,VolSize) VD.create(VolObj.name,RWServ,RWPart,VolSize) print "Creating accompanying RO" VlD.addsite(VolObj.name,RWServ,RWPart) # XXX it's a bit shitty, but we have to release after each addsite for now, since we get the locations from vos examine atm and not from vos listvldb VD.release(VolObj.name) for i in range(1,PrjObj.minnum_ro) : print "Creating additional RO-copy number %s" % i ROServ,ROPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj)) VlD.addsite(VolObj.name,ROServ,ROPart) VD.release(VolObj.name) elif VolObj.type == "RO" : ROServ,ROPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj)) print "Creating new volume %s of type %s on %s %s" % (VolObj.name, VolObj.type, ROServ,ROPart) VlD.addsite(VolObj.name,ROServ,ROPart) VD.release(VolObj.name) else : print "Only volumes tpye sRW and RO are supported." sys.exit(1)
# add RO to dstSrv if there is none yet. hasRO=False for ov in VS.getVolume("%s.readonly" % VolObj.name, cached=False) : if ov.servername == dstSrv and ov.part == dstP : hasRO = True if hasRO : # find a second server to move the RO to then dstSrv,dstP = PS.getNewVolumeLocation(PrjObj.name,ov) if dstSrv == None : sys.stderr.write("found no appropriate location for %s. Skipping\n" % VolObj.name) continue except : # there is no RO, so just skip this. continue print "Moving accompanying RO to %s %s" % (dstSrv,dstP) if not afs.defaultConfig.dryrun : VlD.addsite(v["name"],dstSrv,dstP) VD.release(v["name"]) # only remove accompanying RO from srcSRV if we are sure there is one! for ov in VS.getVolume("%s.readonly" % VolObj.name, cached=False) : if ov.servername == srcFS.servernames[0] and ov.part == srcP : VD.remove("%s.readonly" % v["name"],srcFS.servernames[0],srcP) break movedVolcount += 1 if movedVolcount > afs.defaultConfig.maxnum and afs.defaultConfig.maxnum > 0 : print "moved %d volumes. Terminating." % afs.defaultConfig.maxnum sys.exit(0) # check if partition is freed enough parts=FS.getPartitions(afs.defaultConfig.ssrv) if parts[srcP]["free"] > untilFree and untilFree > 0 : print "%s bytes free on spart %s." % (afs.util.afsutil.humanReadableSize(parts[srcP]["free"]),srcP ) break if afs.defaultConfig.moveSolitaryROVols :