Ignore:
Timestamp:
Jul 2, 2012, 7:54:13 AM (13 years ago)
Author:
Frederik Heber <heber@…>
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:
86a1e8
Parents:
d76161
git-author:
Frederik Heber <heber@…> (04/24/12 10:38:54)
git-committer:
Frederik Heber <heber@…> (07/02/12 07:54:13)
Message:

FIX: Removed channel WorkerRemoved in WorkerPool as it may cause cyclic updates in FragmentScheduler.

  • If jobs are already present in the queue and an idle worker arrices, then marking a worker busy will cause an update inside the callback that is used to send the job to the new idle worker. This will trigger the same notification that is not yet removed to be called in notifyAll(). This causes a cycle in the updates.
Location:
src/Fragmentation/Automation/unittests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.cpp

    rd76161 r3eb035  
    5252  pool = new WorkerPool();
    5353  addobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerAdded));
    54   removeobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerRemoved));
    5554  idleobserver = new NotificationObserver(pool->getChannel(WorkerPool::WorkerIdle));
    5655
    5756  // and sign on
    5857  pool->signOn(addobserver, WorkerPool::WorkerAdded);
    59   pool->signOn(removeobserver, WorkerPool::WorkerRemoved);
    6058  pool->signOn(idleobserver, WorkerPool::WorkerIdle);
    6159}
     
    6462{
    6563  pool->signOff(addobserver, WorkerPool::WorkerAdded);
    66   pool->signOff(removeobserver, WorkerPool::WorkerRemoved);
    6764  pool->signOff(idleobserver, WorkerPool::WorkerIdle);
    6865
    69   delete removeobserver;
    7066  delete addobserver;
    7167  delete idleobserver;
     
    9288  CPPUNIT_ASSERT_EQUAL( address, pool->begin_idle()->second );
    9389  CPPUNIT_ASSERT( addobserver->wasNotified );
    94   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    9590  CPPUNIT_ASSERT( idleobserver->wasNotified );
    9691  addobserver->wasNotified = false;
     
    10196  CPPUNIT_ASSERT( !pool->removeWorker(otheraddress) );
    10297  CPPUNIT_ASSERT( !addobserver->wasNotified );
    103   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    10498  CPPUNIT_ASSERT( !idleobserver->wasNotified );
    10599
     
    114108  CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->pool.size() );
    115109  CPPUNIT_ASSERT( !addobserver->wasNotified );
    116   CPPUNIT_ASSERT( removeobserver->wasNotified );
    117110  CPPUNIT_ASSERT( !idleobserver->wasNotified );
    118   removeobserver->wasNotified = false;
    119111}
    120112
     
    133125  CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->pool.size() );
    134126  CPPUNIT_ASSERT( addobserver->wasNotified );
    135   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    136127  CPPUNIT_ASSERT( idleobserver->wasNotified );
    137128  addobserver->wasNotified = false;
     
    163154  CPPUNIT_ASSERT_EQUAL( (size_t)1, pool->busy_queue.size() );
    164155  CPPUNIT_ASSERT( !addobserver->wasNotified );
    165   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    166156  CPPUNIT_ASSERT( !idleobserver->wasNotified );
    167157
     
    172162  CPPUNIT_ASSERT_EQUAL( (size_t)0, pool->busy_queue.size() );
    173163  CPPUNIT_ASSERT( !addobserver->wasNotified );
    174   CPPUNIT_ASSERT( !removeobserver->wasNotified );
    175164  CPPUNIT_ASSERT( idleobserver->wasNotified );
    176165}
  • src/Fragmentation/Automation/unittests/WorkerPoolUnitTest.hpp

    rd76161 r3eb035  
    3838      WorkerPool *pool;
    3939      NotificationObserver *addobserver;
    40       NotificationObserver *removeobserver;
    4140      NotificationObserver *idleobserver;
    4241};
Note: See TracChangeset for help on using the changeset viewer.