roby 0.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.deep-cover.rb +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.simplecov +10 -0
- data/.travis.yml +17 -0
- data/.yardopts +4 -0
- data/Gemfile +15 -0
- data/README.md +11 -0
- data/Rakefile +47 -177
- data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
- data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
- data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
- data/benchmark/{genom.rb → attic/genom.rb} +0 -0
- data/benchmark/attic/transactions.rb +62 -0
- data/benchmark/plan_basic_operations.rb +28 -0
- data/benchmark/relations/graph.rb +63 -0
- data/benchmark/ruby/identity.rb +18 -0
- data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
- data/benchmark/ruby/yield_vs_block.rb +35 -0
- data/benchmark/run +5 -0
- data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
- data/benchmark/transactions.rb +99 -51
- data/bin/roby +38 -197
- data/bin/roby-display +14 -0
- data/bin/roby-log +3 -176
- data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
- data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
- data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
- data/doc/guide/{src → attic}/abstraction/index.page +1 -1
- data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
- data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
- data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
- data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
- data/doc/guide/attic/cycle/error_handling.page +98 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
- data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
- data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
- data/doc/guide/{src → attic}/cycle/index.page +1 -1
- data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
- data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
- data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
- data/doc/guide/attic/plans/building_plans.page +89 -0
- data/doc/guide/attic/plans/code.page +192 -0
- data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
- data/doc/guide/attic/plans/index.page +7 -0
- data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
- data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
- data/doc/guide/attic/plans/querying_plans.page +5 -0
- data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
- data/doc/guide/config.yaml +7 -4
- data/doc/guide/ext/extended_menu.rb +29 -0
- data/doc/guide/ext/init.rb +6 -0
- data/doc/guide/ext/rdoc_links.rb +7 -6
- data/doc/guide/src/advanced_concepts/history.page +5 -0
- data/doc/guide/src/advanced_concepts/index.page +11 -0
- data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
- data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
- data/doc/guide/src/advanced_concepts/transactions.page +5 -0
- data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
- data/doc/guide/src/base.template +96 -0
- data/doc/guide/src/basics_shell_header.txt +5 -7
- data/doc/guide/src/building/action_coordination.page +96 -0
- data/doc/guide/src/building/actions.page +124 -0
- data/doc/guide/src/building/file_layout.page +71 -0
- data/doc/guide/src/building/index.page +50 -0
- data/doc/guide/src/building/patterns.page +86 -0
- data/doc/guide/src/building/patterns_forwarding.png +0 -0
- data/doc/guide/src/building/patterns_forwarding.svg +277 -0
- data/doc/guide/src/building/runtime.page +95 -0
- data/doc/guide/src/building/task_models.page +94 -0
- data/doc/guide/src/building/tasks.page +284 -0
- data/doc/guide/src/concepts/error_handling.page +100 -0
- data/doc/guide/src/concepts/exception_propagation.png +0 -0
- data/doc/guide/src/concepts/exception_propagation.svg +445 -0
- data/doc/guide/src/concepts/execution.page +85 -0
- data/doc/guide/src/concepts/execution.png +0 -0
- data/doc/guide/src/concepts/execution.svg +573 -0
- data/doc/guide/src/concepts/execution_cycle.png +0 -0
- data/doc/guide/src/concepts/garbage_collection.page +57 -0
- data/doc/guide/src/concepts/index.page +27 -0
- data/doc/guide/src/concepts/plans.page +101 -0
- data/doc/guide/src/concepts/policy.page +31 -0
- data/doc/guide/src/concepts/reactor.page +61 -0
- data/doc/guide/src/concepts/simple_plan_example.png +0 -0
- data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
- data/doc/guide/src/default.template +9 -74
- data/doc/guide/src/event_relations/forward.page +71 -0
- data/doc/guide/src/event_relations/index.page +12 -0
- data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
- data/doc/guide/src/event_relations/signal.page +55 -0
- data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
- data/doc/guide/src/htmldoc.metainfo +21 -8
- data/doc/guide/src/index.page +8 -3
- data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
- data/doc/guide/src/installation/publications.page +14 -0
- data/doc/guide/src/{introduction → installation}/videos.page +14 -7
- data/doc/guide/src/interacting/index.page +16 -0
- data/doc/guide/src/interacting/run.page +33 -0
- data/doc/guide/src/interacting/shell.page +95 -0
- data/doc/guide/src/plugins/creating_plugins.page +72 -0
- data/doc/guide/src/plugins/index.page +27 -5
- data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
- data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
- data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
- data/doc/guide/src/style_screen.css +687 -0
- data/doc/guide/src/task_relations/dependency.page +107 -0
- data/doc/guide/src/task_relations/executed_by.page +77 -0
- data/doc/guide/src/task_relations/index.page +12 -0
- data/doc/guide/src/task_relations/new_relations.page +119 -0
- data/doc/guide/src/task_relations/planned_by.page +46 -0
- data/doc/guide/src/tutorial/app.page +117 -0
- data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
- data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
- data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
- data/doc/guide/src/tutorial/events.page +195 -0
- data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
- data/doc/guide/src/tutorial/index.page +13 -0
- data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/tutorial/relations_display.page +153 -0
- data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
- data/doc/guide/src/tutorial/shell.page +121 -0
- data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
- data/doc/guide/src/tutorial/tasks.page +374 -0
- data/lib/roby.rb +102 -47
- data/lib/roby/actions.rb +17 -0
- data/lib/roby/actions/action.rb +80 -0
- data/lib/roby/actions/interface.rb +45 -0
- data/lib/roby/actions/library.rb +23 -0
- data/lib/roby/actions/models/action.rb +224 -0
- data/lib/roby/actions/models/coordination_action.rb +58 -0
- data/lib/roby/actions/models/interface.rb +22 -0
- data/lib/roby/actions/models/interface_base.rb +294 -0
- data/lib/roby/actions/models/library.rb +12 -0
- data/lib/roby/actions/models/method_action.rb +90 -0
- data/lib/roby/actions/task.rb +114 -0
- data/lib/roby/and_generator.rb +125 -0
- data/lib/roby/app.rb +2795 -829
- data/lib/roby/app/autotest_console_reporter.rb +138 -0
- data/lib/roby/app/base.rb +21 -0
- data/lib/roby/app/cucumber.rb +2 -0
- data/lib/roby/app/cucumber/controller.rb +439 -0
- data/lib/roby/app/cucumber/helpers.rb +280 -0
- data/lib/roby/app/cucumber/world.rb +32 -0
- data/lib/roby/app/debug.rb +136 -0
- data/lib/roby/app/gen.rb +2 -0
- data/lib/roby/app/rake.rb +178 -38
- data/lib/roby/app/robot_config.rb +9 -0
- data/lib/roby/app/robot_names.rb +115 -0
- data/lib/roby/app/run.rb +3 -2
- data/lib/roby/app/scripts.rb +72 -0
- data/lib/roby/app/scripts/autotest.rb +173 -0
- data/lib/roby/app/scripts/display.rb +2 -0
- data/lib/roby/app/scripts/restart.rb +52 -0
- data/lib/roby/app/scripts/results.rb +17 -8
- data/lib/roby/app/scripts/run.rb +155 -24
- data/lib/roby/app/scripts/shell.rb +147 -62
- data/lib/roby/app/scripts/test.rb +107 -22
- data/lib/roby/app/test_reporter.rb +74 -0
- data/lib/roby/app/test_server.rb +159 -0
- data/lib/roby/app/vagrant.rb +47 -0
- data/lib/roby/backports.rb +16 -0
- data/lib/roby/cli/display.rb +190 -0
- data/lib/roby/cli/exceptions.rb +17 -0
- data/lib/roby/cli/gen/actions/class.rb +5 -0
- data/lib/roby/cli/gen/actions/test.rb +6 -0
- data/lib/roby/cli/gen/app/.yardopts +6 -0
- data/lib/roby/cli/gen/app/README.md +28 -0
- data/lib/roby/cli/gen/app/Rakefile +15 -0
- data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
- data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
- data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
- data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
- data/lib/roby/cli/gen/class/class.rb +6 -0
- data/lib/roby/cli/gen/class/test.rb +7 -0
- data/lib/roby/cli/gen/helpers.rb +203 -0
- data/lib/roby/cli/gen/module/module.rb +5 -0
- data/lib/roby/cli/gen/module/test.rb +6 -0
- data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
- data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
- data/lib/roby/cli/gen/task/class.rb +44 -0
- data/lib/roby/cli/gen/task/test.rb +6 -0
- data/lib/roby/cli/gen_main.rb +120 -0
- data/lib/roby/cli/log.rb +276 -0
- data/lib/roby/cli/log/flamegraph.html +499 -0
- data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
- data/lib/roby/cli/main.rb +153 -0
- data/lib/roby/coordination.rb +60 -0
- data/lib/roby/coordination/action_script.rb +25 -0
- data/lib/roby/coordination/action_state_machine.rb +125 -0
- data/lib/roby/coordination/actions.rb +106 -0
- data/lib/roby/coordination/base.rb +145 -0
- data/lib/roby/coordination/calculus.rb +40 -0
- data/lib/roby/coordination/child.rb +28 -0
- data/lib/roby/coordination/event.rb +29 -0
- data/lib/roby/coordination/fault_handler.rb +25 -0
- data/lib/roby/coordination/fault_handling_task.rb +13 -0
- data/lib/roby/coordination/fault_response_table.rb +110 -0
- data/lib/roby/coordination/models/action_script.rb +64 -0
- data/lib/roby/coordination/models/action_state_machine.rb +224 -0
- data/lib/roby/coordination/models/actions.rb +191 -0
- data/lib/roby/coordination/models/arguments.rb +55 -0
- data/lib/roby/coordination/models/base.rb +176 -0
- data/lib/roby/coordination/models/capture.rb +86 -0
- data/lib/roby/coordination/models/child.rb +35 -0
- data/lib/roby/coordination/models/event.rb +41 -0
- data/lib/roby/coordination/models/exceptions.rb +42 -0
- data/lib/roby/coordination/models/fault_handler.rb +219 -0
- data/lib/roby/coordination/models/fault_response_table.rb +77 -0
- data/lib/roby/coordination/models/root.rb +22 -0
- data/lib/roby/coordination/models/script.rb +283 -0
- data/lib/roby/coordination/models/task.rb +184 -0
- data/lib/roby/coordination/models/task_from_action.rb +50 -0
- data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
- data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
- data/lib/roby/coordination/models/task_from_variable.rb +27 -0
- data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
- data/lib/roby/coordination/models/variable.rb +32 -0
- data/lib/roby/coordination/script.rb +200 -0
- data/lib/roby/coordination/script_instruction.rb +12 -0
- data/lib/roby/coordination/task.rb +45 -0
- data/lib/roby/coordination/task_base.rb +69 -0
- data/lib/roby/coordination/task_script.rb +293 -0
- data/lib/roby/coordination/task_state_machine.rb +308 -0
- data/lib/roby/decision_control.rb +33 -21
- data/lib/roby/distributed_object.rb +76 -0
- data/lib/roby/droby.rb +17 -0
- data/lib/roby/droby/droby_id.rb +6 -0
- data/lib/roby/droby/enable.rb +153 -0
- data/lib/roby/droby/event_logger.rb +189 -0
- data/lib/roby/droby/event_logging.rb +57 -0
- data/lib/roby/droby/exceptions.rb +14 -0
- data/lib/roby/droby/identifiable.rb +22 -0
- data/lib/roby/droby/logfile.rb +141 -0
- data/lib/roby/droby/logfile/client.rb +176 -0
- data/lib/roby/droby/logfile/file_format.md +97 -0
- data/lib/roby/droby/logfile/index.rb +117 -0
- data/lib/roby/droby/logfile/reader.rb +139 -0
- data/lib/roby/droby/logfile/server.rb +199 -0
- data/lib/roby/droby/logfile/writer.rb +114 -0
- data/lib/roby/droby/marshal.rb +264 -0
- data/lib/roby/droby/marshallable.rb +12 -0
- data/lib/roby/droby/null_event_logger.rb +25 -0
- data/lib/roby/droby/object_manager.rb +205 -0
- data/lib/roby/droby/peer_id.rb +6 -0
- data/lib/roby/droby/plan_rebuilder.rb +373 -0
- data/lib/roby/droby/rebuilt_plan.rb +160 -0
- data/lib/roby/droby/remote_droby_id.rb +6 -0
- data/lib/roby/droby/timepoints.rb +205 -0
- data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
- data/lib/roby/droby/timepoints_ctf.rb +125 -0
- data/lib/roby/droby/v5.rb +14 -0
- data/lib/roby/droby/v5/builtin.rb +120 -0
- data/lib/roby/droby/v5/droby_class.rb +45 -0
- data/lib/roby/droby/v5/droby_constant.rb +81 -0
- data/lib/roby/droby/v5/droby_dump.rb +1026 -0
- data/lib/roby/droby/v5/droby_id.rb +44 -0
- data/lib/roby/droby/v5/droby_model.rb +82 -0
- data/lib/roby/droby/v5/peer_id.rb +10 -0
- data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
- data/lib/roby/event.rb +79 -957
- data/lib/roby/event_constraints.rb +835 -0
- data/lib/roby/event_generator.rb +1047 -0
- data/lib/roby/event_structure/causal_link.rb +6 -0
- data/lib/roby/event_structure/forwarding.rb +6 -0
- data/lib/roby/event_structure/precedence.rb +7 -0
- data/lib/roby/event_structure/signal.rb +8 -0
- data/lib/roby/event_structure/temporal_constraints.rb +640 -0
- data/lib/roby/exceptions.rb +446 -152
- data/lib/roby/executable_plan.rb +549 -0
- data/lib/roby/execution_engine.rb +1997 -950
- data/lib/roby/filter_generator.rb +26 -0
- data/lib/roby/gui/chronicle_view.rb +225 -0
- data/lib/roby/gui/chronicle_widget.rb +925 -0
- data/lib/roby/gui/dot_id.rb +11 -0
- data/lib/roby/gui/exception_view.rb +44 -0
- data/lib/roby/gui/log_display.rb +273 -0
- data/lib/roby/gui/model_views.rb +2 -0
- data/lib/roby/gui/model_views/action_interface.rb +53 -0
- data/lib/roby/gui/model_views/task.rb +47 -0
- data/lib/roby/gui/model_views/task.rhtml +41 -0
- data/lib/roby/gui/object_info_view.rb +89 -0
- data/lib/roby/gui/plan_dot_layout.rb +427 -0
- data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
- data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
- data/lib/roby/gui/relations_view.rb +278 -0
- data/lib/roby/gui/relations_view/relations.ui +139 -0
- data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
- data/lib/roby/gui/relations_view/relations_config.rb +292 -0
- data/lib/roby/gui/relations_view/relations_view.ui +53 -0
- data/lib/roby/gui/scheduler_view.css +24 -0
- data/lib/roby/gui/scheduler_view.rb +46 -0
- data/lib/roby/gui/scheduler_view.rhtml +53 -0
- data/lib/roby/gui/stepping.rb +93 -0
- data/lib/roby/gui/stepping.ui +181 -0
- data/lib/roby/gui/styles.rb +81 -0
- data/lib/roby/gui/task_display_configuration.rb +42 -0
- data/lib/roby/gui/task_state_at.rb +38 -0
- data/lib/roby/hooks.rb +26 -0
- data/lib/roby/interface.rb +136 -469
- data/lib/roby/interface/async.rb +20 -0
- data/lib/roby/interface/async/action_monitor.rb +188 -0
- data/lib/roby/interface/async/interface.rb +498 -0
- data/lib/roby/interface/async/job_monitor.rb +213 -0
- data/lib/roby/interface/async/log.rb +238 -0
- data/lib/roby/interface/async/new_job_listener.rb +79 -0
- data/lib/roby/interface/async/ui_connector.rb +183 -0
- data/lib/roby/interface/client.rb +553 -0
- data/lib/roby/interface/command.rb +24 -0
- data/lib/roby/interface/command_argument.rb +16 -0
- data/lib/roby/interface/command_library.rb +92 -0
- data/lib/roby/interface/droby_channel.rb +174 -0
- data/lib/roby/interface/exceptions.rb +22 -0
- data/lib/roby/interface/interface.rb +655 -0
- data/lib/roby/interface/job.rb +47 -0
- data/lib/roby/interface/rest.rb +10 -0
- data/lib/roby/interface/rest/api.rb +29 -0
- data/lib/roby/interface/rest/helpers.rb +24 -0
- data/lib/roby/interface/rest/server.rb +212 -0
- data/lib/roby/interface/server.rb +154 -0
- data/lib/roby/interface/shell_client.rb +468 -0
- data/lib/roby/interface/shell_subcommand.rb +24 -0
- data/lib/roby/interface/subcommand_client.rb +35 -0
- data/lib/roby/interface/tcp.rb +168 -0
- data/lib/roby/models/arguments.rb +112 -0
- data/lib/roby/models/plan_object.rb +83 -0
- data/lib/roby/models/task.rb +835 -0
- data/lib/roby/models/task_event.rb +62 -0
- data/lib/roby/models/task_service.rb +78 -0
- data/lib/roby/or_generator.rb +88 -0
- data/lib/roby/plan.rb +1751 -864
- data/lib/roby/plan_object.rb +611 -0
- data/lib/roby/plan_service.rb +200 -0
- data/lib/roby/promise.rb +332 -0
- data/lib/roby/queries.rb +23 -0
- data/lib/roby/queries/and_matcher.rb +32 -0
- data/lib/roby/queries/any.rb +27 -0
- data/lib/roby/queries/code_error_matcher.rb +58 -0
- data/lib/roby/queries/event_generator_matcher.rb +9 -0
- data/lib/roby/queries/execution_exception_matcher.rb +165 -0
- data/lib/roby/queries/index.rb +165 -0
- data/lib/roby/queries/localized_error_matcher.rb +149 -0
- data/lib/roby/queries/matcher_base.rb +107 -0
- data/lib/roby/queries/none.rb +27 -0
- data/lib/roby/queries/not_matcher.rb +30 -0
- data/lib/roby/queries/op_matcher.rb +8 -0
- data/lib/roby/queries/or_matcher.rb +30 -0
- data/lib/roby/queries/plan_object_matcher.rb +363 -0
- data/lib/roby/queries/query.rb +188 -0
- data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
- data/lib/roby/queries/task_matcher.rb +344 -0
- data/lib/roby/relations.rb +42 -678
- data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
- data/lib/roby/relations/directed_relation_support.rb +268 -0
- data/lib/roby/relations/event_relation_graph.rb +19 -0
- data/lib/roby/relations/fork_merge_visitor.rb +154 -0
- data/lib/roby/relations/graph.rb +533 -0
- data/lib/roby/relations/models/directed_relation_support.rb +11 -0
- data/lib/roby/relations/models/graph.rb +75 -0
- data/lib/roby/relations/models/task_relation_graph.rb +18 -0
- data/lib/roby/relations/space.rb +380 -0
- data/lib/roby/relations/task_relation_graph.rb +20 -0
- data/lib/roby/robot.rb +85 -38
- data/lib/roby/schedulers/basic.rb +155 -25
- data/lib/roby/schedulers/null.rb +20 -0
- data/lib/roby/schedulers/reporting.rb +31 -0
- data/lib/roby/schedulers/state.rb +129 -0
- data/lib/roby/schedulers/temporal.rb +91 -0
- data/lib/roby/singletons.rb +87 -0
- data/lib/roby/standalone.rb +4 -2
- data/lib/roby/standard_errors.rb +405 -82
- data/lib/roby/state.rb +6 -3
- data/lib/roby/state/conf_model.rb +5 -0
- data/lib/roby/state/events.rb +181 -95
- data/lib/roby/state/goal_model.rb +77 -0
- data/lib/roby/state/open_struct.rb +591 -0
- data/lib/roby/state/open_struct_model.rb +68 -0
- data/lib/roby/state/pos.rb +45 -45
- data/lib/roby/state/shapes.rb +11 -11
- data/lib/roby/state/state_model.rb +303 -0
- data/lib/roby/state/task.rb +43 -0
- data/lib/roby/support.rb +88 -148
- data/lib/roby/task.rb +1361 -1750
- data/lib/roby/task_arguments.rb +428 -0
- data/lib/roby/task_event.rb +127 -0
- data/lib/roby/task_event_generator.rb +337 -0
- data/lib/roby/task_service.rb +6 -0
- data/lib/roby/task_structure/conflicts.rb +104 -0
- data/lib/roby/task_structure/dependency.rb +932 -0
- data/lib/roby/task_structure/error_handling.rb +118 -0
- data/lib/roby/task_structure/executed_by.rb +234 -0
- data/lib/roby/task_structure/planned_by.rb +90 -0
- data/lib/roby/tasks/aggregator.rb +37 -0
- data/lib/roby/tasks/external_process.rb +275 -0
- data/lib/roby/tasks/group.rb +27 -0
- data/lib/roby/tasks/null.rb +19 -0
- data/lib/roby/tasks/parallel.rb +43 -0
- data/lib/roby/tasks/sequence.rb +88 -0
- data/lib/roby/tasks/simple.rb +21 -0
- data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
- data/lib/roby/tasks/timeout.rb +17 -0
- data/lib/roby/tasks/virtual.rb +55 -0
- data/lib/roby/template_plan.rb +7 -0
- data/lib/roby/test/aruba_minitest.rb +74 -0
- data/lib/roby/test/assertion.rb +16 -0
- data/lib/roby/test/assertions.rb +490 -0
- data/lib/roby/test/common.rb +368 -591
- data/lib/roby/test/dsl.rb +149 -0
- data/lib/roby/test/error.rb +18 -0
- data/lib/roby/test/event_reporter.rb +83 -0
- data/lib/roby/test/execution_expectations.rb +1134 -0
- data/lib/roby/test/expect_execution.rb +151 -0
- data/lib/roby/test/minitest_helpers.rb +166 -0
- data/lib/roby/test/roby_app_helpers.rb +200 -0
- data/lib/roby/test/run_planners.rb +155 -0
- data/lib/roby/test/self.rb +112 -0
- data/lib/roby/test/spec.rb +198 -0
- data/lib/roby/test/tasks/empty_task.rb +4 -4
- data/lib/roby/test/tasks/goto.rb +28 -27
- data/lib/roby/test/teardown_plans.rb +100 -0
- data/lib/roby/test/testcase.rb +239 -307
- data/lib/roby/test/tools.rb +159 -155
- data/lib/roby/test/validate_state_machine.rb +75 -0
- data/lib/roby/transaction.rb +1125 -0
- data/lib/roby/transaction/event_generator_proxy.rb +63 -0
- data/lib/roby/transaction/plan_object_proxy.rb +99 -0
- data/lib/roby/transaction/plan_service_proxy.rb +43 -0
- data/lib/roby/transaction/proxying.rb +120 -0
- data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
- data/lib/roby/transaction/task_proxy.rb +135 -0
- data/lib/roby/until_generator.rb +30 -0
- data/lib/roby/version.rb +5 -0
- data/lib/roby/yard.rb +169 -0
- data/lib/yard-roby.rb +1 -0
- data/manifest.xml +32 -6
- data/roby.gemspec +59 -0
- metadata +788 -587
- data/Manifest.txt +0 -321
- data/NOTES +0 -4
- data/README.txt +0 -166
- data/TODO.txt +0 -146
- data/app/README.txt +0 -24
- data/app/Rakefile +0 -8
- data/app/config/ROBOT.rb +0 -5
- data/app/config/init.rb +0 -33
- data/app/config/roby.yml +0 -3
- data/app/controllers/ROBOT.rb +0 -2
- data/app/planners/ROBOT/main.rb +0 -6
- data/app/planners/main.rb +0 -5
- data/app/scripts/distributed +0 -3
- data/app/scripts/generate/bookmarks +0 -3
- data/app/scripts/replay +0 -3
- data/app/scripts/results +0 -3
- data/app/scripts/run +0 -3
- data/app/scripts/server +0 -3
- data/app/scripts/shell +0 -3
- data/app/scripts/test +0 -3
- data/app/tasks/.gitattributes +0 -0
- data/app/tasks/ROBOT/.gitattributes +0 -0
- data/bin/roby-shell +0 -25
- data/doc/guide/src/basics/app.page +0 -139
- data/doc/guide/src/basics/index.page +0 -11
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/relations_display.page +0 -203
- data/doc/guide/src/basics/shell.page +0 -102
- data/doc/guide/src/default.css +0 -319
- data/doc/guide/src/introduction/index.page +0 -29
- data/doc/guide/src/introduction/publications.page +0 -14
- data/doc/guide/src/relations/dependency.page +0 -89
- data/doc/guide/src/relations/index.page +0 -12
- data/ext/droby/dump.cc +0 -175
- data/ext/droby/extconf.rb +0 -3
- data/ext/graph/algorithm.cc +0 -746
- data/ext/graph/extconf.rb +0 -7
- data/ext/graph/graph.cc +0 -575
- data/ext/graph/graph.hh +0 -183
- data/ext/graph/iterator_sequence.hh +0 -102
- data/ext/graph/undirected_dfs.hh +0 -226
- data/ext/graph/undirected_graph.hh +0 -421
- data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
- data/lib/roby/app/scripts/replay.rb +0 -31
- data/lib/roby/app/scripts/server.rb +0 -18
- data/lib/roby/basic_object.rb +0 -151
- data/lib/roby/config.rb +0 -14
- data/lib/roby/distributed.rb +0 -36
- data/lib/roby/distributed/base.rb +0 -448
- data/lib/roby/distributed/communication.rb +0 -875
- data/lib/roby/distributed/connection_space.rb +0 -616
- data/lib/roby/distributed/distributed_object.rb +0 -206
- data/lib/roby/distributed/drb.rb +0 -62
- data/lib/roby/distributed/notifications.rb +0 -531
- data/lib/roby/distributed/peer.rb +0 -555
- data/lib/roby/distributed/protocol.rb +0 -529
- data/lib/roby/distributed/proxy.rb +0 -343
- data/lib/roby/distributed/subscription.rb +0 -311
- data/lib/roby/distributed/transaction.rb +0 -498
- data/lib/roby/external_process_task.rb +0 -225
- data/lib/roby/graph.rb +0 -160
- data/lib/roby/log.rb +0 -3
- data/lib/roby/log/chronicle.rb +0 -303
- data/lib/roby/log/console.rb +0 -74
- data/lib/roby/log/data_stream.rb +0 -275
- data/lib/roby/log/dot.rb +0 -279
- data/lib/roby/log/event_stream.rb +0 -161
- data/lib/roby/log/file.rb +0 -396
- data/lib/roby/log/gui/basic_display.ui +0 -83
- data/lib/roby/log/gui/basic_display_ui.rb +0 -89
- data/lib/roby/log/gui/chronicle.rb +0 -26
- data/lib/roby/log/gui/chronicle_view.rb +0 -40
- data/lib/roby/log/gui/chronicle_view.ui +0 -70
- data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
- data/lib/roby/log/gui/data_displays.rb +0 -171
- data/lib/roby/log/gui/data_displays.ui +0 -155
- data/lib/roby/log/gui/data_displays_ui.rb +0 -146
- data/lib/roby/log/gui/notifications.rb +0 -26
- data/lib/roby/log/gui/relations.rb +0 -269
- data/lib/roby/log/gui/relations.ui +0 -123
- data/lib/roby/log/gui/relations_ui.rb +0 -120
- data/lib/roby/log/gui/relations_view.rb +0 -185
- data/lib/roby/log/gui/relations_view.ui +0 -149
- data/lib/roby/log/gui/relations_view_ui.rb +0 -144
- data/lib/roby/log/gui/replay.rb +0 -366
- data/lib/roby/log/gui/replay_controls.rb +0 -206
- data/lib/roby/log/gui/replay_controls.ui +0 -282
- data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
- data/lib/roby/log/gui/runtime.rb +0 -130
- data/lib/roby/log/hooks.rb +0 -186
- data/lib/roby/log/logger.rb +0 -203
- data/lib/roby/log/notifications.rb +0 -244
- data/lib/roby/log/plan_rebuilder.rb +0 -468
- data/lib/roby/log/relations.rb +0 -1084
- data/lib/roby/log/server.rb +0 -547
- data/lib/roby/log/sqlite.rb +0 -47
- data/lib/roby/log/timings.rb +0 -233
- data/lib/roby/plan-object.rb +0 -371
- data/lib/roby/planning.rb +0 -13
- data/lib/roby/planning/loops.rb +0 -309
- data/lib/roby/planning/model.rb +0 -1012
- data/lib/roby/planning/task.rb +0 -180
- data/lib/roby/query.rb +0 -655
- data/lib/roby/relations/conflicts.rb +0 -67
- data/lib/roby/relations/dependency.rb +0 -358
- data/lib/roby/relations/ensured.rb +0 -19
- data/lib/roby/relations/error_handling.rb +0 -22
- data/lib/roby/relations/events.rb +0 -7
- data/lib/roby/relations/executed_by.rb +0 -208
- data/lib/roby/relations/influence.rb +0 -10
- data/lib/roby/relations/planned_by.rb +0 -63
- data/lib/roby/state/information.rb +0 -55
- data/lib/roby/state/state.rb +0 -367
- data/lib/roby/task-operations.rb +0 -186
- data/lib/roby/task_index.rb +0 -80
- data/lib/roby/test/distributed.rb +0 -230
- data/lib/roby/test/tasks/simple_task.rb +0 -23
- data/lib/roby/transactions.rb +0 -507
- data/lib/roby/transactions/proxy.rb +0 -325
- data/plugins/fault_injection/History.txt +0 -4
- data/plugins/fault_injection/README.txt +0 -34
- data/plugins/fault_injection/Rakefile +0 -12
- data/plugins/fault_injection/TODO.txt +0 -0
- data/plugins/fault_injection/app.rb +0 -52
- data/plugins/fault_injection/fault_injection.rb +0 -89
- data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
- data/plugins/subsystems/README.txt +0 -37
- data/plugins/subsystems/Rakefile +0 -13
- data/plugins/subsystems/app.rb +0 -182
- data/plugins/subsystems/test/app/README +0 -24
- data/plugins/subsystems/test/app/Rakefile +0 -8
- data/plugins/subsystems/test/app/config/app.yml +0 -71
- data/plugins/subsystems/test/app/config/init.rb +0 -12
- data/plugins/subsystems/test/app/config/roby.yml +0 -3
- data/plugins/subsystems/test/app/planners/main.rb +0 -20
- data/plugins/subsystems/test/app/scripts/distributed +0 -3
- data/plugins/subsystems/test/app/scripts/replay +0 -3
- data/plugins/subsystems/test/app/scripts/results +0 -3
- data/plugins/subsystems/test/app/scripts/run +0 -3
- data/plugins/subsystems/test/app/scripts/server +0 -3
- data/plugins/subsystems/test/app/scripts/shell +0 -3
- data/plugins/subsystems/test/app/scripts/test +0 -3
- data/plugins/subsystems/test/app/tasks/services.rb +0 -15
- data/plugins/subsystems/test/test_subsystems.rb +0 -78
- data/test/distributed/test_communication.rb +0 -195
- data/test/distributed/test_connection.rb +0 -284
- data/test/distributed/test_execution.rb +0 -378
- data/test/distributed/test_mixed_plan.rb +0 -341
- data/test/distributed/test_plan_notifications.rb +0 -238
- data/test/distributed/test_protocol.rb +0 -525
- data/test/distributed/test_query.rb +0 -106
- data/test/distributed/test_remote_plan.rb +0 -491
- data/test/distributed/test_transaction.rb +0 -466
- data/test/mockups/external_process +0 -28
- data/test/mockups/tasks.rb +0 -27
- data/test/planning/test_loops.rb +0 -432
- data/test/planning/test_model.rb +0 -427
- data/test/planning/test_task.rb +0 -126
- data/test/relations/test_conflicts.rb +0 -42
- data/test/relations/test_dependency.rb +0 -324
- data/test/relations/test_ensured.rb +0 -38
- data/test/relations/test_executed_by.rb +0 -224
- data/test/relations/test_planned_by.rb +0 -56
- data/test/suite_core.rb +0 -29
- data/test/suite_distributed.rb +0 -10
- data/test/suite_planning.rb +0 -4
- data/test/suite_relations.rb +0 -8
- data/test/tasks/test_external_process.rb +0 -126
- data/test/tasks/test_thread_task.rb +0 -70
- data/test/test_bgl.rb +0 -528
- data/test/test_event.rb +0 -969
- data/test/test_exceptions.rb +0 -591
- data/test/test_execution_engine.rb +0 -987
- data/test/test_gui.rb +0 -20
- data/test/test_interface.rb +0 -43
- data/test/test_log.rb +0 -125
- data/test/test_log_server.rb +0 -133
- data/test/test_plan.rb +0 -418
- data/test/test_query.rb +0 -424
- data/test/test_relations.rb +0 -260
- data/test/test_state.rb +0 -432
- data/test/test_support.rb +0 -16
- data/test/test_task.rb +0 -1181
- data/test/test_testcase.rb +0 -138
- data/test/test_transactions.rb +0 -610
- data/test/test_transactions_proxy.rb +0 -216
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require 'roby'
|
|
2
|
-
require 'roby/log/gui/replay'
|
|
3
|
-
app = Qt::Application.new(ARGV)
|
|
4
|
-
main = Replay.setup(ARGV)
|
|
5
|
-
|
|
6
|
-
if ARGV.empty?
|
|
7
|
-
Roby.app.setup
|
|
8
|
-
|
|
9
|
-
streams = Roby.app.data_streams(Roby.app.log_dir)
|
|
10
|
-
streams.each do |stream|
|
|
11
|
-
stream.open
|
|
12
|
-
main.add_stream(stream)
|
|
13
|
-
end
|
|
14
|
-
else
|
|
15
|
-
ARGV.each do |file|
|
|
16
|
-
if streams = Roby.app.data_source([file])
|
|
17
|
-
streams.each { |s| s.open }
|
|
18
|
-
main.add_stream(streams)
|
|
19
|
-
else
|
|
20
|
-
STDERR.puts "WARN: unknown file type #{file}"
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
begin
|
|
26
|
-
main.show
|
|
27
|
-
app.exec
|
|
28
|
-
rescue
|
|
29
|
-
STDERR.puts $!.full_message
|
|
30
|
-
end
|
|
31
|
-
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'roby/log/server'
|
|
2
|
-
|
|
3
|
-
app = Roby.app
|
|
4
|
-
app.setup
|
|
5
|
-
DRb.start_service "druby://:0"
|
|
6
|
-
|
|
7
|
-
begin
|
|
8
|
-
app.start_server
|
|
9
|
-
|
|
10
|
-
Roby::Log::Server.info "ready"
|
|
11
|
-
sleep
|
|
12
|
-
rescue Interrupt
|
|
13
|
-
ensure
|
|
14
|
-
Roby::Log::Server.info "quitting"
|
|
15
|
-
app.stop_server
|
|
16
|
-
end
|
|
17
|
-
Roby::Log::Server.info "quit"
|
|
18
|
-
|
data/lib/roby/basic_object.rb
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
module Roby
|
|
2
|
-
class BasicObject
|
|
3
|
-
include DRbUndumped
|
|
4
|
-
|
|
5
|
-
def initialize_copy(old) # :nodoc:
|
|
6
|
-
super
|
|
7
|
-
|
|
8
|
-
@remote_siblings = Hash[Distributed, Roby::Distributed::RemoteID.from_object(self)]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# The set of Peer objects which own this object
|
|
12
|
-
attribute(:owners) { [Distributed] }
|
|
13
|
-
# True if we own this object
|
|
14
|
-
def self_owned?; owners.include?(Distributed) end
|
|
15
|
-
|
|
16
|
-
# Attribute which overrides the #distribute attribute on object classes
|
|
17
|
-
attr_writer :distribute
|
|
18
|
-
# True if this object can be seen by remote hosts
|
|
19
|
-
def distribute?
|
|
20
|
-
@distribute || (@distribute.nil? && self.class.distribute?)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# True if instances of this class should be seen by remote hosts
|
|
24
|
-
def self.distribute?; !(@distribute == false) end
|
|
25
|
-
# Call to make the object of this class never seen by remote hosts
|
|
26
|
-
def self.local_only; @distribute = false end
|
|
27
|
-
|
|
28
|
-
def finalized?; !remote_siblings[Distributed] end
|
|
29
|
-
|
|
30
|
-
# The peer => remote_object hash of known siblings for this peer: if
|
|
31
|
-
# there is a representation of this object on a peer, then
|
|
32
|
-
# +remote_siblings+ includes it
|
|
33
|
-
attribute(:remote_siblings) { Hash[Distributed, remote_id] }
|
|
34
|
-
|
|
35
|
-
# True if we know about a sibling on +peer+
|
|
36
|
-
def has_sibling_on?(peer)
|
|
37
|
-
peer == Roby::Distributed || remote_siblings.include?(peer)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Returns the object representation of +self+ on +peer+. The returned
|
|
41
|
-
# value is either a remote sibling (the DRbObject of the representation
|
|
42
|
-
# of +self+ on +peer+), or self if peer is Roby::Distributed
|
|
43
|
-
def sibling_on(peer)
|
|
44
|
-
if sibling = remote_siblings[peer] then sibling
|
|
45
|
-
elsif Roby::Distributed == peer then self
|
|
46
|
-
else
|
|
47
|
-
raise RemotePeerMismatch, "#{self} has no known sibling on #{peer}"
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Sets +remote_object+ as the remote siblings for +self+ on +peer+, and
|
|
52
|
-
# notifies peer that +self+ is the remote siblings for +remote_object+
|
|
53
|
-
def sibling_of(remote_object, peer)
|
|
54
|
-
if !distribute?
|
|
55
|
-
raise ArgumentError, "#{self} is local only"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
add_sibling_for(peer, remote_object)
|
|
59
|
-
peer.transmit(:added_sibling, remote_object, remote_id)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Called when all links to +peer+ should be removed.
|
|
63
|
-
def forget_peer(peer)
|
|
64
|
-
if remote_object = remove_sibling_for(peer)
|
|
65
|
-
peer.removing_proxies[remote_object] << droby_dump(nil)
|
|
66
|
-
|
|
67
|
-
if peer.connected?
|
|
68
|
-
peer.transmit(:removed_sibling, remote_object, self.remote_id) do
|
|
69
|
-
set = peer.removing_proxies[remote_object]
|
|
70
|
-
set.shift
|
|
71
|
-
if set.empty?
|
|
72
|
-
peer.removing_proxies.delete(remote_object)
|
|
73
|
-
end
|
|
74
|
-
yield if block_given?
|
|
75
|
-
end
|
|
76
|
-
else
|
|
77
|
-
peer.removing_proxies.delete(remote_object)
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Registers +remote_object+ as the sibling of +self+ on +peer+. Unlike
|
|
83
|
-
# #sibling_of, do not notify the peer about it.
|
|
84
|
-
def add_sibling_for(peer, remote_object)
|
|
85
|
-
if old_sibling = remote_siblings[peer]
|
|
86
|
-
if old_sibling != remote_object
|
|
87
|
-
raise ArgumentError, "#{self} has already a sibling for #{peer} (#{old_sibling}) #{remote_siblings}"
|
|
88
|
-
else
|
|
89
|
-
# This is OK. The same sibling information can come from
|
|
90
|
-
# different sources. We only check for inconsistencies
|
|
91
|
-
return
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
remote_siblings[peer] = remote_object
|
|
96
|
-
peer.proxies[remote_object] = self
|
|
97
|
-
Roby::Distributed.debug "added sibling #{remote_object.inspect} for #{self} on #{peer} (#{remote_siblings})"
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Remove references about the sibling registered for +peer+ and returns it
|
|
101
|
-
def remove_sibling_for(peer, id = nil)
|
|
102
|
-
if id && remote_siblings[peer] != id
|
|
103
|
-
return
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
if remote_object = remote_siblings.delete(peer)
|
|
107
|
-
peer.proxies.delete(remote_object)
|
|
108
|
-
peer.subscriptions.delete(remote_object)
|
|
109
|
-
Roby::Distributed.debug "removed sibling #{remote_object.inspect} for #{self} on #{peer}"
|
|
110
|
-
remote_object
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# True if we explicitely want this object to be updated by our peers
|
|
115
|
-
def subscribed?; owners.any? { |peer| peer.subscribed?(self) if peer != Distributed } end
|
|
116
|
-
|
|
117
|
-
# Subscribe to this object on all the peers which own it.
|
|
118
|
-
#
|
|
119
|
-
# This is a blocking operation, and cannot be used in the control
|
|
120
|
-
# thread.
|
|
121
|
-
def subscribe
|
|
122
|
-
if !self_owned? && !subscribed?
|
|
123
|
-
owners.each do |peer|
|
|
124
|
-
peer.subscribe(self) unless peer.subcribed?(self)
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
# True if this object is maintained up-to-date
|
|
130
|
-
def updated?; self_owned? || owners.any?(&remote_siblings.method(:[])) end
|
|
131
|
-
# True if +peer+ will send us updates about this object
|
|
132
|
-
def updated_by?(peer); self_owned? || (remote_siblings[peer] && peer.owns?(self)) end
|
|
133
|
-
# True if we shall send updates for this object on +peer+
|
|
134
|
-
def update_on?(peer); (self_owned? || peer.owns?(self)) && remote_siblings[peer] end
|
|
135
|
-
# The set of peers that will get updates of this object
|
|
136
|
-
def updated_peers
|
|
137
|
-
peers = remote_siblings.keys
|
|
138
|
-
peers.delete(Distributed)
|
|
139
|
-
peers
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
# True if this object is useful for our peers
|
|
143
|
-
def remotely_useful?; self_owned? && remote_siblings.size > 1 end
|
|
144
|
-
|
|
145
|
-
# True if this object can be modified in the current context
|
|
146
|
-
def read_write?
|
|
147
|
-
owners.include?(Distributed) || Distributed.updating?(self)
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
data/lib/roby/config.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
if RUBY_VERSION >= "1.9"
|
|
2
|
-
STDERR.puts <<-EOB
|
|
3
|
-
The stable version of Roby is not compatible with 1.9. If you really want to
|
|
4
|
-
try it on 1.9, checkout the 1.9 branch of the development repository on github
|
|
5
|
-
(see README.txt for URLs)
|
|
6
|
-
EOB
|
|
7
|
-
exit(1)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
module Roby
|
|
11
|
-
VERSION = '0.8.0'
|
|
12
|
-
ROBY_LIB_DIR = File.expand_path( File.join(File.dirname(__FILE__), '..') )
|
|
13
|
-
ROBY_ROOT_DIR = File.expand_path( File.join(ROBY_LIB_DIR, '..') )
|
|
14
|
-
end
|
data/lib/roby/distributed.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'roby'
|
|
2
|
-
require 'stringio'
|
|
3
|
-
require 'roby/planning'
|
|
4
|
-
require 'roby_marshalling'
|
|
5
|
-
require 'roby/distributed/drb'
|
|
6
|
-
require 'roby/distributed/protocol'
|
|
7
|
-
require 'roby/distributed/base'
|
|
8
|
-
|
|
9
|
-
require 'roby/distributed/proxy'
|
|
10
|
-
require 'roby/distributed/connection_space'
|
|
11
|
-
require 'roby/distributed/notifications'
|
|
12
|
-
require 'roby/distributed/peer'
|
|
13
|
-
require 'roby/distributed/transaction'
|
|
14
|
-
|
|
15
|
-
# == Communication protocol (and code namespace structure)
|
|
16
|
-
# == Getting remote objects
|
|
17
|
-
# There is actually two ways to get a remote object
|
|
18
|
-
# * the object has been explicitely subscribed to by calling Peer#subscribe
|
|
19
|
-
# * the object has been sent to us because it is linked to an object we own
|
|
20
|
-
# or an object we are subscribed to
|
|
21
|
-
#
|
|
22
|
-
# In the first case, the object must be referenced in the first place. It can
|
|
23
|
-
# have been sent to us as a query result (see Query), or because it has been
|
|
24
|
-
# involved in a distributed transaction. In the second case, it is either us
|
|
25
|
-
# which have added the relation, or the remote peer. If it is us, we should
|
|
26
|
-
# have subscribed to the object, added the relation, and then we may
|
|
27
|
-
# unsubscribe to the object.
|
|
28
|
-
#
|
|
29
|
-
# We forget about a remote object when Plan#garbage_collect removes it.
|
|
30
|
-
#
|
|
31
|
-
# == Subscription management
|
|
32
|
-
# The pDB gets updated about all objects it is subscribed to.
|
|
33
|
-
module Roby::Distributed
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
|
|
@@ -1,448 +0,0 @@
|
|
|
1
|
-
require 'drb'
|
|
2
|
-
|
|
3
|
-
# A thread-safe reference-counting class
|
|
4
|
-
class RefCounting
|
|
5
|
-
def initialize
|
|
6
|
-
@values = Hash.new(0)
|
|
7
|
-
@mutex = Mutex.new
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# True if +obj+ is referenced
|
|
11
|
-
def ref?(obj); @mutex.synchronize { @values[obj] > 0 } end
|
|
12
|
-
# Dereference +obj+ by one
|
|
13
|
-
def deref(obj)
|
|
14
|
-
@mutex.synchronize do
|
|
15
|
-
if (@values[obj] -= 1) == 0
|
|
16
|
-
@values.delete(obj)
|
|
17
|
-
return true
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
false
|
|
21
|
-
end
|
|
22
|
-
# Add +1 to the reference count of +obj+
|
|
23
|
-
def ref(obj)
|
|
24
|
-
@mutex.synchronize do
|
|
25
|
-
@values[obj] += 1
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
# Returns the set of referenced objects
|
|
29
|
-
def referenced_objects
|
|
30
|
-
@mutex.synchronize do
|
|
31
|
-
@values.keys
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
# Remove +object+ from the set of referenced objects, regardless of its
|
|
35
|
-
# reference count
|
|
36
|
-
def delete(object)
|
|
37
|
-
@mutex.synchronize do
|
|
38
|
-
@values.delete(object)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
class Object
|
|
44
|
-
def initialize_copy(old) # :nodoc:
|
|
45
|
-
super
|
|
46
|
-
@__droby_remote_id__ = nil
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# The Roby::Distributed::RemoteID for this object
|
|
50
|
-
def remote_id
|
|
51
|
-
@__droby_remote_id__ ||= Roby::Distributed::RemoteID.from_object(self)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
class DRbObject
|
|
56
|
-
# We don't want this method to call the remote object.
|
|
57
|
-
def to_s
|
|
58
|
-
inspect
|
|
59
|
-
end
|
|
60
|
-
# Converts this DRbObject into Roby::Distributed::RemoteID
|
|
61
|
-
def remote_id
|
|
62
|
-
@__droby_remote_id__ ||= Roby::Distributed::RemoteID.new(__drburi, __drbref)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
module Roby
|
|
67
|
-
module Distributed
|
|
68
|
-
DISCOVERY_RING_PORT = 48901
|
|
69
|
-
DEFAULT_DROBY_PORT = 48902
|
|
70
|
-
|
|
71
|
-
class InvalidRemoteOperation < RuntimeError; end
|
|
72
|
-
|
|
73
|
-
class InvalidRemoteTaskOperation < InvalidRemoteOperation
|
|
74
|
-
attr_reader :task
|
|
75
|
-
def initialize(task); @task = task end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
extend Logger::Hierarchy
|
|
79
|
-
extend Logger::Forward
|
|
80
|
-
|
|
81
|
-
# RemoteID objects are used in dRoby to reference objects on other
|
|
82
|
-
# peers. It uses the same mechanisms that DRbObject but is not
|
|
83
|
-
# converted back into a local object automatically, and does not allow
|
|
84
|
-
# to call remote methods on a remote object.
|
|
85
|
-
class RemoteID
|
|
86
|
-
# The URI of the DRb server
|
|
87
|
-
attr_reader :uri
|
|
88
|
-
# The reference ID of the object on the DRb server
|
|
89
|
-
attr_reader :ref
|
|
90
|
-
|
|
91
|
-
# Creates a new RemoteID with the given URI and ID
|
|
92
|
-
def initialize(uri, ref)
|
|
93
|
-
@uri, @ref = uri, ref.to_int
|
|
94
|
-
@hash = [uri, ref].hash
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def _dump(lvl) # :nodoc:
|
|
98
|
-
@__droby_marshalled__ ||= Marshal.dump([uri, ref])
|
|
99
|
-
end
|
|
100
|
-
def self._load(str) # :nodoc:
|
|
101
|
-
new(*Marshal.load(str))
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def ==(other) # :nodoc:
|
|
105
|
-
other.kind_of?(RemoteID) && other.ref == ref && other.uri == uri
|
|
106
|
-
end
|
|
107
|
-
alias :eql? :==
|
|
108
|
-
attr_reader :hash
|
|
109
|
-
|
|
110
|
-
# True if this object references a local object
|
|
111
|
-
def local?; DRb.here?(uri) end
|
|
112
|
-
# If this ID references a local object, returns it. Otherwise, returns self.
|
|
113
|
-
def local_object
|
|
114
|
-
if DRb.here?(uri)
|
|
115
|
-
DRb.to_obj(ref)
|
|
116
|
-
else
|
|
117
|
-
self
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def to_s(peer = nil)
|
|
122
|
-
if peer
|
|
123
|
-
"0x#{Object.address_from_id(ref).to_s(16)}@#{peer.name}"
|
|
124
|
-
else
|
|
125
|
-
"0x#{Object.address_from_id(ref).to_s(16)}@#{uri}"
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
def inspect; to_s end
|
|
129
|
-
def pretty_print(pp); pp.text to_s end
|
|
130
|
-
|
|
131
|
-
def to_local(peer, create)
|
|
132
|
-
object = local_object
|
|
133
|
-
if object.kind_of?(RemoteID)
|
|
134
|
-
if local_proxy = peer.proxies[object]
|
|
135
|
-
return peer.proxy_setup(local_proxy)
|
|
136
|
-
elsif !create
|
|
137
|
-
return
|
|
138
|
-
elsif peer.removing_proxies.has_key?(object)
|
|
139
|
-
marshalled_object = peer.removing_proxies[object].last
|
|
140
|
-
Distributed.debug "reusing marshalled #{marshalled_object} for #{self} from #{peer}"
|
|
141
|
-
marshalled_object.remote_siblings.delete(Distributed.droby_dump)
|
|
142
|
-
marshalled_object.remote_siblings[peer.droby_dump] = self
|
|
143
|
-
|
|
144
|
-
if marshalled_object.respond_to?(:plan) && !marshalled_object.plan
|
|
145
|
-
# Take care of the "proxy is GCed while the peer
|
|
146
|
-
# sends us messages about it" case. In this case,
|
|
147
|
-
# the object has already been removed when it is
|
|
148
|
-
# marshalled (#plan == nil).
|
|
149
|
-
#
|
|
150
|
-
# This cannot happen in transactions: it only happens
|
|
151
|
-
# in plans where one side can remove an object while
|
|
152
|
-
# the other side is doing something on it
|
|
153
|
-
marshalled_object.instance_variable_set(:@plan, Roby.plan)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
object = peer.local_object(marshalled_object)
|
|
157
|
-
|
|
158
|
-
if object.respond_to?(:plan) && !object.plan
|
|
159
|
-
raise "#{object} has no plan !"
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
return object
|
|
163
|
-
end
|
|
164
|
-
raise ArgumentError, "#{self} has no proxy"
|
|
165
|
-
else
|
|
166
|
-
object
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
private :remote_id
|
|
171
|
-
|
|
172
|
-
# Returns the RemoteID object for +obj+. This is actually
|
|
173
|
-
# equivalent to obj.remote_id
|
|
174
|
-
def self.from_object(obj)
|
|
175
|
-
Roby::Distributed::RemoteID.new(DRb.current_server.uri, DRb.to_id(obj) || 0)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
# Creates a DRbObject corresponding to the object referenced by this RemoteID
|
|
179
|
-
def to_drb_object
|
|
180
|
-
DRbObject.new_with(uri, (ref == 0 ? nil : ref))
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
@updated_objects = ValueSet.new
|
|
185
|
-
@allowed_remote_access = Array.new
|
|
186
|
-
@keep = RefCounting.new
|
|
187
|
-
@removed_objects = ValueSet.new
|
|
188
|
-
class << self
|
|
189
|
-
# The one and only ConnectionSpace object
|
|
190
|
-
attr_reader :state
|
|
191
|
-
|
|
192
|
-
# Sets the #state attribute for Roby::Distributed
|
|
193
|
-
def state=(new_state)
|
|
194
|
-
if log = logger
|
|
195
|
-
if new_state
|
|
196
|
-
logger.progname = new_state.name
|
|
197
|
-
else
|
|
198
|
-
logger.progname = "Roby"
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
if !Roby.plan
|
|
203
|
-
Roby.instance_variable_set :@plan, new_state.plan
|
|
204
|
-
Roby.instance_variable_set :@engine, new_state.plan.engine
|
|
205
|
-
elsif new_state && Roby.plan != new_state.plan
|
|
206
|
-
raise ArgumentError, "plan mismatch between Roby.plan(#{plan}) and new_state.plan(#{new_state.plan}). Cannot set Distributed.state"
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
@state = new_state
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# True if this plan manager owns +object+
|
|
213
|
-
def owns?(object); !state || state.owns?(object) end
|
|
214
|
-
|
|
215
|
-
# The set of objects we should temporarily keep because they are used
|
|
216
|
-
# in a callback mechanism (like a remote query or a trigger)
|
|
217
|
-
attr_reader :keep
|
|
218
|
-
|
|
219
|
-
# Compute the subset of +candidates+ that are to be considered as
|
|
220
|
-
# useful because of our peers and returns it.
|
|
221
|
-
#
|
|
222
|
-
# More specifically, an object will be included in the result if:
|
|
223
|
-
# * this plan manager is subscribed to it
|
|
224
|
-
# * the object is directly related to a self-owned object
|
|
225
|
-
# * if +include_subscriptions_relations+ is true, +object+ is
|
|
226
|
-
# directly related to a subscribed object.
|
|
227
|
-
#
|
|
228
|
-
# The method takes into account plan children in its computation:
|
|
229
|
-
# for instance, a task will be included in the result if one of
|
|
230
|
-
# its events meet the requirements described above.
|
|
231
|
-
#
|
|
232
|
-
# If +result+ is non-nil, the method adds the objects to +result+
|
|
233
|
-
# using #<< and returns it.
|
|
234
|
-
def remotely_useful_objects(candidates, include_subscriptions_relations, result = nil)
|
|
235
|
-
return ValueSet.new if candidates.empty?
|
|
236
|
-
|
|
237
|
-
result ||= Distributed.keep.referenced_objects.to_value_set
|
|
238
|
-
|
|
239
|
-
child_set = ValueSet.new
|
|
240
|
-
for obj in candidates
|
|
241
|
-
if result.include?(obj.root_object)
|
|
242
|
-
next
|
|
243
|
-
elsif obj.subscribed?
|
|
244
|
-
result << obj
|
|
245
|
-
next
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
not_found = obj.each_relation do |rel|
|
|
249
|
-
next unless rel.distribute? && rel.root_relation?
|
|
250
|
-
|
|
251
|
-
not_found = obj.each_parent_object(rel) do |parent|
|
|
252
|
-
parent = parent.root_object
|
|
253
|
-
if parent.distribute? &&
|
|
254
|
-
((include_subscriptions_relations && parent.subscribed?) || parent.self_owned?)
|
|
255
|
-
result << obj.root_object
|
|
256
|
-
break
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
break unless not_found
|
|
260
|
-
|
|
261
|
-
not_found = obj.each_child_object(rel) do |child|
|
|
262
|
-
child = child.root_object
|
|
263
|
-
if child.distribute? &&
|
|
264
|
-
((include_subscriptions_relations && child.subscribed?) || child.self_owned?)
|
|
265
|
-
result << obj.root_object
|
|
266
|
-
break
|
|
267
|
-
end
|
|
268
|
-
end
|
|
269
|
-
break unless not_found
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
if not_found && obj.respond_to?(:each_plan_child)
|
|
273
|
-
obj.each_plan_child { |plan_child| child_set << plan_child }
|
|
274
|
-
end
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
result.merge remotely_useful_objects(child_set, false, result)
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
# The list of objects that are being updated because of remote update
|
|
281
|
-
attr_reader :updated_objects
|
|
282
|
-
|
|
283
|
-
# True if we are updating +object+
|
|
284
|
-
def updating?(object)
|
|
285
|
-
updated_objects.include?(object)
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# True if we are updating all objects in +objects+
|
|
289
|
-
def updating_all?(objects)
|
|
290
|
-
updated_objects.include_all?(objects.to_value_set)
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
# Call the block with the objects in +objects+ added to the
|
|
294
|
-
# updated_objects set
|
|
295
|
-
def update_all(objects)
|
|
296
|
-
old_updated_objects = @updated_objects
|
|
297
|
-
@updated_objects |= objects.to_value_set
|
|
298
|
-
yield
|
|
299
|
-
ensure
|
|
300
|
-
@updated_objects = old_updated_objects
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
# Call the block with the objects in +objects+ added to the
|
|
304
|
-
# updated_objects set
|
|
305
|
-
def update(object)
|
|
306
|
-
if object.respond_to?(:__getobj__) && !object.kind_of?(Roby::Transactions::Proxy)
|
|
307
|
-
object = object.__getobj__
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
included = unless updated_objects.include?(object)
|
|
311
|
-
@updated_objects << object
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
yield
|
|
315
|
-
ensure
|
|
316
|
-
@updated_objects.delete(object) if included
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
# Yields the relations of +object+ which are to be distributed
|
|
320
|
-
# among peers.
|
|
321
|
-
def each_object_relation(object)
|
|
322
|
-
object.each_relation do |rel|
|
|
323
|
-
yield(rel) if rel.distribute?
|
|
324
|
-
end
|
|
325
|
-
end
|
|
326
|
-
|
|
327
|
-
# The list of known peers. See ConnectionSpace#peers
|
|
328
|
-
def peers
|
|
329
|
-
if state then state.peers
|
|
330
|
-
else {}
|
|
331
|
-
end
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
# The set of objects that have been removed locally, but for which
|
|
335
|
-
# there are still references on our peers
|
|
336
|
-
attr_reader :removed_objects
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
@cycles_rx = Queue.new
|
|
340
|
-
@pending_cycles = Array.new
|
|
341
|
-
@pending_remote_events = Array.new
|
|
342
|
-
|
|
343
|
-
class << self
|
|
344
|
-
# The queue of cycles read by ConnectionSpace#receive and not processed
|
|
345
|
-
attr_reader :cycles_rx
|
|
346
|
-
# The set of cycles that have been read from #pending_cycles but
|
|
347
|
-
# have not been processed yet because the peers have disabled_rx? set
|
|
348
|
-
#
|
|
349
|
-
# This variable must be accessed only in the control thread
|
|
350
|
-
attr_reader :pending_cycles
|
|
351
|
-
end
|
|
352
|
-
|
|
353
|
-
# Extract data received so far from our peers and replays it if
|
|
354
|
-
# possible. Data can be ignored if RX is disabled with this peer
|
|
355
|
-
# (through Peer#disable_rx), or delayed if there is event propagation
|
|
356
|
-
# involved. In that last case, the events will be fired at the
|
|
357
|
-
# beginning of the next execution cycle and the remaining messages at
|
|
358
|
-
# the end of that same cycle.
|
|
359
|
-
def self.process_pending
|
|
360
|
-
delayed_cycles = []
|
|
361
|
-
while !(pending_cycles.empty? && cycles_rx.empty?)
|
|
362
|
-
peer, calls = if pending_cycles.empty?
|
|
363
|
-
cycles_rx.pop
|
|
364
|
-
else pending_cycles.shift
|
|
365
|
-
end
|
|
366
|
-
|
|
367
|
-
if peer.disabled_rx?
|
|
368
|
-
delayed_cycles.push [peer, calls]
|
|
369
|
-
else
|
|
370
|
-
if remaining = process_cycle(peer, calls)
|
|
371
|
-
delayed_cycles.push [peer, remaining]
|
|
372
|
-
end
|
|
373
|
-
end
|
|
374
|
-
end
|
|
375
|
-
|
|
376
|
-
ensure
|
|
377
|
-
@pending_cycles = delayed_cycles
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
# Process once cycle worth of data from the given peer.
|
|
381
|
-
def self.process_cycle(peer, calls)
|
|
382
|
-
from = Time.now
|
|
383
|
-
calls_size = calls.size
|
|
384
|
-
|
|
385
|
-
peer_server = peer.local_server
|
|
386
|
-
peer_server.processing = true
|
|
387
|
-
|
|
388
|
-
if !peer.connected?
|
|
389
|
-
return
|
|
390
|
-
end
|
|
391
|
-
|
|
392
|
-
while call_spec = calls.shift
|
|
393
|
-
return unless call_spec
|
|
394
|
-
|
|
395
|
-
is_callback, method, args, critical, message_id = *call_spec
|
|
396
|
-
Distributed.debug do
|
|
397
|
-
args_s = args.map { |obj| obj ? obj.to_s : 'nil' }
|
|
398
|
-
"processing #{is_callback ? 'callback' : 'method'} [#{message_id}]#{method}(#{args_s.join(", ")})"
|
|
399
|
-
end
|
|
400
|
-
|
|
401
|
-
result = catch(:ignore_this_call) do
|
|
402
|
-
peer_server.queued_completion = false
|
|
403
|
-
peer_server.current_message_id = message_id
|
|
404
|
-
peer_server.processing_callback = !!is_callback
|
|
405
|
-
|
|
406
|
-
result = begin
|
|
407
|
-
peer_server.send(method, *args)
|
|
408
|
-
rescue Exception => e
|
|
409
|
-
if critical
|
|
410
|
-
peer.fatal_error e, method, args
|
|
411
|
-
else
|
|
412
|
-
peer_server.completed!(e, true)
|
|
413
|
-
end
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
if !peer.connected?
|
|
417
|
-
return
|
|
418
|
-
end
|
|
419
|
-
result
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
if method != :completed && method != :completion_group && !peer.disconnecting? && !peer.disconnected?
|
|
423
|
-
if peer_server.queued_completion?
|
|
424
|
-
Distributed.debug "done and already queued the completion message"
|
|
425
|
-
else
|
|
426
|
-
Distributed.debug { "done, returns #{result || 'nil'}" }
|
|
427
|
-
peer.queue_call false, :completed, [result, false, message_id]
|
|
428
|
-
end
|
|
429
|
-
end
|
|
430
|
-
|
|
431
|
-
if peer.disabled_rx?
|
|
432
|
-
return calls
|
|
433
|
-
end
|
|
434
|
-
|
|
435
|
-
end
|
|
436
|
-
|
|
437
|
-
Distributed.debug "successfully served #{calls_size} calls in #{Time.now - from} seconds"
|
|
438
|
-
nil
|
|
439
|
-
|
|
440
|
-
rescue Exception => e
|
|
441
|
-
Distributed.info "error in dRoby processing: #{e.full_message}"
|
|
442
|
-
peer.disconnect
|
|
443
|
-
|
|
444
|
-
ensure
|
|
445
|
-
peer_server.processing = false
|
|
446
|
-
end
|
|
447
|
-
end
|
|
448
|
-
end
|