Description of problem: Setting log size in condor configuration to evaluated value, or to bad value cause daemon abort. Version-Release number of selected component (if applicable): condor-7.6.5-0.6 How reproducible: 100% Steps to Reproduce: 1. set in config MAX_SCHEDD_LOG=a or MAX_SCHEDD_LOG=1024*1024 2. service condor restart 3. ps ax | grep condor -> no schedd is running 4. check MasterLog Actual results: The value other then simple number is ignored. Daemon is aborted without any details in logs. Expected results: All daemons needs to be checked for this error. The MAX_*_LOG value needs to be evaluated. In case of bad value the error message could be logged, at least in MasterLog.
This is because there is no param_long_long() or param_off_t(). Integer types in ClassAds are 32-bit. src/condor_utils/dprintf_config.cpp if (debug_level == 0) { (void)sprintf(pname, "MAX_%s_LOG", subsys); } else { (void)sprintf(pname, "MAX_%s_%s_LOG", subsys, _condor_DebugFlagNames[debug_level-1]+2); } off_t maxlog = 0; pval = param(pname); if (pval != NULL) { // because there is nothing like param_long_long() or param_off_t() bool r = lex_cast(pval, maxlog); if (!r || (maxlog < 0)) { EXCEPT("Invalid config: %s = %s", pname, pval); } MaxLog[debug_level] = maxlog; free(pval); } else { MaxLog[debug_level] = 1024*1024; } This may have to be WONTFIX.
Note - there is an inconsistency here, some MAX_..._LOG config params are evaluated (those using param_integer), $ git grep MAX_ | grep _LOG | grep param | grep \.cpp src/condor_schedd.V6/schedd.cpp: int max_saved_rotations = param_integer( "MAX_JOB_QUEUE_LOG_ROTATIONS", DEFAULT_MAX_JOB_QUEUE_LOG_ROTATIONS ); src/condor_schedd.V6/schedd_main.cpp: int max_historical_logs = param_integer( "MAX_JOB_QUEUE_LOG_ROTATIONS", DEFAULT_MAX_JOB_QUEUE_LOG_ROTATIONS ); src/condor_utils/classadHistory.cpp: MaxHistoryFileSize = param_integer("MAX_HISTORY_LOG", src/condor_utils/file_xml.cpp: xml_log_limit = param_integer("MAX_XML_LOG", FILESIZELIMT); src/condor_utils/proc_family_proxy.cpp: char *procd_log_size = param("MAX_PROCD_LOG"); src/condor_utils/read_user_log.cpp: int max_rotations = param_integer( "EVENT_LOG_MAX_ROTATIONS", 1, 0 ); src/condor_utils/write_user_log.cpp: m_global_max_rotations = param_integer( "EVENT_LOG_MAX_ROTATIONS", 1, 0 ); src/condor_utils/write_user_log.cpp: m_global_max_filesize = param_integer( "EVENT_LOG_MAX_SIZE", -1 ); src/condor_utils/write_user_log.cpp: m_global_max_filesize = param_integer( "MAX_EVENT_LOG", 1000000, 0 );
(In reply to comment #0) > Steps to Reproduce: > 1. set in config MAX_SCHEDD_LOG=a or MAX_SCHEDD_LOG=1024*1024 > 2. service condor restart > 3. ps ax | grep condor -> no schedd is running > 4. check MasterLog > > Actual results: > The value other then simple number is ignored. Daemon is aborted without any > details in logs. As Matt described, values like "1024*1024" which require expression evaluation cannot be addressed currently for MAX_<SUBSYS>_LOG, because the classad library does not currently support 64-bit integer values. Currently, this forces a choice between supporting 64-bit max-log values and supporting generalized expression eval. Support for 64-bit max log values was considered more important to users. There is an upstream RFE for supporting 64-bit integer values in classads: https://condor-wiki.cs.wisc.edu/index.cgi/tktview?tn=2472 Until that RFE is addressed, I agree that this should be "wontfix" (or maybe "deferred"?)
Deferred until https://condor-wiki.cs.wisc.edu/index.cgi/tktview?tn=2472, desire for MAX_..._LOG evaluation recorded upstream.