コード例 #1
0
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;
}
コード例 #2
0
ファイル: DeviceInfo.cpp プロジェクト: cyril0108/samidevice
DeviceCommand DeviceInfo::getDeviceCommandDetail(QString command) const
{
	if (isSupportedCommand(command))
	{
		return supportCommands[command];
	}
	return DeviceCommand();
}
コード例 #3
0
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;
}