int
rsRuleExecMod( rsComm_t *rsComm, ruleExecModInp_t *ruleExecModInp ) {
    rodsServerHost_t *rodsServerHost;
    int status;

    status = getAndConnRcatHost( rsComm, MASTER_RCAT, NULL, &rodsServerHost );
    if ( status < 0 ) {
        return( status );
    }

    if ( rodsServerHost->localFlag == LOCAL_HOST ) {
#ifdef RODS_CAT
        status = _rsRuleExecMod( rsComm, ruleExecModInp );
#else
        status = SYS_NO_RCAT_SERVER_ERR;
#endif
    }
    else {
        status = rcRuleExecMod( rodsServerHost->conn,
                                ruleExecModInp );
    }

    if ( status < 0 ) {
        rodsLog( LOG_NOTICE,
                 "rsRuleExecMod: rcRuleExecMod failed" );
    }
    return ( status );
}
Esempio n. 2
0
int
modDelayedRule( char *ruleId, char *fieldName, char *fieldValue ) {
    int status;

    ruleExecModInp_t ruleExecModInp;
    memset( &ruleExecModInp, 0, sizeof( ruleExecModInp ) );

    /* for the time fields, convert from YYYY-MM-DD.hh:mm:ss in sec of unix time
      if necessary */
    if ( strcmp( fieldName, "exeTime" ) == 0 || strcmp( fieldName, "estimateExeTime" ) == 0 ||
            strcmp( fieldName, "lastExeTime" ) == 0 ) {
        status = checkDateFormat( fieldValue );
        if ( status == DATE_FORMAT_ERR ) {
            printf( "Time format error: it should be sec in unix time or YYYY-MM-DD.hh:mm:ss.\n" );
            return status;
        }
    }

    strncpy( ruleExecModInp.ruleId, ruleId, NAME_LEN );
    addKeyVal( &ruleExecModInp.condInput, fieldName, fieldValue );

    status = rcRuleExecMod( Conn, &ruleExecModInp );

    if ( status == CAT_SUCCESS_BUT_WITH_NO_INFO ) {
        printf( "No rule found with id %s\n", ruleId );
        return status;
    }
    if ( status < 0 ) {
        printError( Conn, status, "rcRuleExecMod" );
    }
    return status;
}