Changeset d920b9 for src/Fragmentation/Automation
- Timestamp:
- Jun 27, 2012, 4:07:18 PM (13 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- cc276e
- Parents:
- 7670865
- git-author:
- Frederik Heber <heber@…> (02/06/12 09:57:56)
- git-committer:
- Frederik Heber <heber@…> (06/27/12 16:07:18)
- Location:
- src/Fragmentation/Automation
- Files:
-
- 6 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Fragmentation/Automation/Controller/Commands/ReceiveJobsOperation.cpp
r7670865 rd920b9 120 120 jobs.push_back(job); 121 121 } 122 LOG(1, "INFO: ReceiveJobsOperation now contains " << jobs.size() << " job(s)."); 122 123 } 123 124 -
src/Fragmentation/Automation/FragmentScheduler.cpp
r7670865 rd920b9 34 34 #include "CodePatterns/Info.hpp" 35 35 #include "CodePatterns/Log.hpp" 36 #include "Jobs/ FragmentJob.hpp"36 #include "Jobs/SystemCommandJob.hpp" 37 37 #include "JobId.hpp" 38 38 39 39 #include "FragmentScheduler.hpp" 40 40 41 FragmentJob::ptr FragmentScheduler::NoJob(new FragmentJob(std::string("/bin/false"), std::string("NoJob"), JobId::NoJob));41 FragmentJob::ptr FragmentScheduler::NoJob(new SystemCommandJob(std::string("/bin/false"), std::string("NoJob"), JobId::NoJob)); 42 42 43 43 /** Constructor of class FragmentScheduler. -
src/Fragmentation/Automation/FragmentWorker.cpp
r7670865 rd920b9 34 34 #include "CodePatterns/Log.hpp" 35 35 #include "Jobs/FragmentJob.hpp" 36 #include "Jobs/SystemCommandJob.hpp" 36 37 #include "Results/FragmentResult.hpp" 37 38 #include "FragmentWorker.hpp" 38 39 39 40 FragmentResult::ptr FragmentWorker::EmptyResult( new FragmentResult(JobId::NoJob, std::string("EmptyResult")) ); 41 42 /** Helper function to enforce binding of FragmentWorker to possible derived 43 * FragmentJob classes. 44 */ 45 void dummyInit() { 46 SystemCommandJob("/bin/false", "something", JobId::IllegalJob); 47 } 40 48 41 49 /// Constructor starts the asynchronous connect operation. … … 102 110 if (job->getId() != JobId::NoJob) { 103 111 // Print out the data that was received. 104 std::cout << "Job output: " << job->outputfile << "\n";105 112 std::cout << "Job id: " << job->getId() << "\n"; 106 113 … … 143 150 LOG(1, "INFO: Job #" << job->getId() << " calculated and sent."); 144 151 // erase job 145 job = FragmentJob::ptr(new FragmentJob());152 job.reset(); 146 153 } 147 154 -
src/Fragmentation/Automation/Jobs/FragmentJob.cpp
r7670865 rd920b9 20 20 #include "CodePatterns/MemDebug.hpp" 21 21 22 #include <cstdlib>23 #include <fstream>24 #include <string>25 26 #include "CodePatterns/Info.hpp"27 #include "CodePatterns/Log.hpp"28 #include "CodePatterns/toString.hpp"29 22 #include "FragmentJob.hpp" 30 23 #include "Results/FragmentResult.hpp" … … 34 27 */ 35 28 FragmentJob::FragmentJob() : 36 JobId(-1), 37 outputfile("") 29 JobId(JobId::IllegalJob) 38 30 {} 39 31 40 32 /** Constructor for class FragmentJob. 41 33 * 42 * \param _command command to execute43 * \param _outputfile configuration file for solver44 34 * \param _JobId unique id of this job 45 35 */ 46 FragmentJob::FragmentJob(const std::string &_command, const std::string &_outputfile, const JobId_t _JobId) : 47 JobId(_JobId), 48 command(_command), 49 outputfile(_outputfile) 36 FragmentJob::FragmentJob(const JobId_t _JobId) : 37 JobId(_JobId) 50 38 {} 51 39 … … 56 44 {} 57 45 58 /** Work routine of this FragmentJob.59 *60 * This function encapsulates all the work that has to be done to generate61 * a FragmentResult. Hence, the FragmentWorker does not need to know anything62 * about the operation: it just receives it and executes this function.63 *64 * \return result of this job65 */66 FragmentResult::ptr FragmentJob::Work()67 {68 Info info((std::string(__FUNCTION__)+std::string(", id #")+toString(getId())).c_str());69 FragmentResult::ptr s( new FragmentResult(getId()) );70 71 // write outputfile to file72 std::string inputfilename =73 std::string("/tmp/dummy_")74 +toString(getId());75 std::string outputfilename = inputfilename+std::string(".out");76 inputfilename += std::string(".dat");77 std::ofstream output(outputfilename.c_str());78 output << outputfile << std::endl;79 output.close();80 81 // fork into subprocess and launch command82 s->exitflag = std::system((command+std::string(" ")+inputfilename83 +std::string(" >")+outputfilename).c_str());84 std::ifstream resultfile;85 resultfile.open(outputfilename.c_str(), ifstream::in);86 char line[1024];87 while (resultfile.good()) {88 resultfile.getline(line, 1023);89 s->result += line;90 }91 resultfile.close();92 93 return s;94 }95 96 46 /** Comparator for class FragmentJob. 97 47 * \param other instance to compare to … … 100 50 bool FragmentJob::operator==(const FragmentJob &other) const 101 51 { 102 return (command == other.command) 103 && (outputfile == other.outputfile) 104 && (getId() == other.getId()); 52 return (getId() == other.getId()); 105 53 } -
src/Fragmentation/Automation/Jobs/FragmentJob.hpp
r7670865 rd920b9 43 43 typedef boost::shared_ptr<FragmentJob> ptr; 44 44 45 FragmentJob(); 46 FragmentJob(const std::string &_command, const std::string &_outputfile, const JobId_t _JobId); 45 FragmentJob(const JobId_t _JobId); 47 46 ~FragmentJob(); 48 47 49 FragmentResult::ptr Work();48 virtual FragmentResult::ptr Work() = 0; 50 49 51 50 bool operator==(const FragmentJob &other) const; … … 55 54 } 56 55 57 //!> string containing the command to launch the solver 58 std::string command; 56 private: 57 /** private default cstor for serialization only 58 * 59 * Use normal cstor with JobId::IllegalJob if you want to instantiate 60 * a job without id. 61 */ 62 FragmentJob(); 59 63 60 //!> string containing the configuration file for the solver61 std::string outputfile;62 63 private:64 64 friend class boost::serialization::access; 65 65 // serialization … … 68 68 { 69 69 ar & boost::serialization::base_object<JobId>(*this); 70 ar & command;71 ar & outputfile;72 70 } 73 71 }; -
src/Fragmentation/Automation/Makefile.am
r7670865 rd920b9 16 16 JobId.cpp \ 17 17 Jobs/FragmentJob.cpp \ 18 Jobs/SystemCommandJob.cpp \ 18 19 Results/FragmentResult.cpp 19 20 … … 22 23 JobId.hpp \ 23 24 Jobs/FragmentJob.hpp \ 25 Jobs/SystemCommandJob.hpp \ 24 26 Results/FragmentResult.hpp 25 27 … … 28 30 nobase_libMolecuilderFragmentJobs_la_include_HEADERS = $(FRAGMENTJOBSHEADER) 29 31 libMolecuilderFragmentJobs_la_SOURCES = $(FRAGMENTJOBSSOURCE) 32 libMolecuilderFragmentJobs_la_LIBADD = \ 33 $(BOOST_FILESYSTEM_LDFLAGS) $(BOOST_FILESYSTEM_LIBS) \ 34 $(BOOST_IOSTREAMS_LDFLAGS) $(BOOST_IOSTREAMS_LIBS) 30 35 31 36 FRAGMENTATIONAUTOMATIONSOURCE = \ -
src/Fragmentation/Automation/Worker.cpp
r7670865 rd920b9 41 41 atexit(cleanUp); 42 42 43 setVerbosity( 3);43 setVerbosity(5); 44 44 45 45 size_t Exitflag = 0; -
src/Fragmentation/Automation/controller.cpp
r7670865 rd920b9 39 39 #include "Controller/Commands/SendResultsOperation.hpp" 40 40 #include "Controller/Commands/ShutdownOperation.hpp" 41 #include "Jobs/ FragmentJob.hpp"41 #include "Jobs/SystemCommandJob.hpp" 42 42 #include "Results/FragmentResult.hpp" 43 43 … … 52 52 void createjobs(std::vector<FragmentJob::ptr> &jobs) 53 53 { 54 FragmentJob::ptr testJob( new FragmentJob( std::string("cat"), std::string("Nothing"), 1) );55 FragmentJob::ptr othertestJob( new FragmentJob( std::string("cat"), std::string("Nothing"), 2) );54 FragmentJob::ptr testJob( new SystemCommandJob( std::string("cat"), std::string("Nothing"), 1) ); 55 FragmentJob::ptr othertestJob( new SystemCommandJob( std::string("cat"), std::string("Nothing"), 2) ); 56 56 jobs.push_back(testJob); 57 57 jobs.push_back(othertestJob); -
src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp
r7670865 rd920b9 40 40 /********************************************** Test classes **************************************/ 41 41 42 #include "stubs/FragmentJobStub.hpp" 43 42 44 // Registers the fixture into the 'registry' 43 45 CPPUNIT_TEST_SUITE_REGISTRATION( FragmentJobTest ); … … 48 50 // Throw assertions 49 51 ASSERT_DO(Assert::Throw); 50 51 command = std::string("/bin/true");52 outputfile = std::string("do something");53 52 } 54 53 … … 62 61 void FragmentJobTest::equalityTest() 63 62 { 64 FragmentJob::ptr testJob(new FragmentJob(command, outputfile, 1)); 65 FragmentJob::ptr sameIdJob(new FragmentJob(command, outputfile, 1)); 66 FragmentJob::ptr otherIdJob(new FragmentJob(command, outputfile, 2)); 67 FragmentJob::ptr copiedJob(new FragmentJob(*testJob)); 68 FragmentJob::ptr copiedchangedJob(new FragmentJob(*testJob)); 69 copiedchangedJob->setId(3); 63 FragmentJob::ptr testJob( new FragmentJobStub(1) ); 64 FragmentJob::ptr sameIdJob( new FragmentJobStub(1) ); 65 FragmentJob::ptr otherIdJob( new FragmentJobStub(2) ); 70 66 71 67 CPPUNIT_ASSERT( *testJob == *sameIdJob ); 72 68 CPPUNIT_ASSERT( *testJob != *otherIdJob ); 73 CPPUNIT_ASSERT( *testJob == *copiedJob );74 CPPUNIT_ASSERT( *testJob != *copiedchangedJob );75 69 } 76 70 … … 79 73 void FragmentJobTest::WorkTest() 80 74 { 81 FragmentJob::ptr testJob( new FragmentJob(command, outputfile, 1));82 FragmentJob::ptr othertestJob( new FragmentJob(command, outputfile, 2));75 FragmentJob::ptr testJob( new FragmentJobStub(1) ); 76 FragmentJob::ptr othertestJob( new FragmentJobStub(2) ); 83 77 84 78 FragmentResult::ptr testResult(testJob->Work()); … … 93 87 void FragmentJobTest::serializationTest() 94 88 { 95 FragmentJob::ptr testJob( new FragmentJob(command, outputfile, 1));89 FragmentJob::ptr testJob( new FragmentJobStub(1) ); 96 90 // write element to stream 97 91 std::stringstream stream; … … 108 102 ia >> otherJob; 109 103 104 // FragmentJobStub is same as FragmentJob contentwise, hence no casting required 110 105 CPPUNIT_ASSERT (*testJob == *otherJob); 111 106 } -
src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp
r7670865 rd920b9 36 36 /********************************************** Test classes **************************************/ 37 37 38 #include "stubs/FragmentJobStub.hpp" 39 38 40 // Registers the fixture into the 'registry' 39 41 CPPUNIT_TEST_SUITE_REGISTRATION( FragmentQueueTest ); … … 58 60 void FragmentQueueTest::JobTest() 59 61 { 60 FragmentJob::ptr testJob(new FragmentJob );62 FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); 61 63 /// check for illegal id 62 64 #ifndef NDEBUG … … 66 68 // set to valid id 67 69 testJob->setId(1); 68 testJob->outputfile = std::string("do something");69 70 70 71 CPPUNIT_ASSERT_EQUAL(false, queue->isJobPresent() ); … … 122 123 { 123 124 // prepare some jobs 124 FragmentJob::ptr testJob(new FragmentJob );125 FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); 125 126 testJob->setId((JobId_t)1); 126 testJob->outputfile = std::string("do something"); 127 FragmentJob::ptr anothertestJob(new FragmentJob); 127 FragmentJob::ptr anothertestJob(new FragmentJobStub(JobId::IllegalJob)); 128 128 anothertestJob->setId((JobId_t)2); 129 anothertestJob->outputfile = std::string("do something else");130 129 131 130 // prepare a vector of them … … 173 172 { 174 173 // prepare a job 175 FragmentJob::ptr testJob(new FragmentJob );174 FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); 176 175 testJob->setId(1); 177 testJob->outputfile = std::string("do something");178 176 #ifndef NDEBUG 179 177 CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); … … 240 238 { 241 239 // prepare a job 242 FragmentJob::ptr testJob( new FragmentJob ); 243 testJob->setId(1); 244 testJob->outputfile = std::string("do something"); 245 FragmentJob::ptr anothertestJob( new FragmentJob ); 246 anothertestJob->setId(2); 247 anothertestJob->outputfile = std::string("do something else"); 240 FragmentJob::ptr testJob( new FragmentJobStub(JobId::IllegalJob) ); 241 testJob->setId((JobId_t)1); 242 FragmentJob::ptr anothertestJob( new FragmentJobStub(JobId::IllegalJob) ); 243 anothertestJob->setId((JobId_t)2); 248 244 249 245 #ifndef NDEBUG -
src/Fragmentation/Automation/unittests/Makefile.am
r7670865 rd920b9 5 5 unittests/FragmentJobUnitTest.cpp \ 6 6 unittests/FragmentResultUnitTest.cpp \ 7 unittests/FragmentQueueUnitTest.cpp 7 unittests/FragmentQueueUnitTest.cpp \ 8 unittests/SystemCommandJobUnitTest.cpp 8 9 9 10 FRAGMENTATIONAUTOMATIONTESTSHEADERS = \ 10 11 unittests/FragmentJobUnitTest.hpp \ 11 12 unittests/FragmentResultUnitTest.hpp \ 12 unittests/FragmentQueueUnitTest.hpp 13 unittests/FragmentQueueUnitTest.hpp \ 14 unittests/SystemCommandJobUnitTest.hpp 13 15 14 16 FRAGMENTATIONAUTOMATIONTESTS = \ 15 17 FragmentJobUnitTest \ 16 18 FragmentResultUnitTest \ 17 FragmentQueueUnitTest 19 FragmentQueueUnitTest \ 20 SystemCommandJobUnitTest 18 21 19 22 … … 35 38 unittests/FragmentJobUnitTest.hpp \ 36 39 unittests/stubs/FragmentResultStub.cpp \ 40 unittests/stubs/FragmentJobStub.cpp \ 41 unittests/stubs/FragmentJobStub.hpp \ 37 42 JobId.cpp \ 38 43 JobId.hpp \ … … 49 54 FragmentQueueUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \ 50 55 unittests/FragmentQueueUnitTest.cpp \ 51 unittests/FragmentQueueUnitTest.hpp 56 unittests/FragmentQueueUnitTest.hpp \ 57 unittests/stubs/FragmentJobStub.cpp \ 58 unittests/stubs/FragmentJobStub.hpp 52 59 FragmentQueueUnitTest_LDADD = \ 53 60 libMolecuilderFragmentJobs.la \ … … 67 74 ${CodePatterns_LIBS} 68 75 76 SystemCommandJobUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl 77 SystemCommandJobUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS} 78 SystemCommandJobUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \ 79 unittests/SystemCommandJobUnitTest.cpp \ 80 unittests/SystemCommandJobUnitTest.hpp \ 81 Results/FragmentResult.cpp \ 82 Results/FragmentResult.hpp \ 83 Jobs/FragmentJob.cpp \ 84 Jobs/FragmentJob.hpp \ 85 Jobs/SystemCommandJob.cpp \ 86 Jobs/SystemCommandJob.hpp \ 87 JobId.cpp \ 88 JobId.hpp 89 SystemCommandJobUnitTest_LDADD = \ 90 $(BOOST_FILESYSTEM_LDFLAGS) $(BOOST_FILESYSTEM_LIBS) \ 91 $(BOOST_IOSTREAMS_LDFLAGS) $(BOOST_IOSTREAMS_LIBS) \ 92 $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \ 93 $(BOOST_SYSTEM_LDFLAGS) $(BOOST_SYSTEM_LIBS) \ 94 ${CodePatterns_LIBS} 69 95 70 96 #AUTOMAKE_OPTIONS = parallel-tests
Note:
See TracChangeset
for help on using the changeset viewer.