本文整理汇总了C++中param_integer函数的典型用法代码示例。如果您正苦于以下问题:C++ param_integer函数的具体用法?C++ param_integer怎么用?C++ param_integer使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了param_integer函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: param_integer
void StarterStatistics::Reconfig() {
int quantum = param_integer("STATISTICS_WINDOW_QUANTUM_STARTER", INT_MAX, 1, INT_MAX);
if (quantum >= INT_MAX)
quantum = param_integer("STATISTICS_WINDOW_QUANTUM", 4*60, 1, INT_MAX);
this->RecentWindowQuantum = quantum;
int window = param_integer("STATISTICS_WINDOW_SECONDS_STARTER", INT_MAX, 1, INT_MAX);
if (window >= INT_MAX)
window = param_integer("STATISTICS_WINDOW_SECONDS", 1200, quantum, INT_MAX);
this->RecentWindowMax = window;
this->RecentWindowMax = window;
Pool.SetRecentMax(window, this->RecentWindowQuantum);
this->PublishFlags = IF_BASICPUB | IF_RECENTPUB;
char* tmp = param("STATISTICS_TO_PUBLISH");
if (tmp) {
this->PublishFlags = generic_stats_ParseConfigString(tmp, "STARTER", "_no_alternate_name_", this->PublishFlags);
free(tmp);
}
}
开发者ID:cvuosalo,项目名称:htcondor,代码行数:21,代码来源:vanilla_proc.cpp
示例2: param
void BaseShadow::config()
{
if (spool) free(spool);
spool = param("SPOOL");
if (!spool) {
EXCEPT("SPOOL not specified in config file.");
}
if (fsDomain) free(fsDomain);
fsDomain = param( "FILESYSTEM_DOMAIN" );
if (!fsDomain) {
EXCEPT("FILESYSTEM_DOMAIN not specified in config file.");
}
if (uidDomain) free(uidDomain);
uidDomain = param( "UID_DOMAIN" );
if (!uidDomain) {
EXCEPT("UID_DOMAIN not specified in config file.");
}
reconnect_ceiling = param_integer( "RECONNECT_BACKOFF_CEILING", 300 );
reconnect_e_factor = 0.0;
reconnect_e_factor = param_double( "RECONNECT_BACKOFF_FACTOR", 2.0, 0.0 );
if( reconnect_e_factor < -1e-4 || reconnect_e_factor > 1e-4) {
reconnect_e_factor = 2.0;
}
m_cleanup_retry_tid = -1;
m_num_cleanup_retries = 0;
// NOTE: these config knobs are very similar to
// LOCAL_UNIVERSE_MAX_JOB_CLEANUP_RETRIES and
// LOCAL_UNIVERSE_JOB_CLEANUP_RETRY_DELAY in the local starter.
m_max_cleanup_retries = param_integer("SHADOW_MAX_JOB_CLEANUP_RETRIES", 5);
m_cleanup_retry_delay = param_integer("SHADOW_JOB_CLEANUP_RETRY_DELAY", 30);
m_lazy_queue_update = param_boolean("SHADOW_LAZY_QUEUE_UPDATE", true);
}
开发者ID:emaste,项目名称:htcondor,代码行数:38,代码来源:baseshadow.cpp
示例3: strtod
void
TransferQueueManager::parseThrottleConfig(char const *config_param,bool &enable_throttle,double &low,double &high,std::string &throttle_short_horizon,std::string &throttle_long_horizon,time_t &throttle_increment_wait)
{
enable_throttle = false;
std::string throttle_config;
if( !param(throttle_config,config_param) ) {
return;
}
char *endptr=NULL;
low = strtod(throttle_config.c_str(),&endptr);
if( !endptr || !(*endptr == ' ' || *endptr == '\0') ) {
EXCEPT("Invalid configuration for %s: %s\n",config_param,throttle_config.c_str());
return;
}
while( *endptr == ' ' ) endptr++;
if( *endptr == '\0' ) {
high = low;
low = 0.9*high;
}
else if( strncmp(endptr,"to ",3)==0 ) {
endptr += 3;
while( *endptr == ' ' ) endptr++;
high = strtod(endptr,&endptr);
if( !endptr || *endptr != '\0' ) {
dprintf(D_ALWAYS,"Invalid configuration for %s: %s\n",config_param,throttle_config.c_str());
return;
}
}
else {
EXCEPT("Invalid configuration for %s: %s\n",config_param,throttle_config.c_str());
}
// for now, these are hard-coded
std::string horizon_param;
formatstr(horizon_param,"%s_SHORT_HORIZON",config_param);
param(throttle_short_horizon,horizon_param.c_str(),"1m");
formatstr(horizon_param,"%s_LONG_HORIZON",config_param);
param(throttle_long_horizon,horizon_param.c_str(),"5m");
std::string wait_param;
formatstr(wait_param,"%s_WAIT_BETWEEN_INCREMENTS",config_param);
throttle_increment_wait = (time_t) param_integer(wait_param.c_str(),60,0);
m_throttle_disk_load = true;
}
开发者ID:AlanDeSmet,项目名称:htcondor,代码行数:50,代码来源:transfer_queue.cpp
示例4: param_integer
bool SelfMonitorData::ExportData(ClassAd *ad)
{
bool success;
MyString attribute;
if (ad == NULL) {
success = false;
} else {
ad->Assign("MonitorSelfTime", last_sample_time);
ad->Assign("MonitorSelfCPUUsage", cpu_usage);
ad->Assign("MonitorSelfImageSize", image_size);
ad->Assign("MonitorSelfResidentSetSize", rs_size);
ad->Assign("MonitorSelfAge", age);
ad->Assign("MonitorSelfRegisteredSocketCount", registered_socket_count);
ad->Assign("MonitorSelfSecuritySessions", cached_security_sessions);
ad->Assign(ATTR_DETECTED_CPUS, param_integer("DETECTED_CORES", 0));
ad->Assign(ATTR_DETECTED_MEMORY, param_integer("DETECTED_MEMORY", 0));
success = true;
}
return success;
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:23,代码来源:self_monitor.cpp
示例5: param_integer
void
HibernationManager::update( void )
{
int previous_inteval = m_interval;
m_interval = param_integer ( "HIBERNATE_CHECK_INTERVAL",
0 /* default */, 0 /* min; no max */ );
bool change = ( previous_inteval != m_interval );
if ( change ) {
dprintf ( D_ALWAYS, "HibernationManager: Hibernation is %s\n",
( m_interval > 0 ? "enabled" : "disabled" ) );
}
if ( m_hibernator ) {
m_hibernator->update( );
}
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:15,代码来源:hibernation_manager.cpp
示例6: NordugridJobReconfig
void NordugridJobReconfig()
{
int tmp_int;
tmp_int = param_integer( "GRIDMANAGER_GAHP_CALL_TIMEOUT", 5 * 60 );
NordugridJob::setGahpCallTimeout( tmp_int );
// Tell all the resource objects to deal with their new config values
NordugridResource *next_resource;
NordugridResource::ResourcesByName.startIterations();
while ( NordugridResource::ResourcesByName.iterate( next_resource ) != 0 ) {
next_resource->Reconfig();
}
}
开发者ID:AlanDeSmet,项目名称:htcondor,代码行数:16,代码来源:nordugridjob.cpp
示例7: sleepStateToInt
HibernatorBase::SLEEP_STATE
UserDefinedToolsHibernator::enterState ( HibernatorBase::SLEEP_STATE state ) const
{
/** Make sure a tool for this sleep state has been defined */
unsigned index = sleepStateToInt ( state );
if ( NULL == m_tool_paths[index] ) {
dprintf (
D_FULLDEBUG,
"Hibernator::%s tool not configured.\n",
HibernatorBase::sleepStateToString ( state ) );
return HibernatorBase::NONE;
}
/** Tell DaemonCore to register the process family so we can
safely kill everything from the reaper */
FamilyInfo fi;
fi.max_snapshot_interval = param_integer (
"PID_SNAPSHOT_INTERVAL",
15 );
/** Run the user tool */
int pid = daemonCore->Create_Process (
m_tool_paths[index],
m_tool_args[index],
PRIV_CONDOR_FINAL,
m_reaper_id,
FALSE,
FALSE,
NULL,
NULL,
&fi );
if ( FALSE == pid ) {
dprintf (
D_ALWAYS,
"UserDefinedToolsHibernator::enterState: Create_Process() "
"failed\n" );
return HibernatorBase::NONE;
}
return state;
}
开发者ID:cwmartin,项目名称:htcondor,代码行数:45,代码来源:hibernator.tools.cpp
示例8: CancelSubmit
void BaseResource::UnregisterJob( BaseJob *job )
{
CancelSubmit( job );
pingRequesters.Delete( job );
registeredJobs.Delete( job );
leaseUpdates.Delete( job );
if ( IsEmpty() ) {
int delay = param_integer( "GRIDMANAGER_EMPTY_RESOURCE_DELAY", 5*60 );
if ( delay < 0 ) {
delay = 0;
}
deleteMeTid = daemonCore->Register_Timer( delay,
(TimerHandlercpp)&BaseResource::DeleteMe,
"BaseResource::DeleteMe", (Service*)this );
}
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:18,代码来源:baseresource.cpp
示例9: strdup
BaseResource::BaseResource( const char *resource_name )
{
resourceName = strdup( resource_name );
deleteMeTid = TIMER_UNSET;
resourceDown = false;
firstPingDone = false;
pingActive = false;
pingTimerId = daemonCore->Register_Timer( 0,
(TimerHandlercpp)&BaseResource::Ping,
"BaseResource::Ping", (Service*)this );
lastPing = 0;
lastStatusChange = 0;
jobLimit = DEFAULT_MAX_SUBMITTED_JOBS_PER_RESOURCE;
hasLeases = false;
updateLeasesTimerId = daemonCore->Register_Timer( 0,
(TimerHandlercpp)&BaseResource::UpdateLeases,
"BaseResource::UpdateLeases", (Service*)this );
lastUpdateLeases = 0;
updateLeasesActive = false;
updateLeasesCmdActive = false;
m_hasSharedLeases = false;
m_defaultLeaseDuration = -1;
m_sharedLeaseExpiration = 0;
_updateCollectorTimerId = daemonCore->Register_Timer (
0,
(TimerHandlercpp)&BaseResource::UpdateCollector,
"BaseResource::UpdateCollector",
(Service*)this );
_lastCollectorUpdate = 0;
_firstCollectorUpdate = true;
_collectorUpdateInterval = param_integer (
"GRIDMANAGER_COLLECTOR_UPDATE_INTERVAL", 5*60 );
m_batchStatusActive = false;
m_batchPollTid = TIMER_UNSET;
m_paramJobPollRate = -1;
m_paramJobPollInterval = -1;
m_jobPollInterval = 0;
}
开发者ID:brianhlin,项目名称:htcondor,代码行数:44,代码来源:baseresource.cpp
示例10: countTypes
int countTypes( int max_types, int num_cpus, int** array_ptr, bool except )
{
int i, num=0, num_set=0;
MyString param_name;
MyString cruft_name;
int* my_type_nums = new int[max_types];
if( ! array_ptr ) {
EXCEPT( "ResMgr:countTypes() called with NULL array_ptr!" );
}
// Type 0 is special, user's shouldn't define it.
_checkInvalidParam("NUM_SLOTS_TYPE_0", except);
// CRUFT
_checkInvalidParam("NUM_VIRTUAL_MACHINES_TYPE_0", except);
for( i=1; i<max_types; i++ ) {
param_name.formatstr("NUM_SLOTS_TYPE_%d", i);
if (param_boolean("ALLOW_VM_CRUFT", false)) {
cruft_name.formatstr("NUM_VIRTUAL_MACHINES_TYPE_%d", i);
my_type_nums[i] = param_integer(param_name.Value(),
param_integer(cruft_name.Value(),
0));
} else {
my_type_nums[i] = param_integer(param_name.Value(), 0);
}
if (my_type_nums[i]) {
num_set = 1;
num += my_type_nums[i];
}
}
if( num_set ) {
// We found type-specific stuff, use that.
my_type_nums[0] = 0;
} else {
// We haven't found any special types yet. Therefore,
// we're evenly dividing things, so we only have to figure
// out how many nodes to advertise.
if (param_boolean("ALLOW_VM_CRUFT", false)) {
my_type_nums[0] = param_integer("NUM_SLOTS",
param_integer("NUM_VIRTUAL_MACHINES",
num_cpus));
} else {
my_type_nums[0] = param_integer("NUM_SLOTS", num_cpus);
}
num = my_type_nums[0];
}
*array_ptr = my_type_nums;
return num;
}
开发者ID:AlanDeSmet,项目名称:htcondor,代码行数:51,代码来源:slot_builder.cpp
示例11: param_integer
void
CCBListener::InitAndReconfig()
{
int new_heartbeat_interval = param_integer("CCB_HEARTBEAT_INTERVAL",1200,0);
if( new_heartbeat_interval != m_heartbeat_interval ) {
if( new_heartbeat_interval < 30 && new_heartbeat_interval > 0 ) {
new_heartbeat_interval = 30;
// CCB server doesn't expect a high rate of unsolicited
// input from us
dprintf(D_ALWAYS,
"CCBListener: using minimum heartbeat interval of %ds\n",
new_heartbeat_interval);
}
m_heartbeat_interval = new_heartbeat_interval;
if( m_heartbeat_initialized ) {
RescheduleHeartbeat();
}
}
}
开发者ID:osg-bosco,项目名称:htcondor,代码行数:19,代码来源:ccb_listener.cpp
示例12: param_integer
void GlobusResource::Reconfig()
{
int tmp_int;
BaseResource::Reconfig();
gahp->setTimeout( gahpCallTimeout );
tmp_int = param_integer( "GRIDMANAGER_MAX_JOBMANAGERS_PER_RESOURCE",
DEFAULT_MAX_JOBMANAGERS_PER_RESOURCE );
if ( tmp_int == 0 ) {
submitJMLimit = GM_RESOURCE_UNLIMITED;
restartJMLimit = GM_RESOURCE_UNLIMITED;
} else {
if ( tmp_int < 2 ) {
tmp_int = 2;
}
submitJMLimit = tmp_int / 2;
restartJMLimit = tmp_int - submitJMLimit;
}
// If the jobmanager limits were widened, move jobs from Wanted to
// Allowed and signal them
while ( ( submitJMsAllowed.Length() + restartJMsAllowed.Length() <
submitJMLimit + restartJMLimit ) &&
( submitJMsWanted.Length() != 0 ||
restartJMsWanted.Length() != 0 ) ) {
JMComplete( NULL );
}
if ( enableGridMonitor ) {
// start grid monitor
daemonCore->Reset_Timer( checkMonitorTid, 0 );
} else {
// stop grid monitor
if ( monitorActive || monitorStarting ) {
StopMonitor();
}
daemonCore->Reset_Timer( checkMonitorTid, TIMER_NEVER );
}
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:42,代码来源:globusresource.cpp
示例13: scheduleHousekeeper
int CollectorEngine::
scheduleHousekeeper (int timeout)
{
// Are we filtering updates that we forward to the view collector?
std::string watch_list;
param(watch_list,"COLLECTOR_FORWARD_WATCH_LIST", "State,Cpus,Memory,IdleJobs,ClaimId,Capability,ClaimIdList,ChildClaimIds");
m_forwardWatchList.clearAll();
m_forwardWatchList.initializeFromString(watch_list.c_str());
m_forwardFilteringEnabled = param_boolean( "COLLECTOR_FORWARD_FILTERING", false );
// cancel outstanding housekeeping requests
if (housekeeperTimerID != -1)
{
(void) daemonCore->Cancel_Timer(housekeeperTimerID);
}
// reset for new timer
if (timeout < 0)
return 0;
// set to new timeout interval
machineUpdateInterval = timeout;
m_forwardInterval = param_integer("COLLECTOR_FORWARD_INTERVAL", machineUpdateInterval / 3, 0);
// if timeout interval was non-zero (i.e., housekeeping required) ...
if (timeout > 0)
{
// schedule housekeeper
housekeeperTimerID = daemonCore->Register_Timer(machineUpdateInterval,
machineUpdateInterval,
(TimerHandlercpp)&CollectorEngine::housekeeper,
"CollectorEngine::housekeeper",this);
if (housekeeperTimerID == -1)
return 0;
}
return 1;
}
开发者ID:brianhlin,项目名称:htcondor,代码行数:40,代码来源:collector_engine.cpp
示例14: decRefCount
void
CCBListener::Disconnected()
{
if( m_sock ) {
daemonCore->Cancel_Socket( m_sock );
delete m_sock;
m_sock = NULL;
}
if( m_waiting_for_connect ) {
m_waiting_for_connect = false;
decRefCount();
}
m_waiting_for_registration = false;
m_registered = false;
StopHeartbeat();
if( m_reconnect_timer != -1 ) {
return; // already in progress
}
int reconnect_time = param_integer("CCB_RECONNECT_TIME",60);
dprintf(D_ALWAYS,
"CCBListener: connection to CCB server %s failed; "
"will try to reconnect in %d seconds.\n",
m_ccb_address.Value(), reconnect_time);
m_reconnect_timer = daemonCore->Register_Timer(
reconnect_time,
(TimerHandlercpp)&CCBListener::ReconnectTime,
"CCBListener::ReconnectTime",
this );
ASSERT( m_reconnect_timer != -1 );
}
开发者ID:osg-bosco,项目名称:htcondor,代码行数:38,代码来源:ccb_listener.cpp
示例15: Reconfig
void
Reconfig()
{
contact_schedd_interval =
param_integer ("C_GAHP_CONTACT_SCHEDD_DELAY", 5);
// When GSI authentication is used, we're willing to trust schedds
// which have the same credential as the job
if ( proxySubjectName ) {
char *daemon_subjects = param( "GSI_DAEMON_NAME" );
if ( daemon_subjects ) {
std::string buff;
formatstr( buff, "%s,%s", daemon_subjects, proxySubjectName );
dprintf( D_ALWAYS, "Setting %s=%s\n", "GSI_DAEMON_NAME",
buff.c_str() );
// We must use our daemon subsystem prefix in case the
// admin used it in the config file.
config_insert( "C_GAHP_WORKER_THREAD.GSI_DAEMON_NAME",
buff.c_str() );
free( daemon_subjects );
}
}
}
开发者ID:AmesianX,项目名称:htcondor,代码行数:23,代码来源:schedd_client_main.cpp
示例16: m_send_end_negotiate
ResourceRequestList::ResourceRequestList(int protocol_version)
: m_send_end_negotiate(false),
m_send_end_negotiate_now(false),
m_requests_to_fetch(0)
{
m_protocol_version = protocol_version;
m_clear_rejected_autoclusters = false;
m_use_resource_request_counts = param_boolean("USE_RESOURCE_REQUEST_COUNTS",true);
if ( protocol_version == 0 || m_use_resource_request_counts == false ) {
// Protocol version is 0, and schedd resource request lists were introduced
// in protocol version 1. so set m_num_to_fetch to 1 so we use the old
// protocol of getting one request at a time with this old schedd.
// Also we must use the old protocol if admin disabled USE_RESOURCE_REQUEST_COUNTS,
// since the new protocol relies on that.
m_num_to_fetch = 1;
} else {
m_num_to_fetch = param_integer("NEGOTIATOR_RESOURCE_REQUEST_LIST_SIZE");
}
errcode = 0;
current_autocluster = -1;
resource_request_count = 0;
resource_request_offers = 0;
}
开发者ID:dcbradley,项目名称:htcondor,代码行数:23,代码来源:matchmaker_negotiate.cpp
示例17: param_integer
void
BaseShadow::checkSwap( void )
{
int reserved_swap, free_swap;
// Reserved swap is specified in megabytes
reserved_swap = param_integer( "RESERVED_SWAP", 0 );
reserved_swap *= 1024;
if( reserved_swap == 0 ) {
// We're not supposed to care about swap space at all, so
// none of the rest of the checks matter at all.
return;
}
free_swap = sysapi_swap_space();
dprintf( D_FULLDEBUG, "*** Reserved Swap = %d\n", reserved_swap );
dprintf( D_FULLDEBUG, "*** Free Swap = %d\n", free_swap );
if( free_swap < reserved_swap ) {
dprintf( D_ALWAYS, "Not enough reserved swap space\n" );
DC_Exit( JOB_NO_MEM );
}
}
开发者ID:AlainRoy,项目名称:htcondor,代码行数:24,代码来源:baseshadow.cpp
示例18: init_params
void
init_params()
{
char *tmp;
static int master_name_in_config = 0;
if( ! master_name_in_config ) {
// First time, or we know it's not in the config file.
if( ! MasterName ) {
// Not set on command line
tmp = param( "MASTER_NAME" );
if( tmp ) {
MasterName = build_valid_daemon_name( tmp );
master_name_in_config = 1;
free( tmp );
}
}
} else {
delete [] MasterName;
tmp = param( "MASTER_NAME" );
MasterName = build_valid_daemon_name( tmp );
free( tmp );
}
if( MasterName ) {
dprintf( D_FULLDEBUG, "Using name: %s\n", MasterName );
}
if (!param_boolean_crufty("START_MASTER", true)) {
dprintf( D_ALWAYS, "START_MASTER was set to FALSE, shutting down.\n" );
StartDaemons = FALSE;
main_shutdown_graceful();
}
StartDaemons = TRUE;
if (!param_boolean_crufty("START_DAEMONS", true)) {
dprintf( D_ALWAYS,
"START_DAEMONS flag was set to FALSE. Not starting daemons.\n" );
StartDaemons = FALSE;
}
// If we were sent the daemons_off command, don't forget that
// here.
if( GotDaemonsOff ) {
StartDaemons = FALSE;
}
PublishObituaries = param_boolean_crufty("PUBLISH_OBITUARIES", true) ? TRUE : FALSE;
Lines = param_integer("OBITUARY_LOG_LENGTH",20);
master_backoff_constant = param_integer( "MASTER_BACKOFF_CONSTANT", 9, 1 );
master_backoff_ceiling = param_integer( "MASTER_BACKOFF_CEILING", 3600,1 );
master_backoff_factor = param_double( "MASTER_BACKOFF_FACTOR", 2.0, 0 );
if( master_backoff_factor <= 0.0 ) {
master_backoff_factor = 2.0;
}
master_recover_time = param_integer( "MASTER_RECOVER_FACTOR", 300, 1 );
update_interval = param_integer( "MASTER_UPDATE_INTERVAL", 5 * MINUTE, 1 );
check_new_exec_interval = param_integer( "MASTER_CHECK_NEW_EXEC_INTERVAL", 5*MINUTE );
new_bin_delay = param_integer( "MASTER_NEW_BINARY_DELAY", 2*MINUTE, 1 );
new_bin_restart_mode = GRACEFUL;
char * restart_mode = param("MASTER_NEW_BINARY_RESTART");
if (restart_mode) {
#if 1
StopStateT mode = StringToStopState(restart_mode);
#else
static const struct {
const char * text;
StopStateT mode;
} modes[] = {
{ "GRACEFUL", GRACEFUL },
{ "PEACEFUL", PEACEFUL },
{ "NEVER", NONE }, { "NONE", NONE }, { "NO", NONE },
// { "FAST", FAST },
// { "KILL", KILL },
};
StopStateT mode = (StopStateT)-1; // prime with -1 so we can detect bad input.
for (int ii = 0; ii < (int)COUNTOF(modes); ++ii) {
if (MATCH == strcasecmp(restart_mode, modes[ii].text)) {
mode = modes[ii].mode;
break;
}
}
#endif
if (mode == (StopStateT)-1) {
dprintf(D_ALWAYS, "%s is not a valid value for MASTER_NEW_BINARY_RESTART. using GRACEFUL\n", restart_mode);
}
if (mode >= 0 && mode <= NONE)
new_bin_restart_mode = mode;
free(restart_mode);
}
preen_interval = param_integer( "PREEN_INTERVAL", 24*HOUR, 0 );
//.........这里部分代码省略.........
开发者ID:zhangzhehust,项目名称:htcondor,代码行数:101,代码来源:master.cpp
示例19: EXCEPT
GlobusResource::ReadFileStatus
GlobusResource::ReadMonitorJobStatusFile()
{
// return true if file successfully processed and jobs notified,
// else return false.
// TODO should distinguish between temporary and permanent problems.
// e.g. if file is incomplete, retry after short delay
FILE *fp;
char buff[1024];
char contact[1024];
int status;
int scan_start = 0;
int scan_finish = 0;
int job_count = 0;
if(monitorJobStatusFile == NULL) {
EXCEPT("Consistency problem for GlobusResource::ReadMonitorJobStatusFile %s, null job status file name", resourceName);
}
fp = safe_fopen_wrapper_follow( monitorJobStatusFile, "r" );
if ( fp == NULL ) {
dprintf( D_ALWAYS, "Failed to open grid_monitor job status file %s\n",
monitorJobStatusFile );
return RFS_ERROR;
}
if ( fgets( buff, sizeof(buff), fp ) == NULL ) {
if( feof(fp) ) {
dprintf( D_FULLDEBUG, "grid_monitor job status file empty (%s), treating as partial.\n",
monitorJobStatusFile );
fclose( fp );
return RFS_PARTIAL;
}
dprintf( D_ALWAYS, "Can't read grid_monitor job status file %s\n",
monitorJobStatusFile );
fclose( fp );
return RFS_ERROR;
}
if ( sscanf( buff, "%d %d", &scan_start, &scan_finish ) != 2 ) {
dprintf( D_ALWAYS, "Failed to read scan times from grid_monitor "
"status file %s\n", monitorJobStatusFile );
fclose( fp );
return RFS_ERROR;
}
bool found_eof = false;
while ( fgets( buff, sizeof(buff), fp ) != NULL ) {
contact[0] = '\0';
status = 0;
const char * MAGIC_EOF = "GRIDMONEOF";
if(strncmp(buff, MAGIC_EOF, strlen(MAGIC_EOF)) == 0) {
found_eof = true;
break;
}
if ( sscanf( buff, "%s %d", contact, &status ) == 2 &&
*contact != '\0' && status > 0 ) {
int rc;
GlobusJob *job = NULL;
job_count++;
rc = JobsByContact.lookup( HashKey( globusJobId(contact) ), job );
if ( rc == 0 && job != NULL ) {
if ( status == GLOBUS_GRAM_PROTOCOL_JOB_STATE_DONE ) {
status=GLOBUS_GRAM_PROTOCOL_JOB_STATE_STAGE_OUT;
}
// Don't flood the log file
// with a long stream of identical job status updates.
// We do need to send identical job status updates to
// the job so that it can track the last time we
// received an update on its status.
if ( status != job->globusState ) {
dprintf(D_FULLDEBUG,"Sending callback of %d to %d.%d (%s)\n",status,job->procID.cluster,job->procID.proc, resourceName);
}
job->GramCallback( status, 0 );
}
}
}
fclose( fp );
int limit = param_integer( "GRID_MONITOR_NO_STATUS_TIMEOUT", 15*60 );
int now = time(NULL);
GlobusJob *next_job;
registeredJobs.Rewind();
while ( (next_job = (GlobusJob *)registeredJobs.Next()) != NULL ) {
if ( next_job->jobContact &&
now > next_job->lastRemoteStatusUpdate + limit ) {
next_job->SetEvaluateState();
}
}
dprintf( D_FULLDEBUG, "Read %s grid_monitor status file for %s: "
"scan start=%d, scan finish=%d, job count=%d\n",
found_eof ? "full" : "partial",
resourceName, scan_start, scan_finish, job_count );
if(found_eof)
//.........这里部分代码省略.........
开发者ID:AlainRoy,项目名称:htcondor,代码行数:101,代码来源:globusresource.cpp
示例20: dprintf
//.........这里部分代码省略.........
}
log_mod_time = file_status.st_mtime;
if ( job_status_mod_time > jobStatusFileLastReadTime ) {
dprintf(D_FULLDEBUG, "grid_monitor job status for %s file has been refreshed.\n", resourceName);
ReadFileStatus status = ReadMonitorJobStatusFile();
if(status == RFS_OK) {
dprintf(D_FULLDEBUG, "Read grid_monitor status file for %s successfully\n", resourceName);
jobStatusFileLastReadTime = time(NULL);
jobStatusFileLastUpdate = time(NULL);
daemonCore->Reset_Timer( checkMonitorTid, 30 );
} else if(status == RFS_PARTIAL) {
const int RETRY_TIME = 10;
dprintf(D_FULLDEBUG,"*** status file is partial, "
"will try again in %d seconds\n", RETRY_TIME);
daemonCore->Reset_Timer( checkMonitorTid, RETRY_TIME );
} else if(status == RFS_ERROR) {
dprintf(D_ALWAYS,"grid_monitor: error reading job status "
"file for %s, stopping grid monitor\n", resourceName);
// TODO: Try to restart monitor?
AbandonMonitor();
return;
} else {
EXCEPT("ReadMonitorJobStatusFile returned unexpected %d "
"(for %s)", (int)status, resourceName);
}
}
int log_file_timeout = param_integer("GRID_MONITOR_HEARTBEAT_TIMEOUT", 300);
int monitor_retry_duration = param_integer("GRID_MONITOR_RETRY_DURATION", 900);
if ( log_mod_time > logFileLastReadTime ) {
dprintf(D_FULLDEBUG, "grid_monitor log file for %s updated.\n",
resourceName);
rc = ReadMonitorLogFile();
switch( rc ) {
case 0: // Normal / OK
dprintf(D_FULLDEBUG,
"grid_monitor log file for %s looks normal\n",
resourceName);
if ( monitorStarting ) {
dprintf(D_ALWAYS, "Successfully started grid_monitor "
"for %s\n", resourceName);
monitorStarting = false;
monitorFirstStartup = false;
monitorActive = true;
registeredJobs.Rewind();
while ( registeredJobs.Next( base_job ) ) {
job = dynamic_cast<GlobusJob*>( base_job );
job->SetEvaluateState();
}
}
logFileLastReadTime = time(NULL);
daemonCore->Reset_Timer( checkMonitorTid, 30 );
break;
case 1: // Exitted normally (should restart)
dprintf(D_FULLDEBUG,
"grid_monitor for %s reached maximum lifetime, "
开发者ID:AlainRoy,项目名称:htcondor,代码行数:67,代码来源:globusresource.cpp
注:本文中的param_integer函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论