Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
contego / home / tvault / .virtenv / lib / python2.7 / site-packages / nova / objects / resource_provider.pyc
Size: Mime:
ó
±EYc@sddlmZddlZddlZddlmZddlmZddlm	Z	ddl
mZddl
m
ZddlmZdd	lmZdd
lmZddlmZddlmZejjZejjZejjZejeƒZ d
„Z!d„Z"d„Z#d„Z$d„Z%ej&j'd„ƒZ(ej&j'd„ƒZ)ej&j'd„ƒZ*ej&j'd„ƒZ+ej,j-dej.fd„ƒYƒZej,j-dej/ej.fd„ƒYƒZ0dej.fd„ƒYZ1ej&j'd„ƒZ2ej&j'd„ƒZ3ej,j-de1fd„ƒYƒZej,j-d ej/ej.fd!„ƒYƒZ4ej,j-d"e1fd#„ƒYƒZd$„Z5d%„Z6ej,j-d&ej/ej.fd'„ƒYƒZ7ej,j-d(ej.fd)„ƒYƒZ8ej,j-d*ej/ej.fd+„ƒYƒZ9dS(,iÿÿÿÿ(tlogN(tfunc(tcontains_eager(tsql(tapi(t
api_models(t	exception(t_LW(tobjects(tbase(tfieldscCsftjtjjgƒjtjj|jkƒ}|j|ƒj	ƒ}t
g|D]}|d^qOƒS(söReturns a set() containing the resource class IDs for all resources
    currently having an inventory record for the supplied resource provider.

    :param conn: DB connection to use.
    :param rp: Resource provider to query inventory for.
    i(tsatselectt_INV_TBLtctresource_class_idtwheretresource_provider_idtidtexecutetfetchalltset(tconntrptcur_res_seltexisting_resourcestr((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt _get_current_inventory_resources#sc	Cs"tjtjjjdƒgƒjtjtjj|j	ktjjj
|ƒƒƒjtjjƒ}|j|ƒj
ƒ}|rÍdjg|D]}tjj|jƒ^q‹ƒ}tjd|d|jƒ‚ntjƒjtjtjj|j	ktjjj
|ƒƒƒ}|j|ƒ}|jS(s¥Deletes any inventory records from the supplied provider and set() of
    resource class identifiers.

    If there are allocations for any of the inventories to be deleted raise
    InventoryInUse exception.

    :param conn: DB connection to use.
    :param rp: Resource provider from which to delete inventory.
    :param to_delete: set() containing resource class IDs for records to
                      delete.
    tresource_classs, tresource_classestresource_provider(RRt
_ALLOC_TBLRRtlabelRtand_RRtin_tgroup_byRRtjoinR
t
ResourceClasst
from_indexRRtInventoryInUsetuuidR
tdeletetrowcount(	RRt	to_deletetallocation_querytallocationst
allocationRtdel_stmttres((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_delete_inventory_from_provider0s 	(cCsÁxº|D]²}|j|ƒ}|jdkrUtjdtjj|ƒd|jƒ‚ntj	ƒj
d|jd|d|jd|j
d|jd	|jd
|jd|jƒ}|j|ƒqWdS(
sLInserts new inventory records for the supplied resource provider.

    :param conn: DB connection to use.
    :param rp: Resource provider to add inventory to.
    :param inv_list: InventoryList object
    :param to_add: set() containing resource class IDs to search inv_list for
                   adding to resource provider.
    iRRRRttotaltreservedtmin_unittmax_unitt	step_sizetallocation_ratioN(tfindtcapacityRtInvalidInventoryCapacityR
R%R&R(R
tinserttvaluesRR2R3R4R5R6R7R(RRtinv_listtto_addt	res_classt
inv_recordtins_stmt((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_add_inventory_to_providerOs 	
							cCsÂg}xµ|D]­}|j|ƒ}|jdkr[tjdtjj|ƒd|jƒ‚ntj	t
jtj
jƒjdƒgƒjtjtj
j|jktj
j|kƒƒ}|j|ƒjƒ}|r|d|jkr|j|jtjj|ƒfƒntjƒjtjtj
j|jktj
j|kƒƒjd|jd|jd|jd|jd	|jd
|j ƒ}	|j|	ƒ}
|
j!s
tj"dtjj|ƒƒ‚q
q
W|S(sÜUpdates existing inventory records for the supplied resource provider.

    :param conn: DB connection to use.
    :param rp: Resource provider on which to update inventory.
    :param inv_list: InventoryList object
    :param to_update: set() containing resource class IDs to search inv_list
                      for updating in resource provider.
    :returns: A list of (uuid, class) tuples that have exceeded their
              capacity after this inventory update.
    iRRtusageR2R3R4R5R6R7s)No inventory of class %s found for update(#R8R9RR:R
R%R&R(RRRtsumRRtusedR RR!RRRRtfirsttappendR
tupdateR<R2R3R4R5R6R7R*tNotFound(RRR=t	to_updatetexceededR?R@R,R-tupd_stmtR0((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_update_inventory_for_providerjs>
	$						cCs‰|j}|d}tjƒjtjtjj|jktjj|kƒƒjd|ƒ}|j	|ƒ}|j
dkr…tj‚n|S(sWIncrements the supplied provider's generation value, supplying the
    currently-known generation. Returns whether the increment succeeded.

    :param conn: DB connection to use.
    :param rp: `ResourceProvider` whose generation should be updated.
    :returns: The new resource provider generation value if successful.
    :raises nova.exception.ConcurrentUpdateDetected: if another thread updated
            the same resource provider's view of its inventory or allocations
            in between the time when this object was originally read
            and the call to set the inventory.
    it
generation(
RNt_RP_TBLRHRRR!RRR<RR*RtConcurrentUpdateDetected(RRtrp_gentnew_generationRLR0((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_increment_provider_generation–s	
	c
Cs{tjj|jƒ}td|gƒ}|jjƒ}|jƒ3t|||t	|gƒƒt
||ƒ|_WdQXdS(s6Add one Inventory that wasn't already on the provider.RN(R
R%tindexRt
InventoryListtsessiont
connectiontbeginRBRRSRN(tcontextRt	inventoryRR=R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_add_inventory¯s
c
Cs}tjj|jƒ}td|gƒ}|jjƒ}|jƒ5t|||t	|gƒƒ}t
||ƒ|_WdQX|S(s,Update an inventory already on the provider.RN(R
R%RTRRURVRWRXRMRRSRN(RYRRZRR=RRK((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_update_inventory»s
cCso|jjƒ}|jƒNt|||gƒsStjdtjj|ƒƒ‚nt	||ƒ|_
WdQXdS(s:Delete up to one Inventory of the given resource_class id.s)No inventory of class %s found for deleteN(RVRWRXR1RRIR
R%R&RSRN(RYRRR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_delete_inventoryÈs
c	Csï|jjƒ}t||ƒ}tg|jD]}tjj|jƒ^q+ƒ}||}||}||@}	g}
|j	ƒj|r™t
|||ƒn|rµt||||ƒn|	rÓt||||	ƒ}
nt
||ƒ|_WdQX|
S(sþGiven an InventoryList object, replaces the inventory of the
    resource provider in a safe, atomic fashion using the resource
    provider's generation as a consistent view marker.

    :param context: Nova RequestContext.
    :param rp: `ResourceProvider` object upon which to set inventory.
    :param inv_list: `InventoryList` object to save to backend storage.
    :returns: A list of (uuid, class) tuples that have exceeded their
              capacity after this inventory update.
    :raises nova.exception.ConcurrentUpdateDetected: if another thread updated
            the same resource provider's view of its inventory or allocations
            in between the time when this object was originally read
            and the call to set the inventory.
    N(RVRWRRRR
R%RTRRXR1RBRMRSRN(RYRR=RRRtthese_resourcesR>R+RJRK((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_set_inventoryÕs$+



tResourceProvidercBskeZdZiejdeƒd6ejdeƒd6ejdeƒd6ejdeƒd6Ze	j
d„ƒZe	j
d„ƒZe	j
d	„ƒZ
e	jd
„ƒZe	j
d„ƒZe	j
d„ƒZe	j
d
„ƒZe	j
d„ƒZeejjd„ƒƒZeejjd„ƒƒZeejjd„ƒƒZed„ƒZeejjd„ƒƒZRS(s1.1t	read_onlyRtnullableR(tnameRNcCs°d|kr'tjddddƒ‚nd|krNtjddddƒ‚nd|krutjdddd	ƒ‚n|jƒ}|j|j|ƒ}|j|j||ƒdS(
NRtactiontcreatetreasonsalready createdR(suuid is requiredRcsname is required(RtObjectActionErrortobj_get_changest
_create_in_dbt_contextt_from_db_object(tselftupdatestdb_rp((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRescCs|j|j|jƒdS(N(t_deleteRjR(Rl((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytdestroy'scCs_|jƒ}|rB|jƒdgkrBtjddddƒ‚n|j|j|j|ƒdS(NRcRdtsaveRfsImmutable fields changed(RhtkeysRRgt
_update_in_dbRjR(RlRm((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRq+s	cCs(|j||ƒ}|j||ƒ|ƒS(N(t_get_by_uuid_from_dbRk(tclsRYR(tdb_resource_provider((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytget_by_uuid4scCs!t|j||ƒ|jƒdS(sAdd one new Inventory to the resource provider.

        Fails if Inventory of the provided resource class is
        already present.
        N(R[Rjtobj_reset_changes(RlRZ((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt
add_inventory9scCs3tjj|ƒ}t|j||ƒ|jƒdS(s,Delete Inventory of provided resource_class.N(R
R%RTR]RjRx(RlRR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytdelete_inventoryCscCs^t|j||ƒ}x8|D]0\}}tjtdƒi|d6|d6ƒqW|jƒdS(s<Set all resource provider Inventory to be the provided list.s@Resource provider %(uuid)s is now over-capacity for %(resource)sR(tresourceN(R_RjtLOGtwarningRRx(RlR=RKR(trclass((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt
set_inventoryJs
cCs^t|j||ƒ}x8|D]0\}}tjtdƒi|d6|d6ƒqW|jƒdS(sUpdate one existing Inventory of the same resource class.

        Fails if no Inventory of the same class is present.
        s@Resource provider %(uuid)s is now over-capacity for %(resource)sR(R{N(R\RjR|R}RRx(RlRZRKR(R~((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytupdate_inventoryTs
cCs-tjƒ}|j|ƒ|jj|ƒ|S(N(tmodelsR`RHRVtadd(RYRmRn((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRias
cCs¼|jjtjƒjtjj|kƒjƒ}|rEtjƒ‚n|jjtj	ƒjtj	j|kƒj
ƒ|jjtjƒjtjj|kƒj
ƒ}|s¸tj
ƒ‚ndS(N(RVtqueryRt
AllocationtfilterRtcountRtResourceProviderInUset	InventoryR)R`RRI(RYt_idtrp_allocationstresult((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRoiscCsH|jjtjƒjd|ƒjƒ}|j|ƒ|j|jƒdS(NR(RVRƒRR`t	filter_byRFRHRq(RYRRmRn((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRszs
cCs?x%|jD]}t||||ƒq
W||_|jƒ|S(N(R
tsetattrRjRx(RYRRvtfield((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRk‚s
	
cCs@|jjtjƒjd|ƒjƒ}|s<tjƒ‚n|S(NR((RVRƒRR`RŒRFRRI(RYR(R‹((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRtŠs
(t__name__t
__module__tVERSIONR
tIntegerFieldtTruet	UUIDFieldtFalsetStringFieldR	t	remotableReRpRqtremotable_classmethodRwRyRzRR€tstaticmethodtdb_apitapi_context_managertwriterRiRoRsRktreaderRt(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyR`s.	


tResourceProviderListcBsZeZdZiejdƒd6ZdZeejj	d„ƒƒZ
ejdd„ƒZRS(	s1.0R`RRcR(cCs”|si}n|jjtjƒ}xEtjD]:}||kr.|jttj|ƒ||kƒ}q.q.W|jd|j	ddƒƒ}|j
ƒS(Ntcan_hosti(RVRƒRR`Ržtallowed_filtersR…tgetattrRŒtgettall(RYtfiltersRƒtattr((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_get_all_by_filters_from_db¡s	&cCs1|j||ƒ}tj|||ƒtj|ƒS(N(R¦R	t
obj_make_listRR`(RuRYR¤tresource_providers((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytget_all_by_filters®s(snamesuuidN(RRR‘R
tListOfObjectsFieldR R™RšR›RR¦R	R˜tNoneR©(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRž”st_HasAResourceProvidercBs,eZdZed„ƒZed„ƒZRS(sWCode shared between Inventory and Allocation

    Both contain a ResourceProvider.
    cCs«y |jdƒ}|j|d<Wn/ttfk
rQtjddddƒ‚nXy|jdƒ}Wn)tk
rtjddddƒ‚nXtjj|ƒ|d	<|S(
NRRRdReRfsresource_provider requiredRsresource_class requiredR(	tpopRtKeyErrortNotImplementedErrorRRgR
R%RT(RmRR((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_make_db»s 	

	
	
cCs»x4|jD])}|dkr
t||||ƒq
q
Wd|krc|jdj|dƒ|_nd|kr¤d|kr¤tƒ|_tj||j|dƒn||_|jƒ|S(NRRR(sresource_providersresource_class(	R
RR&RR`RRkRjRx(RYttargettsourceRŽ((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRkÎs 
	
(RRt__doc__R™R°Rk(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyR¬µscCs-tjƒ}|j|ƒ|jj|ƒ|S(N(RRˆRHRVR‚(RYRmtdb_inventory((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_create_inventory_in_dbås
cCsC|jjtjƒjd|ƒj|ƒ}|s?tjƒ‚ndS(NR(RVRƒRRˆRŒRHRRI(RYtid_RmR‹((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_update_inventory_in_dbís	!RˆcBseZdZi	ejdeƒd6ejdƒd6ejdeƒd6ejƒd6ejddƒd	6ejdd
ƒd6ejdd
ƒd6ejdd
ƒd
6ej	ddƒd6Ze
d„ƒZej
d„ƒZej
d„ƒZed„ƒZed„ƒZRS(s1.0RaRR`RRR2tdefaultiR3iR4R5R6gð?R7cCst|j|j|jƒS(s1Inventory capacity, adjusted by allocation_ratio.(tintR2R3R7(Rl((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyR9scCskd|kr'tjddddƒ‚n|j|jƒƒ}|j|j|ƒ}|j|j||ƒdS(NRRdReRfsalready created(RRgR°RhRiRjRk(RlRmR´((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRescCs`d|kr'tjddddƒ‚n|jƒ}|jddƒ|j|j|j|ƒdS(NRRdRqRfsnot created(RRgRhR­R«RsRjR(RlRm((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRqscCs
t||ƒS(N(Rµ(RYRm((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRiscCst|||ƒS(N(R·(RYR¶Rm((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRs!s(RRR‘R
R’R“tObjectFieldtResourceClassFieldtNonNegativeIntegerFieldtNonNegativeFloatFieldtpropertyR9R	R—ReRqR™RiRs(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRˆõs 
		RUcBsZeZdZiejdƒd6Zd„Zeejj	d„ƒƒZ
ejd„ƒZ
RS(s1.0RˆRcCs‰t|tjƒrRytjj|ƒ}WqRtk
rNtjd|ƒ‚qRXnx0|j	D]%}tjj|j
ƒ|kr\|Sq\WdS(s‚Return the inventory record from the list of Inventory records that
        matches the supplied resource class, or None.

        :param res_class: An integer or string representing a resource
                          class. If the value is a string, the method first
                          looks up the resource class identifier from the
                          string.
        sNo such resource class '%s'N(t
isinstancetsixtstring_typesR
R%RTt
ValueErrorRRIRR(RlR?tinv_rec((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyR8/s	
	cCsL|jjtjƒjtjjƒjtdƒƒjtj	j
|kƒjƒS(NR(RVRƒRRˆR$RtoptionsRR…R`R(R£(RYtrp_uuid((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_get_all_by_resource_providerCscCs1|j||ƒ}tj|||ƒtj|ƒS(N(RÆR	R§RRˆ(RuRYRÅtdb_inventory_list((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt!get_all_by_resource_provider_uuidKs		(RRR‘R
RªR8R™RšR›RRÆR	R˜RÈ(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRU&s	R„cBs²eZdZiejƒd6ejdƒd6ejƒd6ejƒd6ejƒd6Zee	j
jd„ƒƒZee	j
jd„ƒƒZ
ejd	„ƒZejd
„ƒZRS(s1.0RR`Rtconsumer_idRREcCs:tjƒ}|j|ƒ|jj|ƒ|jjƒ|S(N(RR„RHRVR‚tflush(RYRmt
db_allocation((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRi`s


cCs@|jjtjƒjd|ƒjƒ}|s<tjƒ‚ndS(NR(RVRƒRR„RŒR)RRI(RYRR‹((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_destroykscCskd|kr'tjddddƒ‚n|j|jƒƒ}|j|j|ƒ}|j|j||ƒdS(NRRdReRfsalready created(RRgR°RhRiRjRk(RlRmRË((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyResscCs|j|j|jƒdS(N(RÌRjR(Rl((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRp|s(RRR‘R
R’RºR”R»R™RšR›RœRiRÌR	R—ReRp(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyR„Ss



	cCspxi|D]a}|jj}|j}tjƒjtjtjj	|ktjj|kƒƒ}|j
|ƒqWdS(sÌDeletes any existing allocations that correspond to the allocations to
    be written. This is wrapped in a transaction, so if the write subsequently
    fails, the deletion will also be rolled back.
    N(RRRÉRR)RRR!RRR(Rtallocstalloctrp_idRÉtdel_sql((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_delete_current_allocss
	c
Cstg|D]}tjj|jƒ^q
ƒ}tg|D]}|jj^q8ƒ}tjt	j
jt	j
jt	j
j
tjjt	j
jƒjdƒgƒ}|jt	j
j
j|ƒƒ}|jt	j
jt	j
j
ƒ}tj|ddƒ}tjtttjtj
jtj
jktj
j
j|ƒƒƒ}tj||tjtj
j|j
jktj
j
|j
j
kƒƒ}tj
jjdƒtj
jtj
jtj
j
tj
jtj
jtj
j |j
jg}tj|ƒj!|ƒ}	|	jtjtj
jj|ƒtj
j
j|ƒƒƒ}	|j"|	ƒ}
i}tƒ}xb|
D]Z}
|
d|
df}||krt#dt$|ƒƒ‚n|
||<|j%|
dƒq@W||}|rÏt&j'dt$|ƒd	|ƒ‚ni}x6|D].}tjj|jƒ}|jj}||f}||}|j}|d
}|dp9d}|d|d
|}|||krÎt(j)t*dƒitjj+|ƒd6|d6|d6|d6|d6ƒt&j,dtjj+|ƒd	|ƒ‚n||krÜt-d|dd|d|dƒ}|||<qÜqÜWt.|j/ƒƒS(sChecks to see if the supplied allocation records would result in any of
    the inventories involved having their capacity exceeded.

    Raises an InvalidAllocationCapacityExceeded exception if any inventory
    would be exhausted by the allocation. If no inventories would be exceeded
    by the allocation, the function returns a list of `ResourceProvider`
    objects that contain the generation at the time of the check.

    :param conn: SQLalchemy Connection object to use
    :param allocs: List of `Allocation` objects to check
    RERcRCRR(Rs"%s already in usage_map, bad queryRRR7iR2R3skOver capacity for %(rc)s on resource provider %(rp)s. Needed: %(needed)s, Used: %(used)s, Capacity: %(cap)strcRtneededtcapRRN(0RR
R%RTRRR(RRRRRRÉRRRRDRER RR"R#taliasR$ROR
R!Rt	outerjoinRNR2R3R7tselect_fromRR®tstrR‚RtInvalidInventoryR|R}RR&t!InvalidAllocationCapacityExceededR`tlistR<(RRÍtatres_classestprovider_uuidsRCtinv_jointprimary_jointcols_in_outputtseltrecordst	usage_maptprovs_with_invtrecordtmap_keyt
missing_provst
res_providersRÎR?RÅtkeyt
amount_neededR7RER9R((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_check_capacity_exceededsŒ&(%		'							




	
		
tAllocationListcBsÌeZdZiejdƒd6Zeejjd„ƒƒZ	eejj
ddd„ƒƒZeejjd„ƒƒZ
ejd„ƒZejd„ƒZejd„ƒZejd	„ƒZd
„ZRS(s1.1R„RcCs(x!|D]}||_|jƒqWdS(N(RjRp(RYR-R.((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_delete_allocationss
	cCs…|jjtjƒjtjjƒjtdƒƒ}|rW|jtj	j
|kƒ}n|r{|jtjj|kƒ}n|jƒS(NR(
RVRƒRR„R$RRÄRR…R`R(RÉR£(RYtresource_provider_uuidRÉRƒ((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_get_allocations_from_dbscCsÏ|jjƒ}|jƒ®t||ƒt||ƒ}xl|D]d}|j}tjj|j	ƒ}t
jƒjd|j
d|d|jd|jƒ}|j|ƒq?Wx|D]}t||ƒq®WWdQXdS(sœWrite a set of allocations.

        We must check that there is capacity for each allocation.
        If there is not we roll back the entire set.
        RRRÉREN(RVRWRXRÑRìRR
R%RTRRR;R<RRÉRERRS(RYRÍRtbefore_gensRÎRR?RA((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt_set_allocations(s



			
cCs4|j|d|ƒ}tj|||ƒtj|ƒS(NRï(RðR	R§RR„(RuRYRÅtdb_allocation_list((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRÈQscCs4|j|d|ƒ}tj|||ƒtj|ƒS(NRÉ(RðR	R§RR„(RuRYRÉRó((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pytget_all_by_consumer_idXscCs|j|j|jƒdS(s Create the supplied allocations.N(RòRjR(Rl((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt
create_all_scCs|j|j|jƒdS(N(RîRjR(Rl((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt
delete_allfscCs7g|jD]}t|ƒ^q
}ddj|ƒdS(NsAllocationList[s, t](RtreprR$(Rltxtstrings((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt__repr__js"N(RRR‘R
RªR™RšR›RœRîRR«RðRòR	R˜RÈRôR—RõRöRû(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRís 	(tUsagecBsCeZdZiejdeƒd6ejƒd6Zed„ƒZRS(s1.0RaRRCcCszx4|jD])}|dkr
t||||ƒq
q
Wd|krc|jdj|dƒ|_n||_|jƒ|S(NRR(R
RR&RRjRx(RYR±R²RŽ((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRkys
	
(	RRR‘R
R»R“R¼R™Rk(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRüos
t	UsageListcBsZeZdZiejdƒd6Zeejjd„ƒƒZ	e
jd„ƒZd„Z
RS(s1.0RüRcCsô|jjtjjtjtjtjj	ƒdƒƒj
tjtjjtjj
kƒjtjtjtjjtjjktjjtjjkƒƒjtjj|kƒjtjjƒ}g|jƒD]#}td|dd|dƒ^qÇ}|S(NiRRCi(RVRƒRRˆRRtcoalesceRDR„RER$R`RRRÖRR!R…R(R#R£tdict(RYRÅRƒtitemR‹((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt"_get_all_by_resource_provider_uuid’s$		3cCs.|j||ƒ}tj|||ƒt|ƒS(N(RR	R§Rü(RuRYRÅt
usage_list((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRÈ¥scCs7g|jD]}t|ƒ^q
}ddj|ƒdS(Ns
UsageList[s, R÷(RRøR$(RlRùRú((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRûªs"(RRR‘R
RªR™RšR›RRR	R˜RÈRû(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyRý‰s(:toslo_logRtloggingRÀt
sqlalchemyRRtsqlalchemy.ormRRtnova.db.sqlalchemyRRšRRtnovaRt	nova.i18nRRtnova.objectsR	R
R„t	__table__RRˆR
R`ROt	getLoggerRR|RR1RBRMRSR›RœR[R\R]R_tNovaObjectRegistrytregistert
NovaObjecttObjectListBaseRžR¬RµR·RURÑRìRíRüRý(((sS/home/tvault/.virtenv/lib/python2.7/site-packages/nova/objects/resource_provider.pyt<module>
s\	
			,	

6ˆ 00,-		yf