def _memoryMetricatorThread(logger, cache, settings, master, timing):
if master:
period = settings.getScalePeriod()
setScaleDownLevel = settings.getSetScaleDownLevel() if settings.getSetScaleDownLevel() >0 else -float("inf")
setScaleUpLevel = settings.getSetScaleUpLevel() if settings.getSetScaleUpLevel() >0 else float("inf")
getScaleDownLevel = settings.getGetScaleDownLevel() if settings.getGetScaleDownLevel() >0 else -float("inf")
getScaleUpLevel = settings.getGetScaleUpLevel() if settings.getGetScaleUpLevel() >0 else float("inf")
logger.debug("Metricator alive, period: "+ str(period) +"s, getThrLevel: [" +str(getScaleDownLevel) +"," + str(getScaleUpLevel)+ "], setThrLevel: [" + str(setScaleDownLevel) + "," + str(setScaleUpLevel) + "]" )
# this channel is necessary to send scale up/down requests
internal_channel = InternalChannel(addr='127.0.0.1', port=settings.getIntPort(), logger=logger)
internal_channel.generate_internal_channel_client_side()
from random import gauss
sleep(60)
while True:
sleep(abs(gauss(period, period/10)))
locked = timing["setters"][0].isTransferring()
setMean = 1.0 - timing["setters"][0].calcMean()
getMean = 0.0
for metr in timing["getters"]:
getMean += 1.0 - metr.calcMean()
getMean = getMean / settings.getGetterThreadNumber()
logger.debug("Working time for setters: " + str(setMean) + ", getters (mean): " + str(getMean) )
# scale up needed
if getMean >= getScaleUpLevel or setMean >= setScaleUpLevel and not locked:
logger.debug("Requests for scale Up!")
# call scale up service
ListThread.notify_scale_up(internal_channel)
# self.list_communication_thread.notify_scale_up()
# scale down needed
elif getMean <= getScaleDownLevel and setMean <= setScaleDownLevel and not locked:
logger.debug("Requests for scale Down!")
# call scale down service
ListThread.notify_scale_down(internal_channel)
# self.list_communication_thread.notify_scale_down()
评论列表
文章目录