Beispiel #1
0
            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)
  
Beispiel #2
0
                 # 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 :