From kde-commits Mon Jul 16 11:19:37 2012 From: =?utf-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Mon, 16 Jul 2012 11:19:37 +0000 To: kde-commits Subject: icecream Message-Id: <20120716111937.C33F8AC7A9 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=134243785428177 SVN commit 1305965 by lunakl: setting to avoid using hosts where the environment cannot be checked Set ICECC_IGNORE_UNVERIFIED to avoid hosts where it cannot be checked that the environment works there. Usable only with old icecream nodes that cannot be upgraded. M +1 -0 client/main.cpp M +9 -2 client/remote.cpp M +4 -0 client/util.cpp M +1 -0 client/util.h M +16 -0 doc/man-icecream.7.docbook M +10 -0 services/comm.cpp M +4 -3 services/comm.h M +4 -0 services/scheduler.cpp --- trunk/icecream/client/main.cpp #1305964:1305965 @@ -90,6 +90,7 @@ " ICECC_CXX set C++ compiler name (default g++).\n" " ICECC_CLANG_REMOTE_CPP set to 1 or 0 to override remote precompiling with clang\n" " (requires clang -frewrite-includes option).\n" +" ICECC_IGNORE_UNVERIFIED if set, hosts where environment cannot be verified are not used.\n" "\n"); } --- trunk/icecream/client/remote.cpp #1305964:1305965 @@ -356,6 +356,11 @@ } } + if( !IS_PROTOCOL_31( cserver ) && ignore_unverified()) { + log_warning() << "Host " << hostname << " cannot be verified." << endl; + throw( 26 ); + } + CompileFileMsg compile_file( &job ); { log_block b("send compile_file"); @@ -630,7 +635,8 @@ fake_filename += get_absfilename( job.inputFile() ); GetCSMsg getcs (envs, fake_filename, job.language(), torepeat, job.targetPlatform(), job.argumentFlags(), - preferred_host ? preferred_host : string() ); + preferred_host ? preferred_host : string(), + ignore_unverified()); if (!local_daemon->send_msg (getcs)) { log_warning() << "asked for CS\n"; throw( 24 ); @@ -669,7 +675,8 @@ job.appendFlag( rand_seed, Arg_Remote ); GetCSMsg getcs (envs, get_absfilename( job.inputFile() ), job.language(), torepeat, - job.targetPlatform(), job.argumentFlags(), preferred_host ? preferred_host : string() ); + job.targetPlatform(), job.argumentFlags(), preferred_host ? preferred_host : string(), + ignore_unverified()); if (!local_daemon->send_msg (getcs)) { --- trunk/icecream/client/util.cpp #1305964:1305965 @@ -243,3 +243,7 @@ } +bool ignore_unverified() +{ + return getenv("ICECC_IGNORE_UNVERIFIED"); +} --- trunk/icecream/client/util.h #1305964:1305965 @@ -32,6 +32,7 @@ extern void colorify_output(const std::string &s_ccout); extern bool colorify_wanted(const CompileJob &job); extern bool colorify_possible(); +extern bool ignore_unverified(); extern bool dcc_unlock(int lock_fd); extern bool dcc_lock_host(int &lock_fd); --- trunk/icecream/doc/man-icecream.7.docbook #1305964:1305965 @@ -191,6 +191,22 @@ +Avoiding old hosts + +It is possible that compilation on some hosts fails because they are too old +(typically the kernel on the remote host is too old for the glibc from the local host). +Recent icecream versions should automatically detect this and avoid such hosts +when compilation would fail. If some hosts are running old icecream versions and +it is not possible to upgrade them for some reason, use + + + export ICECC_IGNORE_UNVERIFIED=1 + + + + + + Some Numbers --- trunk/icecream/services/comm.cpp #1305964:1305965 @@ -1269,7 +1269,15 @@ preferred_host = string(); if (IS_PROTOCOL_22(c)) *c >> preferred_host; + if (IS_PROTOCOL_31(c)) + { + uint32_t ign; + *c >> ign; + ignore_unverified = ( ign != 0 ); } + else + ignore_unverified = false; +} void GetCSMsg::send_to_channel (MsgChannel *c) const @@ -1284,6 +1292,8 @@ *c << client_id; if (IS_PROTOCOL_22(c)) *c << preferred_host; + if (IS_PROTOCOL_31(c)) + *c << uint32_t( ignore_unverified ); } void --- trunk/icecream/services/comm.h #1305964:1305965 @@ -282,14 +282,15 @@ uint32_t arg_flags; uint32_t client_id; std::string preferred_host; + bool ignore_unverified; GetCSMsg () : Msg(M_GET_CS), count( 1 ),arg_flags( 0 ), client_id( 0 ) {} GetCSMsg (const Environments &envs, const std::string &f, CompileJob::Language _lang, unsigned int _count, std::string _target, unsigned int _arg_flags, - const std::string &host) + const std::string &host, bool _ignore_unverified) : Msg(M_GET_CS), versions( envs ), filename(f), lang(_lang), count( _count ), target( _target ), arg_flags( _arg_flags ), - client_id( 0 ), preferred_host(host) + client_id( 0 ), preferred_host(host), ignore_unverified( _ignore_unverified ) {} virtual void fill_from_channel (MsgChannel * c); virtual void send_to_channel (MsgChannel * c) const; @@ -532,7 +533,7 @@ clientid = job_id = 0; } MonGetCSMsg( int jobid, int hostid, GetCSMsg *m ) - : GetCSMsg( Environments(), m->filename, m->lang, 1, m->target, 0, std::string() ), job_id( jobid ), clientid( hostid ) + : GetCSMsg( Environments(), m->filename, m->lang, 1, m->target, 0, std::string(), false ), job_id( jobid ), clientid( hostid ) { type = M_MON_GET_CS; } --- trunk/icecream/services/scheduler.cpp #1305964:1305965 @@ -217,6 +217,7 @@ unsigned int arg_flags; string language; // for debugging string preferred_host; // for debugging daemons + bool ignore_unverified; // ignore CSs that don't know M_VERIFY_ENV Job (unsigned int _id, CS *subm) : id(_id), local_client_id( 0 ), state(PENDING), server(0), submitter(subm), @@ -530,6 +531,7 @@ job->filename = m->filename; job->local_client_id = m->client_id; job->preferred_host = m->preferred_host; + job->ignore_unverified = m->ignore_unverified; enqueue_job_request (job); std::ostream& dbg = log_info(); dbg << "NEW " << job->id << " client=" @@ -701,9 +703,11 @@ { bool jobs_okay = int( joblist.size() ) < max_jobs; bool load_okay = load < 1000; + bool ignore = job->ignore_unverified && !IS_PROTOCOL_31(this); return jobs_okay && chroot_possible && load_okay + && !ignore && can_install( this, job ).size() && this->check_remote( job ); }