Changeset f3db60


Ignore:
Timestamp:
Jun 11, 2015, 11:21:40 PM (10 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:
fae462
Parents:
0907ad
git-author:
Frederik Heber <heber@…> (05/15/15 07:12:44)
git-committer:
Frederik Heber <heber@…> (06/11/15 23:21:40)
Message:

Added DryRun and NoDryRun actions.

  • actions (un)set a flag inside ActionQueue to which only those permitted by an advocate pattern have access.
  • added testsuite tests for both dry-run, no-dry-run, and storing sessions.
  • explained use of action in userguide.
Files:
11 added
7 edited

Legend:

Unmodified
Added
Removed
  • doc/userguide/userguide.xml

    r0907ad rf3db60  
    25412541          <programlisting>... -v 4</programlisting>
    25422542        </section>
     2543       
     2544        <section xml:id='various.dry-run'>
     2545          <title xml:id='various.dry-run.title'>Dry runs</title>
     2546
     2547          <para>A "dry run" refers to a test run where commands are not
     2548          actually executed. You may bracket a certain set of actions by
     2549          putting --dry-run before and --no-dry-run afterwards. Then, all
     2550          action in between will be looked at but not executed, i.e. they
     2551          make it to the history but nothing is changed in the World.</para>
     2552
     2553          <para>As an example, the following listing contains the adding of a
     2554          hydrogen atom at position (5,5,5) inside the aforementioned dry run
     2555          statements. Hence, no hydrogen atom is added but the add action is
     2556          stored in the history and will make it to a stored session.</para>
     2557
     2558          <programlisting>
     2559          ... --dry-run \
     2560          --add-atom 1 --domain-position "5,5,5"
     2561          --no-dry-run
     2562          </programlisting>
     2563
     2564        </section>
    25432565
    25442566        <section xml:id='various.element-db'>
  • src/Actions/ActionQueue.cpp

    r0907ad rf3db60  
    6363    history(new ActionHistory),
    6464#ifndef HAVE_ACTION_THREAD
    65     lastActionOk(true)
     65    lastActionOk(true),
    6666#else
    6767    CurrentAction(0),
    6868    lastActionOk(true),
    6969    run_thread(boost::bind(&ActionQueue::run, this)),
    70     run_thread_isIdle(true)
    71 #endif
     70    run_thread_isIdle(true),
     71#endif
     72    dryrun_flag(false)
    7273{
    7374  // channels of observable
     
    109110#ifndef HAVE_ACTION_THREAD
    110111  try {
    111     newaction->call();
     112    if (!isDryRun(newaction))
     113      newaction->call();
    112114    lastActionOk = true;
    113115  } catch(ActionFailureException &e) {
     
    175177      LOG(0, "Calling Action " << actionqueue[CurrentAction]->getName() << " ... ");
    176178      try {
    177         actionqueue[CurrentAction]->call();
     179        if (!isDryRun(actionqueue[CurrentAction]))
     180          actionqueue[CurrentAction]->call();
    178181        pushStatus("SUCCESS: Action "+actionqueue[CurrentAction]->getName()+" successful.");
    179182        lastActionOk = true;
     
    380383}
    381384
     385bool ActionQueue::isDryRun(const Action *_nextaction) const
     386{
     387  bool status = dryrun_flag;
     388  status &= (_nextaction->getName() != "no-dry-run");
     389  return status;
     390}
    382391
    383392CONSTRUCT_SINGLETON(ActionQueue)
  • src/Actions/ActionQueue.hpp

    r0907ad rf3db60  
    4040class ActionRegistry;
    4141class ActionTrait;
     42class DryRunAdvocate;
    4243
    4344namespace Queuedetail {
     
    178179  { return StatusList; }
    179180
     181  /** Getter for isDryRun state flag.
     182   *
     183   * \return true - ActionQueue does not execute Actions but skips, false - else
     184   */
     185  bool getDryRun() const
     186  { return dryrun_flag; }
     187
    180188private:
    181189  //!> grant Action access to internal history functions.
     
    183191  //!> grant CommandLineParser access to stop and clearQueue()
    184192  friend class ::CommandLineParser;
     193  //!> grant Advocate access to setting dryrun
     194  friend class DryRunAdvocate;
    185195
    186196  /** Wrapper function to add state to ActionHistory.
     
    255265  void insertAction(Action *_action, enum Action::QueryOptions state);
    256266
     267  /** Sets the current state of the \a isDryRun flag.
     268   *
     269   * \param _dryrun true - Actions will not get executed anymore, false - else
     270   */
     271  void setDryRun(const bool _dryrun)
     272  { dryrun_flag = _dryrun; }
     273
     274  /** Checks whether next Action should be skipped or not.
     275   *
     276   * \param _nextaction next action to execute to inspect whether it unsets dryrun_flag
     277   * \return true - dryrun_flag set and \a _nextaction is not unsetting dry run
     278   */
     279  bool isDryRun(const Action *_nextaction) const;
     280
    257281private:
    258282  /** Private cstor for ActionQueue.
     
    309333  //!> internal list of status messages from Actions for UIs to display
    310334  ActionStatusList StatusList;
     335
     336  //!> internal flag whether to call or skip actions (i.e. do a dry run)
     337  bool dryrun_flag;
    311338};
    312339namespace Queuedetail {
  • src/Actions/GlobalListOfActions.hpp

    r0907ad rf3db60  
    4141  (BondAdd) \
    4242  (BondRemove) \
     43  (CommandDryRun) \
    4344  (CommandElementDb) \
    4445  (CommandBondLengthTable) \
     
    4647  (CommandHelp) \
    4748  (CommandHelpRedistribute) \
     49  (CommandNoDryRun) \
    4850  (CommandSetRandomNumbersEngine) \
    4951  (CommandSetRandomNumbersDistribution) \
  • src/Actions/Makefile.am

    r0907ad rf3db60  
    4141  Actions/Calculation.hpp \
    4242  Actions/Calculation_impl.hpp \
     43  Actions/DryRunAdvocate.hpp \
    4344  Actions/ErrorAction.hpp \
    4445  Actions/GlobalListOfActions.hpp \
     
    187188CMDACTIONSOURCE = \
    188189  Actions/CommandAction/BondLengthTableAction.cpp \
     190  Actions/CommandAction/DryRunAction.cpp \
    189191  Actions/CommandAction/ElementDbAction.cpp \
    190192  Actions/CommandAction/FastParsingAction.cpp \
    191193  Actions/CommandAction/HelpAction.cpp \
    192194  Actions/CommandAction/HelpRedistributeAction.cpp \
     195  Actions/CommandAction/NoDryRunAction.cpp \
    193196  Actions/CommandAction/StoreSessionAction.cpp \
    194197  Actions/CommandAction/VerboseAction.cpp \
     
    197200CMDACTIONHEADER = \
    198201  Actions/CommandAction/BondLengthTableAction.hpp \
     202  Actions/CommandAction/DryRunAction.hpp \
    199203  Actions/CommandAction/ElementDbAction.hpp \
    200204  Actions/CommandAction/FastParsingAction.hpp \
    201205  Actions/CommandAction/HelpAction.hpp \
    202206  Actions/CommandAction/HelpRedistributeAction.hpp \
     207  Actions/CommandAction/NoDryRunAction.hpp \
    203208  Actions/CommandAction/StoreSessionAction.hpp \
    204209  Actions/CommandAction/VerboseAction.hpp \
     
    207212CMDACTIONDEFS = \
    208213  Actions/CommandAction/BondLengthTableAction.def \
     214  Actions/CommandAction/DryRunAction.def \
    209215  Actions/CommandAction/ElementDbAction.def \
    210216  Actions/CommandAction/FastParsingAction.def \
    211217  Actions/CommandAction/HelpAction.def \
    212218  Actions/CommandAction/HelpRedistributeAction.def \
     219  Actions/CommandAction/NoDryRunAction.def \
    213220  Actions/CommandAction/StoreSessionAction.def \
    214221  Actions/CommandAction/VerboseAction.def \
  • tests/regression/Makefile.am

    r0907ad rf3db60  
    116116        $(srcdir)/Options/testsuite-options.at \
    117117        $(srcdir)/Options/BondLengthTable/testsuite-options-bond-length-table.at \
     118        $(srcdir)/Options/DryRun/testsuite-options-dryrun.at \
     119        $(srcdir)/Options/DryRun/testsuite-options-dryrun-storesession.at \
     120        $(srcdir)/Options/DryRun/testsuite-options-no-dryrun.at \
    118121        $(srcdir)/Options/ElementsDb/testsuite-options-no-elements-db.at \
    119122        $(srcdir)/Options/ElementsDb/testsuite-options-elements-db.at \
  • tests/regression/Options/testsuite-options.at

    r0907ad rf3db60  
    5353m4_include([Options/Session/testsuite-options-store-session-python.at])
    5454m4_include([Options/Session/testsuite-options-load-session-python.at])
     55
     56# test dry run
     57m4_include([Options/DryRun/testsuite-options-dryrun.at])
     58m4_include([Options/DryRun/testsuite-options-no-dryrun.at])
     59m4_include([Options/DryRun/testsuite-options-dryrun-storesession.at])
Note: See TracChangeset for help on using the changeset viewer.