def p_update_global_clientdatas_state(runInstanceData,images,nodeList,clientDataList,instanceList,state): logger.debug('p_update_global_clientdatas_state start') user = runInstanceData.user imageID = runInstanceData.image_id nodeIp = runInstanceData.node_ip strinfo = 'user: '******' imageID: '+imageID+' nodeIp: '+nodeIp logger.debug('p_update_global_clientdatas_state:%s' %str(strinfo)) nodeInfo = vmEngineUtility.get_nodeinfo(nodeIp,nodeList) if nodeInfo.isLocal: if clientDataList.has_key(user) and clientDataList[user].has_key('local') and clientDataList[user]['local'].has_key(nodeIp) : clientinfos = clientDataList[user]['local'][nodeIp] for cl in clientinfos: if cl.image_id == imageID: g_user_thread_lock[user].acquire() cl.node_ip = nodeIp cl.instance_state.state = state g_user_thread_lock[user].release() p_update_global_instances_state(cl,nodeList,instanceList) break else: if clientDataList.has_key(user) and clientDataList[user].has_key('remote'): clientinfos = clientDataList[user]['remote'] for cl in clientinfos: if cl.image_id == imageID: g_user_thread_lock[user].acquire() cl.node_ip = nodeIp cl.instance_state.state = state g_user_thread_lock[user].release() clInfo = copy.deepcopy(cl) p_update_global_instances_state(clInfo,nodeList,instanceList) logger.debug('p_update_global_clientdatas_state : %s' %str(cl)) break
def add_vmconfig(vmconfig,images,nodeList,clientDataList): img = vmEngineUtility.get_imageinfo(vmconfig.image_id,images) #vmEngineUtility. if img==None: logger.debug('init_client_info : no image') return logger.debug('init_client_info image:%s' %str(img)) clientInfo = thd_client_info() clientInfo.image_id = vmconfig.image_id clientInfo.user = vmconfig.user clientInfo.vmconfig_id = vmconfig.id clientInfo.image_name = img.name clientInfo.client_data_id = vmEngineUtility.create_clientdata_id(vmconfig.user,vmconfig.image_id) clientInfo.is_assign_node = vmconfig.is_assign_node if vmconfig.is_assign_node: clientInfo.node_ip = vmconfig.node_ip else: clientInfo.node_ip = 'any' if vmconfig.thermophoresis!=None: clientInfo.thermophoresis=copy.deepcopy(vmconfig.thermophoresis) if vmconfig.net_info!=None: clientInfo.net_info = copy.deepcopy(vmconfig.net_info) if vmconfig.run_schedule!=None: clientInfo.run_schedule = copy.deepcopy(vmconfig.run_schedule) if vmconfig.vm_info!=None: clientInfo.vm_info = copy.deepcopy(vmconfig.vm_info) if not vmconfig.is_assign_node: clientInfo.vm_info.is_run_without_copy = True if vmconfig.vm_info.machine_name==None: clientInfo.vm_info.machine_name = img.name if vmconfig.snapshot!=None: clientInfo.snapshot = copy.deepcopy(vmconfig.snapshot) if vmconfig.peripheral!=None: clientInfo.peripheral = copy.deepcopy(vmconfig.peripheral) instanceState= thd_instance_state() instanceState.instance_type= img.imageType instanceState.is_can_run = True instanceState.download_progress = -1 instanceState.state = thd_TRANSACT_STATE.TERMINATED instanceState.is_local = False isRemoteNode = True if vmconfig.is_assign_node: nodeInfo = vmEngineUtility.get_nodeinfo(vmconfig.node_ip,nodeList) if nodeInfo!=None and nodeInfo.isLocal!=None and nodeInfo.isLocal: instanceState.is_local = True isRemoteNode = False clientInfo.instance_state = instanceState clientInfo.os_type = img.OS clientInfo.platform = img.platform clientInfo.image_category = img.imageCategory clientInfo.image_size = img.size clientInfo.user_department_id = vmconfig.user_department_id logger.debug('the clientInfo: %s' %str(clientInfo)) vmEngineUtility.add_clientinfo_to_dictionary(clientInfo,clientDataList) logger.debug('init_client_info :%s' %str(clientDataList)) return
def update_global_by_transactions(transmitData,nodeList,clientDataList,instanceList): logger.debug('update_global_by_transactions :%s' %str(transmitData)) nodeInfo = vmEngineUtility.get_nodeinfo(transmitData.node_ip,nodeList) if nodeInfo==None: logger.error('the node not register: %s' %transmitData.node_ip) return logger.debug('clientData :%s' %str(clientDataList)) for user in clientDataList.keys(): p_clientinfos=None if nodeInfo.isLocal!=None and nodeInfo.isLocal: if clientDataList[user].has_key('local') and clientDataList[user]['local'].has_key(transmitData.node_ip): p_clientinfos = clientDataList[user]['local'][transmitData.node_ip] else: if clientDataList[user].has_key('remote'): p_clientinfos = clientDataList[user]['remote'] if p_clientinfos!=None: for clientinfo in p_clientinfos: if clientinfo.node_ip ==transmitData.node_ip : clientHasTrac = False if len(transmitData.transactions)>0: for transaction in transmitData.transactions: if(transaction.user==clientinfo.user and transaction.imageID==clientinfo.image_id): clientHasTrac = True if not g_user_thread_lock.has_key(user): g_user_thread_lock[user]=threading.Lock() g_user_thread_lock[user].acquire() if clientinfo.instance_state.state==thd_TRANSACT_STATE.DOWNLOADING : if transaction.state!=thd_TRANSACT_STATE.TERMINATED : clientinfo.instance_state.state = transaction.state else: if clientinfo.instance_state.state==thd_TRANSACT_STATE.SHUTTING_DOWN : #instance from shuitingdown to terminated,the transit state not set to client data if transaction.state == thd_TRANSACT_STATE.TERMINATED: clientinfo.instance_state.state = transaction.state else: clientinfo.instance_state.state = transaction.state clientinfo.vm_info.vm_port = transaction.instancePort clientinfo.vm_info.vm_password = transaction.instancePassword clientinfo.instance_state.download_progress = transaction.downloadProgress g_user_thread_lock[user].release() logger.debug('clientInfo: %s' %str(clientinfo)) p_update_global_instances_state(clientinfo,nodeList,instanceList) if not clientHasTrac: if not g_user_thread_lock.has_key(user): g_user_thread_lock[user]=threading.Lock() g_user_thread_lock[user].acquire() clientinfo.instance_state.state = thd_TRANSACT_STATE.TERMINATED clientinfo.vm_info.vm_port = -1 clientinfo.vm_info.vm_password = None clientinfo.instance_state.download_progress = -1 g_user_thread_lock[user].release() p_delete_global_instances(clientinfo,nodeInfo,instanceList) logger.debug(' clientdata info:%s' %str(clientDataList))
def p_update_global_instances_state(clientData,nodeList,instanceList): if clientData.user==None or clientData.image_id==None or clientData.node_ip==None: logger.warn('p_update_global_instances_state : user imageID or nodeIp is none!') return clusterName = None nodeInfo = vmEngineUtility.get_nodeinfo(clientData.node_ip,nodeList) if nodeInfo!=None: logger.debug('p_update_global_instances_state : the node is %s' %str(nodeInfo)) clusterName = nodeInfo.clusterName logger.debug('p_update_global_instances_state : the clusterName %s' %clusterName) if clusterName!=None: if not g_node_thread_lock.has_key(clientData.node_ip): g_node_thread_lock[clientData.node_ip]=threading.Lock() g_node_thread_lock[clientData.node_ip].acquire() if instanceList.has_key(clusterName): logger.debug('p_update_global_instances_state : has cluster key' ) p_cluster = instanceList[clusterName] if p_cluster.has_key(clientData.node_ip): instances = p_cluster[clientData.node_ip] hasIns = False for insClient in instances: if insClient.image_id ==clientData.image_id and insClient.user == clientData.user : hasIns = True insClient.instance_state.state = clientData.instance_state.state break if not hasIns: instances.append(clientData) else: instances=[] instances.append(clientData) instanceList[clusterName][clientData.node_ip]=instances else: logger.debug('p_update_global_instances_state : no cluster key' ) instances=[] instances.append(clientData) nodeIns = {} nodeIns[clientData.node_ip] = instances instanceList[clusterName]=nodeIns g_node_thread_lock[clientData.node_ip].release() logger.debug('p_update_global_instances_state : the instanceList is %s' %str(instanceList)) return