Exemplo n.º 1
0
        if not afs.defaultConfig.force :
            myParser.error("VolumeName \"%s\" not matched by given Project \"%s\"\n" % (VolumeName,afs.defaultConfig.ProjectName))
            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)
Exemplo n.º 2
0
     try :
         # 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