本文整理汇总了Python中uds.core.managers.UserServiceManager.UserServiceManager.getStateFilter方法的典型用法代码示例。如果您正苦于以下问题:Python UserServiceManager.getStateFilter方法的具体用法?Python UserServiceManager.getStateFilter怎么用?Python UserServiceManager.getStateFilter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类uds.core.managers.UserServiceManager.UserServiceManager
的用法示例。
在下文中一共展示了UserServiceManager.getStateFilter方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: servicesPoolsNeedingCacheUpdate
# 需要导入模块: from uds.core.managers.UserServiceManager import UserServiceManager [as 别名]
# 或者: from uds.core.managers.UserServiceManager.UserServiceManager import getStateFilter [as 别名]
def servicesPoolsNeedingCacheUpdate(self):
# State filter for cached and inAssigned objects
# First we get all deployed services that could need cache generation
DeployedService.objects.update()
# We start filtering out the deployed services that do not need caching at all.
whichNeedsCaching = DeployedService.objects.filter(Q(initial_srvs__gte=0) | Q(cache_l1_srvs__gte=0)).filter(max_srvs__gt=0, state=State.ACTIVE,
service__provider__maintenance_mode=False)[:]
# We will get the one that proportionally needs more cache
servicesPools = []
for sp in whichNeedsCaching:
sp.userServices.update() # Cleans cached queries
# If this deployedService don't have a publication active and needs it, ignore it
if sp.activePublication() is None and sp.service.getInstance().publicationType is not None:
logger.debug('Needs publication but do not have one, cache test ignored')
continue
# If it has any running publication, do not generate cache anymore
if sp.publications.filter(state=State.PREPARING).count() > 0:
logger.debug('Stopped cache generation for deployed service with publication running: {0}'.format(sp))
continue
if sp.isRestrained():
ServiceCacheUpdater.__notifyRestrain(sp)
continue
# Get data related to actual state of cache
inCacheL1 = sp.cachedUserServices().filter(UserServiceManager.getCacheStateFilter(services.UserDeployment.L1_CACHE)).count()
inCacheL2 = sp.cachedUserServices().filter(UserServiceManager.getCacheStateFilter(services.UserDeployment.L2_CACHE)).count()
inAssigned = sp.assignedUserServices().filter(UserServiceManager.getStateFilter()).count()
# if we bypasses max cache, we will reduce it in first place. This is so because this will free resources on service provider
logger.debug("Examining {0} with {1} in cache L1 and {2} in cache L2, {3} inAssigned".format(
sp, inCacheL1, inCacheL2, inAssigned))
totalL1Assigned = inCacheL1 + inAssigned
# We have more than we want
if totalL1Assigned > sp.max_srvs:
logger.debug('We have more services than max configured')
servicesPools.append((sp, inCacheL1, inCacheL2, inAssigned))
continue
# We have more in L1 cache than needed
if totalL1Assigned > sp.initial_srvs and inCacheL1 > sp.cache_l1_srvs:
logger.debug('We have more services in cache L1 than configured')
servicesPools.append((sp, inCacheL1, inCacheL2, inAssigned))
continue
# If we have more in L2 cache than needed, decrease L2 cache, but int this case, we continue checking cause L2 cache removal
# has less priority than l1 creations or removals, but higher. In this case, we will simply take last l2 oversized found and reduce it
if inCacheL2 > sp.cache_l2_srvs:
logger.debug('We have more services in L2 cache than configured, decreasing it')
servicesPools.append((sp, inCacheL1, inCacheL2, inAssigned))
continue
# If this service don't allows more starting user services, continue
if UserServiceManager.manager().canInitiateServiceFromDeployedService(sp) is False:
logger.debug('This provider has the max allowed starting services running: {0}'.format(sp))
continue
# If wee need to grow l2 cache, annotate it
# Whe check this before checking the total, because the l2 cache is independent of max services or l1 cache.
# It reflects a value that must be keeped in cache for futre fast use.
if inCacheL2 < sp.cache_l2_srvs:
logger.debug('Needs to grow L2 cache for {}'.format(sp))
servicesPools.append((sp, inCacheL1, inCacheL2, inAssigned))
continue
# We skip it if already at max
if totalL1Assigned == sp.max_srvs:
continue
if totalL1Assigned < sp.initial_srvs or inCacheL1 < sp.cache_l1_srvs:
logger.debug('Needs to grow L1 cache for {}'.format(sp))
servicesPools.append((sp, inCacheL1, inCacheL2, inAssigned))
# We also return calculated values so we can reuse then
return servicesPools