bool VMGahpServer::command_async_mode_on(void) { static const char* command = "ASYNC_MODE_ON"; if( m_is_initialized == false ) { return false; } if( isSupportedCommand(command) == FALSE ) { return false; } if(write_line(command) == false) { return false; } // give some time to gahp server sleep(1); Gahp_Args result; if( read_argv(result) == false ) { return false; } if( result.argc == 0 || result.argv[0][0] != 'S' ) { dprintf(D_ALWAYS,"VMGAHP command '%s' failed\n",command); return false; } return true; }
DeviceCommand DeviceInfo::getDeviceCommandDetail(QString command) const { if (isSupportedCommand(command)) { return supportCommands[command]; } return DeviceCommand(); }
bool VMGahpServer::publishVMClassAd(const char *workingdir) { static const char* command = "CLASSAD"; if( !m_job_ad || !workingdir ) { return false; } if( m_is_initialized == false ) { return false; } if( isSupportedCommand(command) == FALSE ) { return false; } // Before sending command, print the remaining stderr messages from vmgahp printSystemErrorMsg(); if(write_line(command) == false) { return false; } // give some time to gahp server sleep(1); Gahp_Args start_result; if( read_argv(start_result) == false ) { return false; } if( start_result.argc == 0 || start_result.argv[0][0] != 'S' ) { dprintf(D_ALWAYS,"VMGAHP command '%s' failed\n",command); return false; } // Send Working directory MyString vmAttr; vmAttr.sprintf("VM_WORKING_DIR = \"%s\"", workingdir); if ( write_line( vmAttr.Value() ) == false ) { return false; } // publish job ClassAd to vmgahp server via pipe bool can_send_it = false; int total_len = 0; const char *name; ExprTree *expr = NULL; m_job_ad->ResetExpr(); while( m_job_ad->NextExpr(name, expr) ) { can_send_it = false; if( !m_send_all_classad ) { // Instead of sending entire job ClassAd to vmgahp, // we will send some part of job ClassAd necessary to vmgahp. if( !strncasecmp( name, "JobVM", strlen("JobVM") ) || !strncasecmp( name, "VMPARAM", strlen("VMPARAM") ) || !strncasecmp( name, ATTR_CLUSTER_ID, strlen(ATTR_CLUSTER_ID)) || !strncasecmp( name, ATTR_PROC_ID, strlen(ATTR_PROC_ID)) || !strncasecmp( name, ATTR_USER, strlen(ATTR_USER)) || !strncasecmp( name, ATTR_ORIG_JOB_IWD, strlen(ATTR_ORIG_JOB_IWD)) || !strncasecmp( name, ATTR_JOB_ARGUMENTS1, strlen(ATTR_JOB_ARGUMENTS1)) || !strncasecmp( name, ATTR_JOB_ARGUMENTS2, strlen(ATTR_JOB_ARGUMENTS2)) || !strncasecmp( name, ATTR_TRANSFER_INTERMEDIATE_FILES, strlen(ATTR_TRANSFER_INTERMEDIATE_FILES)) || !strncasecmp( name, ATTR_TRANSFER_INPUT_FILES, strlen(ATTR_TRANSFER_INPUT_FILES)) ) { can_send_it = true; } } else { // We will send the entire job ClassAd to vmgahp can_send_it = true; } if( !can_send_it ) { continue; } vmAttr.sprintf( "%s = %s", name, ExprTreeToString( expr ) ); if ( write_line( vmAttr.Value() ) == false ) { return false; } total_len += vmAttr.Length(); if( total_len > 2048 ) { // Give some time for vmgahp to read this pipe sleep(1); printSystemErrorMsg(); total_len = 0; } } static const char *endcommand = "CLASSAD_END"; if(write_line(endcommand) == false) { return false; } // give some time to vmgahp sleep(1); Gahp_Args end_result; if( read_argv(end_result) == false ) { return false; } if( end_result.argc == 0 || end_result.argv[0][0] != 'S' ) { dprintf(D_ALWAYS,"VMGAHP command '%s' failed\n",endcommand); return false; } m_workingdir = workingdir; return true; }