def add_host_CPU_live(self, cpu_ref): """ Add cpu to pool, if it is currently not assigned to a pool. @param cpu_ref: reference of host_cpu instance to add @type cpu_ref: str """ if not self.get_activated(): raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'deactivated') node = XendNode.instance() number = node.get_host_cpu_field(cpu_ref, 'number') self.pool_lock.acquire() try: pool_id = self.query_pool_id() other_pool_ref = self.get_cpu_pool_by_cpu_ref(cpu_ref) if len(other_pool_ref) != 0: raise PoolError(XEND_ERROR_INVALID_CPU, 'cpu already assigned to pool "%s"' % other_pool_ref[0]) xc.cpupool_addcpu(pool_id, number) finally: self.pool_lock.release() if number not in self.proposed_cpus: self.proposed_cpus.append(number) self._update_ncpu(pool_id) if self._managed: XendNode.instance().save_cpu_pools()
def add_host_CPU_live(self, cpu_ref): """ Add cpu to pool, if it is currently not assigned to a pool. @param cpu_ref: reference of host_cpu instance to add @type cpu_ref: str """ if not self.get_activated(): raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'deactivated') node = XendNode.instance() number = node.get_host_cpu_field(cpu_ref, 'number') self.pool_lock.acquire() try: pool_id = self.query_pool_id() other_pool_ref = self.get_cpu_pool_by_cpu_ref(cpu_ref) if len(other_pool_ref) != 0: raise PoolError( XEND_ERROR_INVALID_CPU, 'cpu already assigned to pool "%s"' % other_pool_ref[0]) xc.cpupool_addcpu(pool_id, number) finally: self.pool_lock.release() if number not in self.proposed_cpus: self.proposed_cpus.append(number) self._update_ncpu(pool_id) if self._managed: XendNode.instance().save_cpu_pools()
def activate(self): """ Create pool in hypervisor and add cpus. Preconditions: - pool not already active - enough unbound cpus available Actions: - create pool in hypervisor - select free cpus (preferred from proposed_CPUs list) and bind it to the pool - create entries in Xenstore """ self.pool_lock.acquire() try: if self.get_activated(): raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'activated') sched_policy = self.get_sched_policy() if sched_policy not in XEN_SCHEDULER_TO_ID.keys(): raise PoolError(XEND_ERROR_UNKOWN_SCHED_POLICY) unbound_cpus = set(self.unbound_cpus()) if len(unbound_cpus) < self.ncpu: raise PoolError( XEND_ERROR_INSUFFICIENT_CPUS, [str(self.ncpu), str(len(unbound_cpus))]) # build list of cpu numbers to bind to pool cpu_set = set(self.proposed_cpus).intersection(unbound_cpus) if len(cpu_set) < self.ncpu: pool_cpus = (list(cpu_set) + list(unbound_cpus.difference(cpu_set))) else: pool_cpus = list(cpu_set) pool_cpus = pool_cpus[0:self.ncpu] # create pool in hypervisor pool_id = xc.cpupool_create( sched=XEN_SCHEDULER_TO_ID.get(sched_policy, 0)) self.update_XS(pool_id) # add cpus for cpu in pool_cpus: xc.cpupool_addcpu(pool_id, cpu) finally: self.pool_lock.release()
def activate(self): """ Create pool in hypervisor and add cpus. Preconditions: - pool not already active - enough unbound cpus available Actions: - create pool in hypervisor - select free cpus (preferred from proposed_CPUs list) and bind it to the pool - create entries in Xenstore """ self.pool_lock.acquire() try: if self.get_activated(): raise PoolError(XEND_ERROR_BAD_POOL_STATE, 'activated') sched_policy = self.get_sched_policy() if sched_policy not in XEN_SCHEDULER_TO_ID.keys(): raise PoolError(XEND_ERROR_UNKOWN_SCHED_POLICY) unbound_cpus = set(self.unbound_cpus()) if len(unbound_cpus) < self.ncpu: raise PoolError(XEND_ERROR_INSUFFICIENT_CPUS, [str(self.ncpu), str(len(unbound_cpus))]) # build list of cpu numbers to bind to pool cpu_set = set(self.proposed_cpus).intersection(unbound_cpus) if len(cpu_set) < self.ncpu: pool_cpus = (list(cpu_set) + list(unbound_cpus.difference(cpu_set))) else: pool_cpus = list(cpu_set) pool_cpus = pool_cpus[0:self.ncpu] # create pool in hypervisor pool_id = xc.cpupool_create( sched = XEN_SCHEDULER_TO_ID.get(sched_policy, 0)) self.update_XS(pool_id) # add cpus for cpu in pool_cpus: xc.cpupool_addcpu(pool_id, cpu) finally: self.pool_lock.release()