25 #include <basic/Tracer.hh>
26 #include <basic/options/option.hh>
27 #include <utility/io/ozstream.hh>
28 #include <utility/file/file_sys_util.hh>
29 #include <utility/exit.hh>
36 #include <basic/options/keys/out.OptionKeys.gen.hh>
37 #include <basic/options/keys/run.OptionKeys.gen.hh>
39 #include <utility/vector1.hh>
43 static basic::Tracer
TR(
"protocols.jd2.FileSystemJobDistributor");
50 extension_(
".in_progress"),
54 if ( basic::options::option[ basic::options::OptionKeys::out::path::pdb ].user() ){
55 path_ = basic::options::option[ basic::options::OptionKeys::out::path::pdb ]().path();
56 }
else if( basic::options::option[ basic::options::OptionKeys::out::path::all ].user() ){
57 path_ = basic::options::option[ basic::options::OptionKeys::out::path::all ]().path();
78 if( basic::options::option[ basic::options::OptionKeys::out::overwrite ].value() &&
79 basic::options::option[ basic::options::OptionKeys::run::multiple_processes_writing_to_one_directory ].value() ){
80 utility_exit_with_message(
"ambiguous, cannot have both -out::overwrite and -run::multiple_processes_writing_to_one_directory");
86 while ( next_job_to_try_assigning <= jobs.size() ) {
87 if ( jobs[ next_job_to_try_assigning ]->bad() ) {
88 ++next_job_to_try_assigning;
89 }
else if ( outputter->job_has_completed( jobs[ next_job_to_try_assigning ] ) &&
90 !basic::options::option[ basic::options::OptionKeys::out::overwrite ].value() ) {
91 ++next_job_to_try_assigning;
92 }
else if ( basic::options::option[ basic::options::OptionKeys::run::multiple_processes_writing_to_one_directory ].value() ) {
95 ++next_job_to_try_assigning;
102 utility::io::ozstream outfile( next_job_output_name );
103 outfile <<
"temp" << std::flush;
112 if ( next_job_to_try_assigning <= jobs.size() ) {
115 return next_job_to_try_assigning;
125 using namespace basic::options;
131 if( (
int)
retry_count_ <= (
int)basic::options::option[ basic::options::OptionKeys::run::max_retry_job ].value() ) {
133 if ( !option[ OptionKeys::run::write_failures ]() ){
138 TR <<
"Too many retries (max_retry_job = " << basic::options::option[ basic::options::OptionKeys::run::max_retry_job ].value() <<
") " << std::endl;
149 Warning() <<
"A job reported bad input, but was not the first input of its type! You should figure out why the first one passed if later ones failed!" << std::endl;
155 TR <<
"job failed, reporting bad input; other jobs of same input will be canceled: "
210 using namespace basic::options;
214 if ( option[ OptionKeys::run::write_failures ]() ){
229 if ( basic::options::option[ basic::options::OptionKeys::run::multiple_processes_writing_to_one_directory ].value() ) {
233 utility::file::file_delete( output_name.c_str() );