Example #1
0
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            
Example #2
0
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
Example #3
0
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))    
Example #4
0
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