Merge "2M hugepage appears to be larger than the context help"

This commit is contained in:
Zuul 2018-10-03 14:50:17 +00:00 committed by Gerrit Code Review
commit 86e7d94c11
6 changed files with 70 additions and 4 deletions

View File

@ -1771,3 +1771,19 @@ class AgentManager(service.PeriodicService):
return self._idisk_operator.disk_format_gpt(host_uuid,
idisk_dict,
is_cinder_device)
def update_host_memory(self, context, host_uuid):
"""update the host memory
:param context: an admin context
:param host_uuid: ihost uuid unique id
:return: None
"""
if self._ihost_uuid and self._ihost_uuid == host_uuid:
rpcapi = conductor_rpcapi.ConductorAPI(
topic=conductor_rpcapi.MANAGER_TOPIC)
memory = self._inode_operator.inodes_get_imemory()
rpcapi.imemory_update_by_ihost(context,
self._ihost_uuid,
memory,
force_update=True)

View File

@ -502,9 +502,10 @@ class NodeOperator(object):
'vm_hugepages_possible_1G': max_vm_pages_1G,
})
# calculate 100% 2M pages if it is initial report and the huge
# calculate 90% 2M pages if it is initial report and the huge
# pages have not been allocated
if initial_report:
max_vm_pages_2M = max_vm_pages_2M * 0.9
Total_HP_MiB += int(max_vm_pages_2M * (SZ_2M_Ki / Ki))
Free_HP_MiB = Total_HP_MiB
attr.update({

View File

@ -271,3 +271,14 @@ class AgentAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
host_uuid=host_uuid,
idisk_dict=idisk_dict,
is_cinder_device=is_cinder_device))
def update_host_memory(self, context, host_uuid):
"""Asynchronously, have the agent to send host memory update
:param context: request context.
:param host_uuid: ihost uuid unique id
:returns: pass or fail
"""
return self.fanout_cast(context,
self.make_msg('update_host_memory',
host_uuid=host_uuid))

View File

@ -2140,6 +2140,12 @@ class HostController(rest.RestController):
LOG.info("host %s %s patch" % (ihost_obj.hostname,
log_end))
if ('administrative' in hostupdate.delta and
hostupdate.ihost_patch['administrative'] ==
constants.ADMIN_LOCKED):
LOG.info("Update host memory for (%s)" % ihost_obj['hostname'])
pecan.request.rpcapi.update_host_memory(pecan.request.context,
ihost_obj['uuid'])
return Host.convert_with_links(ihost_obj)
def _vim_host_add(self, ihost):

View File

@ -2744,7 +2744,8 @@ class ConductorManager(service.PeriodicService):
return {'platform_reserved_mib': reserved} if reserved else {}
def imemory_update_by_ihost(self, context,
ihost_uuid, imemory_dict_array):
ihost_uuid, imemory_dict_array,
force_update):
"""Create or update imemory for an ihost with the supplied data.
This method allows records for memory for ihost to be created,
@ -2753,6 +2754,7 @@ class ConductorManager(service.PeriodicService):
:param context: an admin context
:param ihost_uuid: ihost uuid unique id
:param imemory_dict_array: initial values for cpu objects
:param: force_update: force host memory update
:returns: pass or fail
"""
@ -2763,6 +2765,12 @@ class ConductorManager(service.PeriodicService):
LOG.exception("Invalid ihost_uuid %s" % ihost_uuid)
return
if ihost['administrative'] == constants.ADMIN_LOCKED and \
ihost['invprovision'] == constants.PROVISIONED and \
not force_update:
LOG.debug("Ignore the host memory audit after the host is locked")
return
forihostid = ihost['id']
ihost_inodes = self.dbapi.inode_get_by_ihost(ihost_uuid)
@ -10212,3 +10220,13 @@ class ConductorManager(service.PeriodicService):
}
body['metadata']['labels'].update(label_dict)
self._kube.kube_patch_node(host.hostname, body)
def update_host_memory(self, context, host_uuid):
try:
host = self.dbapi.ihost_get(host_uuid)
except exception.ServerNotFound:
LOG.error("Cannot find host by id %s" % host_uuid)
return
rpcapi = agent_rpcapi.AgentAPI()
rpcapi.update_host_memory(context, host.uuid)

View File

@ -308,7 +308,8 @@ class ConductorAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
force_grub_update=force_grub_update))
def imemory_update_by_ihost(self, context,
ihost_uuid, imemory_dict_array):
ihost_uuid, imemory_dict_array,
force_update=False):
"""Create or update memory for an ihost with the supplied data.
This method allows records for memory for ihost to be created,
@ -317,13 +318,15 @@ class ConductorAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
:param context: an admin context
:param ihost_uuid: ihost uuid unique id
:param imemory_dict_array: initial values for memory objects
:param force_update: force a memory update
:returns: pass or fail
"""
return self.call(context,
self.make_msg('imemory_update_by_ihost',
ihost_uuid=ihost_uuid,
imemory_dict_array=imemory_dict_array))
imemory_dict_array=imemory_dict_array,
force_update=force_update))
def idisk_update_by_ihost(self, context,
ihost_uuid, idisk_dict_array):
@ -1648,3 +1651,14 @@ class ConductorAPI(sysinv.openstack.common.rpc.proxy.RpcProxy):
self.make_msg('update_kubernetes_label',
host_uuid=host_uuid,
label_dict=label_dict))
def update_host_memory(self, context, host_uuid):
"""Asynchronously, have a conductor update the host memory
:param context: request context.
:param host_uuid: duuid or id of the host.
"""
LOG.info("ConductorApi.update_host_memory: sending"
" host memory update request to conductor")
return self.cast(context, self.make_msg('update_host_memory',
host_uuid=host_uuid))