TransferRequest::TransferRequest( Proxy *proxy, const StringList &src_list, const StringList &dst_list, int notify_tid ) : m_src_urls( src_list ), m_dst_urls( dst_list ) { m_notify_tid = notify_tid; m_gahp = NULL; m_status = TransferQueued; m_proxy = AcquireProxy( proxy, (TimerHandlercpp)&TransferRequest::CheckRequest, this ); m_CheckRequest_tid = daemonCore->Register_Timer( 0, (TimerHandlercpp)&TransferRequest::CheckRequest, "TransferRequest::CheckRequest", (Service*)this ); if ( m_src_urls.number() != m_dst_urls.number() ) { formatstr( m_errMsg, "Unenven number of source and destination URLs" ); m_status = TransferFailed; return; } std::string buff; char *gahp_path = param( "NORDUGRID_GAHP" ); if ( gahp_path == NULL ) { formatstr( m_errMsg, "NORDUGRID_GAHP not defined" ); m_status = TransferFailed; return; } formatstr( buff, "NORDUGRID/%s", m_proxy->subject->fqan ); m_gahp = new GahpClient( buff.c_str(), gahp_path ); m_gahp->setNotificationTimerId( m_CheckRequest_tid ); m_gahp->setMode( GahpClient::normal ); m_gahp->setTimeout( param_integer( "GRIDMANAGER_GAHP_CALL_TIMEOUT", 5 * 60 ) ); free( gahp_path ); }
const char *CreamResource::getDelegationURI( Proxy *job_proxy ) { dprintf(D_FULLDEBUG,"*** getDelegationURI(%s)\n",job_proxy->proxy_filename); CreamProxyDelegation *next_deleg; delegatedProxies.Rewind(); while ( ( next_deleg = delegatedProxies.Next() ) != NULL ) { if ( next_deleg->proxy == job_proxy ) { // If the delegation hasn't happened yet, this will return // NULL, which tells the caller to continue to wait. dprintf(D_FULLDEBUG," found CreamProxyDelegation\n"); return next_deleg->deleg_uri; } } dprintf(D_FULLDEBUG," creating new CreamProxyDelegation\n"); next_deleg = new CreamProxyDelegation; next_deleg->deleg_uri = NULL; next_deleg->proxy_expire = 0; next_deleg->lifetime = 0; next_deleg->last_lifetime_extend = 0; next_deleg->last_proxy_refresh = 0; next_deleg->proxy = job_proxy; AcquireProxy( job_proxy, (TimerHandlercpp)&CreamResource::ProxyCallback, this ); delegatedProxies.Append( next_deleg ); // TODO add smarter timer that delays a few seconds daemonCore->Reset_Timer( delegationTimerId, 0 ); return NULL; }
void CreamResource::registerDelegationURI( const char *deleg_uri, Proxy *job_proxy ) { dprintf(D_FULLDEBUG,"*** registerDelegationURI(%s,%s)\n",deleg_uri,job_proxy->proxy_filename); CreamProxyDelegation *next_deleg; delegatedProxies.Rewind(); while ( ( next_deleg = delegatedProxies.Next() ) != NULL ) { if ( next_deleg->deleg_uri != NULL && strcmp( deleg_uri, next_deleg->deleg_uri ) == 0 ) { dprintf(D_FULLDEBUG," found CreamProxyDelegation\n"); return; } } dprintf(D_FULLDEBUG," creating new CreamProxyDelegation\n"); next_deleg = new CreamProxyDelegation; next_deleg->deleg_uri = strdup( deleg_uri ); next_deleg->proxy_expire = 0; next_deleg->lifetime = 0; next_deleg->last_lifetime_extend = 0; next_deleg->last_proxy_refresh = 0; next_deleg->proxy = job_proxy; AcquireProxy( job_proxy, (TimerHandlercpp)&CreamResource::ProxyCallback, this ); delegatedProxies.Append( next_deleg ); // TODO add smarter timer that delays a few seconds daemonCore->Reset_Timer( delegationTimerId, 0 ); }
NordugridJob::NordugridJob( ClassAd *classad ) : BaseJob( classad ) { char buff[4096]; std::string error_string = ""; char *gahp_path = NULL; remoteJobId = NULL; remoteJobState = ""; gmState = GM_INIT; lastProbeTime = 0; probeNow = false; enteredCurrentGmState = time(NULL); lastSubmitAttempt = 0; numSubmitAttempts = 0; resourceManagerString = NULL; jobProxy = NULL; myResource = NULL; gahp = NULL; RSL = NULL; stageList = NULL; stageLocalList = NULL; // In GM_HOLD, we assume HoldReason to be set only if we set it, so make // sure it's unset when we start (unless the job is already held). if ( condorState != HELD && jobAd->LookupString( ATTR_HOLD_REASON, NULL, 0 ) != 0 ) { jobAd->AssignExpr( ATTR_HOLD_REASON, "Undefined" ); } jobProxy = AcquireProxy( jobAd, error_string, (TimerHandlercpp)&BaseJob::SetEvaluateState, this ); if ( jobProxy == NULL ) { if ( error_string == "" ) { formatstr( error_string, "%s is not set in the job ad", ATTR_X509_USER_PROXY ); } goto error_exit; } gahp_path = param( "NORDUGRID_GAHP" ); if ( gahp_path == NULL ) { error_string = "NORDUGRID_GAHP not defined"; goto error_exit; } snprintf( buff, sizeof(buff), "NORDUGRID/%s", jobProxy->subject->fqan ); gahp = new GahpClient( buff, gahp_path ); gahp->setNotificationTimerId( evaluateStateTid ); gahp->setMode( GahpClient::normal ); gahp->setTimeout( gahpCallTimeout ); free( gahp_path ); gahp_path = NULL; buff[0] = '\0'; jobAd->LookupString( ATTR_GRID_RESOURCE, buff, sizeof(buff) ); if ( buff[0] != '\0' ) { const char *token; Tokenize( buff ); token = GetNextToken( " ", false ); if ( !token || strcasecmp( token, "nordugrid" ) ) { formatstr( error_string, "%s not of type nordugrid", ATTR_GRID_RESOURCE ); goto error_exit; } token = GetNextToken( " ", false ); if ( token && *token ) { resourceManagerString = strdup( token ); } else { formatstr( error_string, "%s missing server name", ATTR_GRID_RESOURCE ); goto error_exit; } } else { formatstr( error_string, "%s is not set in the job ad", ATTR_GRID_RESOURCE ); goto error_exit; } myResource = NordugridResource::FindOrCreateResource( resourceManagerString, jobProxy ); myResource->RegisterJob( this ); buff[0] = '\0'; jobAd->LookupString( ATTR_GRID_JOB_ID, buff, sizeof(buff) ); if ( strrchr( buff, ' ' ) ) { SetRemoteJobId( strrchr( buff, ' ' ) + 1 ); myResource->AlreadySubmitted( this ); } else { SetRemoteJobId( NULL ); } jobAd->LookupString( ATTR_GRID_JOB_STATUS, remoteJobState ); return; error_exit: gmState = GM_HOLD; if ( !error_string.empty() ) { jobAd->Assign( ATTR_HOLD_REASON, error_string.c_str() ); } return; }