- Timestamp:
- Jun 26, 2012, 7:51:04 AM (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:
- 7670865
- Parents:
- f0834d
- git-author:
- Frederik Heber <heber@…> (02/06/12 09:33:27)
- git-committer:
- Frederik Heber <heber@…> (06/26/12 07:51:04)
- Location:
- src/Fragmentation/Automation
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.cpp
rf0834d r35f587 112 112 * \return vector of results for the added jobs (\sa addJobs()). 113 113 */ 114 std::vector<FragmentResult > SendResultsOperation::getResults()114 std::vector<FragmentResult::ptr> SendResultsOperation::getResults() 115 115 { 116 116 Info info(__FUNCTION__); -
src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.hpp
rf0834d r35f587 43 43 44 44 /// Getter for results 45 std::vector<FragmentResult > getResults();45 std::vector<FragmentResult::ptr> getResults(); 46 46 47 47 protected: 48 48 /// bunch of results 49 std::vector<FragmentResult > results;49 std::vector<FragmentResult::ptr> results; 50 50 }; 51 51 -
src/Fragmentation/Automation/FragmentQueue.cpp
rf0834d r35f587 24 24 #include "CodePatterns/Assert.hpp" 25 25 26 FragmentResult FragmentQueue::NoResult(-1);27 FragmentResult FragmentQueue::NoResultQueued(-2);28 FragmentResult FragmentQueue::ResultDelivered(-3);26 FragmentResult::ptr FragmentQueue::NoResult( new FragmentResult(-1) ); 27 FragmentResult::ptr FragmentQueue::NoResultQueued( new FragmentResult(-2) ); 28 FragmentResult::ptr FragmentQueue::ResultDelivered( new FragmentResult(-3) ); 29 29 30 30 /** Constructor for class FragmentQueue. … … 106 106 * @return true - result is a present, valid result, false - result is one of the statics 107 107 */ 108 bool FragmentQueue::isPresentResult(const FragmentResult &_result) const108 bool FragmentQueue::isPresentResult(const FragmentResult::ptr result) const 109 109 { 110 return ( _result !=NoResult)111 && ( _result !=NoResultQueued)112 && ( _result !=ResultDelivered);110 return (*result != *NoResult) 111 && (*result != *NoResultQueued) 112 && (*result != *ResultDelivered); 113 113 } 114 114 … … 134 134 for (ResultMap::const_iterator iter = results.begin(); 135 135 iter != results.end(); ++iter) 136 if ((iter->second != NoResult) 137 && (iter->second != NoResultQueued) 138 && (iter->second != ResultDelivered)) 136 if (isPresentResult(iter->second)) 139 137 ++doneJobs; 140 138 return doneJobs; … … 148 146 * \return result for job of given \a jobid 149 147 */ 150 FragmentResult FragmentQueue::getResult(JobId_t jobid)148 FragmentResult::ptr FragmentQueue::getResult(JobId_t jobid) 151 149 { 152 150 ResultMap::iterator iter = results.find(jobid); 153 151 ASSERT(iter != results.end(), 154 152 "FragmentQueue::pushResult() - job "+toString(jobid)+" is not known to us."); 155 ASSERT( iter->second !=NoResult,153 ASSERT(*iter->second != *NoResult, 156 154 "FragmentQueue::pushResult() - job "+toString(jobid)+" has not been request for calculation yet."); 157 ASSERT( iter->second !=NoResultQueued,155 ASSERT(*iter->second != *NoResultQueued, 158 156 "FragmentQueue::pushResult() - job "+toString(jobid)+"'s calculation is underway but not result has arrived yet."); 159 ASSERT( iter->second !=ResultDelivered,157 ASSERT(*iter->second != *ResultDelivered, 160 158 "FragmentQueue::pushResult() - job "+toString(jobid)+"'s result has already been delivered."); 161 159 /// store result 162 FragmentResult _result = iter->second;160 FragmentResult::ptr _result = iter->second; 163 161 /// mark as delivered in map 164 162 iter->second = ResultDelivered; … … 167 165 } 168 166 169 std::vector<FragmentResult > FragmentQueue::getAllResults()167 std::vector<FragmentResult::ptr> FragmentQueue::getAllResults() 170 168 { 171 std::vector<FragmentResult > returnresults;169 std::vector<FragmentResult::ptr> returnresults; 172 170 for (ResultMap::iterator iter = results.begin(); 173 171 iter != results.end(); ++iter) { … … 187 185 * \param result result of job to store 188 186 */ 189 void FragmentQueue::pushResult(FragmentResult &_result)187 void FragmentQueue::pushResult(FragmentResult::ptr &_result) 190 188 { 191 189 /// check for presence 192 ResultMap::iterator iter = results.find(_result .getId());190 ResultMap::iterator iter = results.find(_result->getId()); 193 191 ASSERT(iter != results.end(), 194 "FragmentQueue::pushResult() - job "+toString(_result .getId())+" is not known to us.");195 ASSERT( iter->second ==NoResultQueued,196 "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result .getId())+".");192 "FragmentQueue::pushResult() - job "+toString(_result->getId())+" is not known to us."); 193 ASSERT(*iter->second == *NoResultQueued, 194 "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result->getId())+"."); 197 195 /// and overwrite NoResult in found entry 198 196 iter->second = _result; -
src/Fragmentation/Automation/FragmentQueue.hpp
rf0834d r35f587 43 43 // querying for results 44 44 bool isResultPresent(JobId_t jobid) const; 45 FragmentResult getResult(JobId_t jobid);46 void pushResult(FragmentResult &_result);47 std::vector<FragmentResult > getAllResults();45 FragmentResult::ptr getResult(JobId_t jobid); 46 void pushResult(FragmentResult::ptr &result); 47 std::vector<FragmentResult::ptr> getAllResults(); 48 48 49 49 size_t getDoneJobs() const; 50 50 51 51 private: 52 bool isPresentResult(const FragmentResult &_result) const;52 bool isPresentResult(const FragmentResult::ptr result) const; 53 53 54 54 //!> result that takes place in ResultQueue after job has arrived before it has been popped. 55 static FragmentResult NoResult;55 static FragmentResult::ptr NoResult; 56 56 //!> result that takes place in ResultQueue until real result has arrived. 57 static FragmentResult NoResultQueued;57 static FragmentResult::ptr NoResultQueued; 58 58 //!> result that takes place in ResultQueue after real result has been delivered. 59 static FragmentResult ResultDelivered;59 static FragmentResult::ptr ResultDelivered; 60 60 61 61 typedef std::deque<FragmentJob::ptr> JobQueue; 62 typedef std::map<JobId_t, FragmentResult > ResultMap;62 typedef std::map<JobId_t, FragmentResult::ptr> ResultMap; 63 63 64 64 //!> queue for all jobs -
src/Fragmentation/Automation/FragmentResult.hpp
rf0834d r35f587 17 17 #include <string> 18 18 19 #include "boost/serialization/array.hpp" 19 #include <boost/shared_ptr.hpp> 20 #include <boost/serialization/array.hpp> 21 #include <boost/serialization/shared_ptr.hpp> 20 22 21 23 #include "JobId.hpp" … … 35 37 friend class FragmentResultTest; 36 38 public: 39 typedef boost::shared_ptr<FragmentResult> ptr; 40 37 41 FragmentResult(const JobId_t id); 38 42 FragmentResult(const JobId_t id, const std::string _result); -
src/Fragmentation/Automation/FragmentScheduler.cpp
rf0834d r35f587 56 56 boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), controllerport) 57 57 ), 58 result( JobId::NoJob),58 result( new FragmentResult(JobId::NoJob) ), 59 59 choice(NoOperation), 60 60 Exitflag(OkFlag) … … 177 177 { 178 178 Info info(__FUNCTION__); 179 LOG(1, "INFO: Received result for job #" << result.getId() << " ..."); 180 ASSERT(result.getId() != (JobId_t)JobId::NoJob, 179 LOG(1, "INFO: Received result for job #" << result->getId() << " ..."); 180 // and push into queue 181 ASSERT(result->getId() != (JobId_t)JobId::NoJob, 181 182 "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has NoJob id."); 182 ASSERT(result .getId() != (JobId_t)JobId::IllegalJob,183 ASSERT(result->getId() != (JobId_t)JobId::IllegalJob, 183 184 "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has IllegalJob id."); 184 185 // place id into expected 185 if ((result .getId() != (JobId_t)JobId::NoJob) && (result.getId() != (JobId_t)JobId::IllegalJob))186 if ((result->getId() != (JobId_t)JobId::NoJob) && (result->getId() != (JobId_t)JobId::IllegalJob)) 186 187 JobsQueue.pushResult(result); 187 188 // erase result 188 result = FragmentResult(JobId::NoJob);189 result.reset(); 189 190 LOG(1, "INFO: JobsQueue has " << JobsQueue.getDoneJobs() << " results."); 190 191 } … … 259 260 case SendResults: 260 261 { 261 const std::vector<FragmentResult > results = JobsQueue.getAllResults();262 const std::vector<FragmentResult::ptr> results = JobsQueue.getAllResults(); 262 263 // ... or we give the results 263 264 LOG(1, "INFO: Sending "+toString(results.size())+" results to controller ..."); -
src/Fragmentation/Automation/FragmentScheduler.hpp
rf0834d r35f587 91 91 92 92 /// result that is received from the client. 93 FragmentResult result;93 FragmentResult::ptr result; 94 94 95 95 /// bunch of jobs received from controller before placed in JobsQueue -
src/Fragmentation/Automation/FragmentWorker.cpp
rf0834d r35f587 37 37 #include "FragmentWorker.hpp" 38 38 39 FragmentResult FragmentWorker::EmptyResult(JobId::NoJob, std::string("EmptyResult"));39 FragmentResult::ptr FragmentWorker::EmptyResult( new FragmentResult(JobId::NoJob, std::string("EmptyResult")) ); 40 40 41 41 /// Constructor starts the asynchronous connect operation. … … 107 107 // do something .. right now: wait 108 108 LOG(1, "INFO: Calculating job #" << job->getId() << " ..."); 109 FragmentResult result(job->Work());109 FragmentResult::ptr result(job->Work()); 110 110 111 111 // write the result to the server -
src/Fragmentation/Automation/FragmentWorker.hpp
rf0834d r35f587 56 56 private: 57 57 // static entity of an empty result 58 static FragmentResult EmptyResult;58 static FragmentResult::ptr EmptyResult; 59 59 60 60 /// The Connection to the server. -
src/Fragmentation/Automation/Jobs/FragmentJob.cpp
rf0834d r35f587 64 64 * \return result of this job 65 65 */ 66 FragmentResult FragmentJob::Work()66 FragmentResult::ptr FragmentJob::Work() 67 67 { 68 68 Info info((std::string(__FUNCTION__)+std::string(", id #")+toString(getId())).c_str()); 69 FragmentResult s(getId());69 FragmentResult::ptr s( new FragmentResult(getId()) ); 70 70 71 71 // write outputfile to file … … 80 80 81 81 // fork into subprocess and launch command 82 s .exitflag = std::system((command+std::string(" ")+inputfilename82 s->exitflag = std::system((command+std::string(" ")+inputfilename 83 83 +std::string(" >")+outputfilename).c_str()); 84 84 std::ifstream resultfile; … … 87 87 while (resultfile.good()) { 88 88 resultfile.getline(line, 1023); 89 s .result += line;89 s->result += line; 90 90 } 91 91 resultfile.close(); -
src/Fragmentation/Automation/Jobs/FragmentJob.hpp
rf0834d r35f587 47 47 ~FragmentJob(); 48 48 49 FragmentResult Work();49 FragmentResult::ptr Work(); 50 50 51 51 bool operator==(const FragmentJob &other) const; -
src/Fragmentation/Automation/controller.cpp
rf0834d r35f587 98 98 SendResultsOperation *sendres = static_cast<SendResultsOperation *>( 99 99 controller.Commands.getByName("sendresults")); 100 std::vector<FragmentResult > results = sendres->getResults();101 for (std::vector<FragmentResult >::const_iterator iter = results.begin();100 std::vector<FragmentResult::ptr> results = sendres->getResults(); 101 for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin(); 102 102 iter != results.end(); ++iter) 103 LOG(1, "RESULT: job #"+toString((*iter) .getId())+": "+toString((*iter).result));103 LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result)); 104 104 } 105 105 -
src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp
rf0834d r35f587 82 82 FragmentJob::ptr othertestJob(new FragmentJob(command, outputfile, 2)); 83 83 84 FragmentResult testResult(testJob->Work());85 FragmentResult othertestResult(othertestJob->Work());84 FragmentResult::ptr testResult(testJob->Work()); 85 FragmentResult::ptr othertestResult(othertestJob->Work()); 86 86 87 CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult .getId() );88 CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult .getId() );87 CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult->getId() ); 88 CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult->getId() ); 89 89 } 90 90 -
src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp
rf0834d r35f587 189 189 190 190 // prepare a result 191 FragmentResult testResult(1);192 FragmentResult wrongIdResult(2);191 FragmentResult::ptr testResult( new FragmentResult(1) ); 192 FragmentResult::ptr wrongIdResult( new FragmentResult(2) ); 193 193 194 194 // check that none are present and we can't get result yet … … 257 257 // check that no results are returned. 258 258 { 259 const std::vector<FragmentResult > results = queue->getAllResults();259 const std::vector<FragmentResult::ptr> results = queue->getAllResults(); 260 260 CPPUNIT_ASSERT_EQUAL( (size_t)0, results.size() ); 261 261 } … … 271 271 272 272 // prepare a result 273 FragmentResult testResult(1);274 FragmentResult anothertestResult(2);273 FragmentResult::ptr testResult( new FragmentResult(1) ); 274 FragmentResult::ptr anothertestResult( new FragmentResult(2) ); 275 275 276 276 // push correct result … … 285 285 // check that two results are returned. 286 286 { 287 const std::vector<FragmentResult > results = queue->getAllResults();287 const std::vector<FragmentResult::ptr> results = queue->getAllResults(); 288 288 CPPUNIT_ASSERT_EQUAL( (size_t)2, results.size() ); 289 289 }
Note:
See TracChangeset
for help on using the changeset viewer.