- #rc, rsp = self._rwcal.get_vdu_list(self._account)
- self._log.debug("Calling get_vdu_list API")
-
- rc, rsp = yield from self._loop.run_in_executor(self._executor,
- self._rwcal.get_vdu_list,
- self._account)
- assert rc == RwStatus.SUCCESS
- vdus = [vm for vm in rsp.vdu_info_list if vm.name == req_params.name]
+ if not self._boot_cache['compute']:
+ self._log.debug("Calling get_vdu_list API")
+ yield from self._lock.acquire()
+ try:
+ self._log.debug("Populating compute cache ")
+ rc, rsp = yield from self._loop.run_in_executor(self._executor,
+ self._rwcal.get_vdu_list,
+ self._account)
+
+ if rc.status != RwStatus.SUCCESS:
+ self._log.error("Virtual-compute-info operation failed for cloud account: %s - error_msg: %s, Traceback: %s",
+ self._account.name, rc.error_msg, rc.traceback)
+ raise ResMgrCALOperationFailure("Virtual-compute-info operation failed for cloud account: %s, Error (%s)"
+ % (self._account.name, rc.error_msg))
+ self._boot_cache['compute'] = rsp.vdu_info_list
+ finally:
+ self._lock.release()
+ else:
+ self._log.debug("!!!!!!!! Found compute cache ")
+
+ vdus = [vm for vm in self._boot_cache['compute'] if vm.name == req_params.name]
+