passenger 4.0.60 → 5.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +5 -0
- data/.travis.yml +3 -2
- data/CHANGELOG +31 -53
- data/CONTRIBUTING.md +4 -4
- data/CONTRIBUTORS +0 -1
- data/Gemfile +18 -0
- data/Gemfile.lock +41 -0
- data/Rakefile +16 -0
- data/bin/passenger +2 -2
- data/bin/passenger-install-apache2-module +12 -12
- data/bin/passenger-install-nginx-module +9 -14
- data/bin/passenger-status +125 -87
- data/build/agents.rb +112 -140
- data/build/apache2.rb +4 -9
- data/build/basics.rb +5 -3
- data/build/common_library.rb +1 -0
- data/build/cxx_tests.rb +69 -47
- data/build/debian.rb +4 -2
- data/build/documentation.rb +1 -0
- data/build/integration_tests.rb +28 -43
- data/build/misc.rb +0 -18
- data/build/nginx.rb +2 -6
- data/build/packaging.rb +33 -22
- data/build/preprocessor.rb +2 -4
- data/build/ruby_tests.rb +7 -26
- data/build/test_basics.rb +24 -25
- data/debian.template/control.template +2 -2
- data/debian.template/locations.ini.template +2 -3
- data/debian.template/passenger.install.template +2 -2
- data/debian.template/rules.template +1 -1
- data/dev/ci/run_jenkins.sh +0 -1
- data/dev/ci/run_rpm_tests.sh +3 -0
- data/dev/ci/run_travis.sh +63 -17
- data/dev/copy_boost_headers +22 -6
- data/dev/ruby_server.rb +244 -0
- data/dev/vagrant/provision.sh +3 -1
- data/doc/DebuggingAndStressTesting.md +3 -3
- data/doc/Design and Architecture.txt +5 -6
- data/doc/Packaging.txt.md +35 -6
- data/doc/ServerOptimizationGuide.txt.md +339 -0
- data/doc/Users guide Apache.idmap.txt +177 -187
- data/doc/Users guide Apache.txt +143 -219
- data/doc/Users guide Nginx.idmap.txt +166 -166
- data/doc/Users guide Nginx.txt +265 -223
- data/doc/Users guide Standalone.txt +3 -3
- data/doc/templates/markdown.html.erb +37 -6
- data/doc/users_guide_snippets/environment_variables.txt +1 -1
- data/doc/users_guide_snippets/support_information.txt +1 -1
- data/doc/users_guide_snippets/tips.txt +2 -2
- data/ext/apache2/Configuration.cpp +23 -81
- data/ext/apache2/Configuration.hpp +18 -92
- data/ext/apache2/ConfigurationCommands.cpp +64 -15
- data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
- data/ext/apache2/ConfigurationFields.hpp +12 -0
- data/ext/apache2/ConfigurationSetters.cpp +73 -1
- data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
- data/ext/apache2/CreateDirConfig.cpp +6 -0
- data/ext/apache2/DirectoryMapper.h +11 -6
- data/ext/apache2/Hooks.cpp +291 -408
- data/ext/apache2/MergeDirConfig.cpp +42 -0
- data/ext/apache2/SetHeaders.cpp +61 -16
- data/ext/apache2/SetHeaders.cpp.erb +9 -7
- data/ext/boost/container/allocator_traits.hpp +400 -0
- data/ext/boost/container/deque.hpp +2012 -0
- data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
- data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
- data/ext/boost/container/detail/algorithms.hpp +84 -0
- data/ext/boost/container/detail/allocation_type.hpp +54 -0
- data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
- data/ext/boost/container/detail/config_begin.hpp +49 -0
- data/ext/boost/container/detail/config_end.hpp +17 -0
- data/ext/boost/container/detail/destroyers.hpp +365 -0
- data/ext/boost/container/detail/flat_tree.hpp +1055 -0
- data/ext/boost/container/detail/function_detector.hpp +88 -0
- data/ext/boost/container/detail/iterators.hpp +611 -0
- data/ext/boost/container/detail/math_functions.hpp +113 -0
- data/ext/boost/container/detail/memory_util.hpp +83 -0
- data/ext/boost/container/detail/mpl.hpp +160 -0
- data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
- data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
- data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
- data/ext/boost/container/detail/pair.hpp +354 -0
- data/ext/boost/container/detail/pool_common.hpp +52 -0
- data/ext/boost/container/detail/preprocessor.hpp +232 -0
- data/ext/boost/container/detail/transform_iterator.hpp +176 -0
- data/ext/boost/container/detail/tree.hpp +1134 -0
- data/ext/boost/container/detail/type_traits.hpp +210 -0
- data/ext/boost/container/detail/utilities.hpp +1141 -0
- data/ext/boost/container/detail/value_init.hpp +45 -0
- data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
- data/ext/boost/container/detail/version_type.hpp +92 -0
- data/ext/boost/container/detail/workaround.hpp +44 -0
- data/ext/boost/container/flat_map.hpp +1674 -0
- data/ext/boost/container/flat_set.hpp +1408 -0
- data/ext/boost/container/list.hpp +1475 -0
- data/ext/boost/container/map.hpp +1508 -0
- data/ext/boost/container/scoped_allocator.hpp +1503 -0
- data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
- data/ext/boost/container/set.hpp +1280 -0
- data/ext/boost/container/slist.hpp +1706 -0
- data/ext/boost/container/stable_vector.hpp +1869 -0
- data/ext/boost/container/static_vector.hpp +1053 -0
- data/ext/boost/container/string.hpp +2856 -0
- data/ext/boost/container/throw_exception.hpp +110 -0
- data/ext/boost/container/vector.hpp +2671 -0
- data/ext/boost/detail/is_xxx.hpp +61 -0
- data/ext/boost/intrusive/any_hook.hpp +344 -0
- data/ext/boost/intrusive/avl_set.hpp +2528 -0
- data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
- data/ext/boost/intrusive/avltree.hpp +1786 -0
- data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
- data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
- data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
- data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
- data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
- data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
- data/ext/boost/intrusive/detail/assert.hpp +41 -0
- data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
- data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
- data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
- data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
- data/ext/boost/intrusive/detail/config_end.hpp +15 -0
- data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
- data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
- data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
- data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
- data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
- data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
- data/ext/boost/intrusive/detail/list_node.hpp +196 -0
- data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
- data/ext/boost/intrusive/detail/mpl.hpp +383 -0
- data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
- data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
- data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
- data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
- data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
- data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
- data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
- data/ext/boost/intrusive/detail/utilities.hpp +858 -0
- data/ext/boost/intrusive/detail/workaround.hpp +22 -0
- data/ext/boost/intrusive/hashtable.hpp +3110 -0
- data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
- data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
- data/ext/boost/intrusive/link_mode.hpp +46 -0
- data/ext/boost/intrusive/list.hpp +1525 -0
- data/ext/boost/intrusive/list_hook.hpp +290 -0
- data/ext/boost/intrusive/member_value_traits.hpp +70 -0
- data/ext/boost/intrusive/options.hpp +810 -0
- data/ext/boost/intrusive/parent_from_member.hpp +42 -0
- data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
- data/ext/boost/intrusive/pointer_traits.hpp +265 -0
- data/ext/boost/intrusive/priority_compare.hpp +39 -0
- data/ext/boost/intrusive/rbtree.hpp +1785 -0
- data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
- data/ext/boost/intrusive/set.hpp +2554 -0
- data/ext/boost/intrusive/set_hook.hpp +300 -0
- data/ext/boost/intrusive/sg_set.hpp +2601 -0
- data/ext/boost/intrusive/sgtree.hpp +2009 -0
- data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
- data/ext/boost/intrusive/slist.hpp +2219 -0
- data/ext/boost/intrusive/slist_hook.hpp +294 -0
- data/ext/boost/intrusive/splay_set.hpp +2575 -0
- data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
- data/ext/boost/intrusive/splaytree.hpp +1784 -0
- data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
- data/ext/boost/intrusive/treap.hpp +1882 -0
- data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
- data/ext/boost/intrusive/treap_set.hpp +2751 -0
- data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
- data/ext/boost/intrusive/unordered_set.hpp +2115 -0
- data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
- data/ext/boost/intrusive_ptr.hpp +18 -0
- data/ext/boost/math/common_factor_ct.hpp +180 -0
- data/ext/boost/math_fwd.hpp +108 -0
- data/ext/boost/move/detail/move_helpers.hpp +175 -0
- data/ext/boost/parameter.hpp +21 -0
- data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
- data/ext/boost/parameter/aux_/cast.hpp +143 -0
- data/ext/boost/parameter/aux_/default.hpp +69 -0
- data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
- data/ext/boost/parameter/aux_/maybe.hpp +120 -0
- data/ext/boost/parameter/aux_/overloads.hpp +88 -0
- data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
- data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
- data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
- data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
- data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
- data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
- data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
- data/ext/boost/parameter/aux_/set.hpp +67 -0
- data/ext/boost/parameter/aux_/tag.hpp +38 -0
- data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
- data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
- data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
- data/ext/boost/parameter/aux_/void.hpp +29 -0
- data/ext/boost/parameter/aux_/yesno.hpp +26 -0
- data/ext/boost/parameter/binding.hpp +106 -0
- data/ext/boost/parameter/config.hpp +14 -0
- data/ext/boost/parameter/keyword.hpp +152 -0
- data/ext/boost/parameter/macros.hpp +99 -0
- data/ext/boost/parameter/match.hpp +55 -0
- data/ext/boost/parameter/name.hpp +156 -0
- data/ext/boost/parameter/parameters.hpp +931 -0
- data/ext/boost/parameter/preprocessor.hpp +1178 -0
- data/ext/boost/parameter/python.hpp +735 -0
- data/ext/boost/parameter/value_type.hpp +108 -0
- data/ext/boost/pool/detail/for.m4 +107 -0
- data/ext/boost/pool/detail/guard.hpp +69 -0
- data/ext/boost/pool/detail/mutex.hpp +42 -0
- data/ext/boost/pool/detail/pool_construct.bat +24 -0
- data/ext/boost/pool/detail/pool_construct.ipp +852 -0
- data/ext/boost/pool/detail/pool_construct.m4 +84 -0
- data/ext/boost/pool/detail/pool_construct.sh +12 -0
- data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
- data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
- data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
- data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
- data/ext/boost/pool/object_pool.hpp +287 -0
- data/ext/boost/pool/pool.hpp +1024 -0
- data/ext/boost/pool/pool_alloc.hpp +488 -0
- data/ext/boost/pool/poolfwd.hpp +82 -0
- data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
- data/ext/boost/pool/singleton_pool.hpp +251 -0
- data/ext/boost/preprocessor/arithmetic.hpp +25 -0
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
- data/ext/boost/preprocessor/array.hpp +32 -0
- data/ext/boost/preprocessor/array/enum.hpp +33 -0
- data/ext/boost/preprocessor/array/insert.hpp +55 -0
- data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
- data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
- data/ext/boost/preprocessor/array/push_back.hpp +33 -0
- data/ext/boost/preprocessor/array/push_front.hpp +33 -0
- data/ext/boost/preprocessor/array/remove.hpp +54 -0
- data/ext/boost/preprocessor/array/replace.hpp +49 -0
- data/ext/boost/preprocessor/array/reverse.hpp +29 -0
- data/ext/boost/preprocessor/array/to_list.hpp +33 -0
- data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
- data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
- data/ext/boost/preprocessor/assert_msg.hpp +17 -0
- data/ext/boost/preprocessor/comma.hpp +17 -0
- data/ext/boost/preprocessor/comparison.hpp +24 -0
- data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
- data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
- data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
- data/ext/boost/preprocessor/comparison/less.hpp +46 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
- data/ext/boost/preprocessor/config/limits.hpp +30 -0
- data/ext/boost/preprocessor/control.hpp +22 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
- data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
- data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
- data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
- data/ext/boost/preprocessor/debug.hpp +18 -0
- data/ext/boost/preprocessor/debug/assert.hpp +44 -0
- data/ext/boost/preprocessor/debug/line.hpp +35 -0
- data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
- data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
- data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
- data/ext/boost/preprocessor/detail/null.hpp +17 -0
- data/ext/boost/preprocessor/detail/split.hpp +35 -0
- data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
- data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
- data/ext/boost/preprocessor/expand.hpp +17 -0
- data/ext/boost/preprocessor/expr_if.hpp +17 -0
- data/ext/boost/preprocessor/facilities.hpp +23 -0
- data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
- data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
- data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
- data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
- data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
- data/ext/boost/preprocessor/for.hpp +17 -0
- data/ext/boost/preprocessor/if.hpp +17 -0
- data/ext/boost/preprocessor/iteration.hpp +19 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
- data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
- data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
- data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
- data/ext/boost/preprocessor/iteration/local.hpp +26 -0
- data/ext/boost/preprocessor/iteration/self.hpp +19 -0
- data/ext/boost/preprocessor/library.hpp +36 -0
- data/ext/boost/preprocessor/limits.hpp +17 -0
- data/ext/boost/preprocessor/list.hpp +37 -0
- data/ext/boost/preprocessor/list/at.hpp +39 -0
- data/ext/boost/preprocessor/list/cat.hpp +42 -0
- data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
- data/ext/boost/preprocessor/list/enum.hpp +41 -0
- data/ext/boost/preprocessor/list/filter.hpp +54 -0
- data/ext/boost/preprocessor/list/first_n.hpp +58 -0
- data/ext/boost/preprocessor/list/for_each.hpp +49 -0
- data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
- data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
- data/ext/boost/preprocessor/list/size.hpp +58 -0
- data/ext/boost/preprocessor/list/to_array.hpp +123 -0
- data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
- data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
- data/ext/boost/preprocessor/logical.hpp +29 -0
- data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
- data/ext/boost/preprocessor/logical/nor.hpp +30 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/logical/or.hpp +30 -0
- data/ext/boost/preprocessor/logical/xor.hpp +30 -0
- data/ext/boost/preprocessor/max.hpp +17 -0
- data/ext/boost/preprocessor/min.hpp +17 -0
- data/ext/boost/preprocessor/punctuation.hpp +20 -0
- data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
- data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repetition.hpp +32 -0
- data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
- data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
- data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
- data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
- data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
- data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
- data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
- data/ext/boost/preprocessor/selection.hpp +18 -0
- data/ext/boost/preprocessor/selection/max.hpp +39 -0
- data/ext/boost/preprocessor/selection/min.hpp +39 -0
- data/ext/boost/preprocessor/seq.hpp +43 -0
- data/ext/boost/preprocessor/seq/cat.hpp +49 -0
- data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
- data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
- data/ext/boost/preprocessor/seq/filter.hpp +54 -0
- data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
- data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
- data/ext/boost/preprocessor/seq/insert.hpp +28 -0
- data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
- data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
- data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
- data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
- data/ext/boost/preprocessor/seq/remove.hpp +29 -0
- data/ext/boost/preprocessor/seq/replace.hpp +29 -0
- data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
- data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
- data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/preprocessor/slot.hpp +17 -0
- data/ext/boost/preprocessor/slot/counter.hpp +25 -0
- data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
- data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
- data/ext/boost/preprocessor/tuple.hpp +28 -0
- data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
- data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
- data/ext/boost/preprocessor/tuple/size.hpp +28 -0
- data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
- data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
- data/ext/boost/preprocessor/variadic.hpp +23 -0
- data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
- data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
- data/ext/boost/preprocessor/while.hpp +17 -0
- data/ext/boost/preprocessor/wstringize.hpp +29 -0
- data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
- data/ext/common/AccountsDatabase.h +3 -4
- data/ext/common/AgentsStarter.cpp +12 -15
- data/ext/common/AgentsStarter.h +54 -120
- data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
- data/ext/common/ApplicationPool2/AppTypes.h +21 -14
- data/ext/common/ApplicationPool2/Common.h +36 -19
- data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
- data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
- data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
- data/ext/common/ApplicationPool2/Group.h +304 -171
- data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
- data/ext/common/ApplicationPool2/Options.h +50 -62
- data/ext/common/ApplicationPool2/Pool.h +285 -189
- data/ext/common/ApplicationPool2/Process.h +126 -115
- data/ext/common/ApplicationPool2/Session.h +70 -30
- data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
- data/ext/common/ApplicationPool2/Socket.h +57 -43
- data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
- data/ext/common/ApplicationPool2/Spawner.h +59 -38
- data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
- data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
- data/ext/common/BackgroundEventLoop.cpp +48 -1
- data/ext/common/BackgroundEventLoop.h +3 -1
- data/ext/common/Constants.h +30 -8
- data/ext/common/DataStructures/HashedStaticString.h +103 -0
- data/ext/common/DataStructures/LString.h +396 -0
- data/ext/common/DataStructures/StringKeyTable.h +588 -0
- data/ext/common/EventedMessageServer.h +1 -0
- data/ext/common/FileDescriptor.h +5 -0
- data/ext/common/InstanceDirectory.h +240 -0
- data/ext/common/Logging.cpp +38 -13
- data/ext/common/Logging.h +53 -22
- data/ext/common/MemoryKit/mbuf.cpp +413 -0
- data/ext/common/MemoryKit/mbuf.h +266 -0
- data/ext/common/MemoryKit/palloc.cpp +337 -0
- data/ext/common/MemoryKit/palloc.h +121 -0
- data/ext/common/ResourceLocator.h +62 -6
- data/ext/common/SafeLibev.h +4 -4
- data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
- data/ext/common/ServerKit/Channel.h +747 -0
- data/ext/common/ServerKit/Client.h +166 -0
- data/ext/common/ServerKit/ClientRef.h +130 -0
- data/ext/common/ServerKit/Context.h +129 -0
- data/ext/common/ServerKit/Errors.h +103 -0
- data/ext/common/ServerKit/FdSinkChannel.h +206 -0
- data/ext/common/ServerKit/FdSourceChannel.h +230 -0
- data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
- data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
- data/ext/common/ServerKit/HeaderTable.h +472 -0
- data/ext/common/ServerKit/Hooks.h +79 -0
- data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
- data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
- data/ext/common/ServerKit/HttpClient.h +94 -0
- data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
- data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
- data/ext/common/ServerKit/HttpRequest.h +276 -0
- data/ext/common/ServerKit/HttpRequestRef.h +130 -0
- data/ext/common/ServerKit/HttpServer.h +1152 -0
- data/ext/common/ServerKit/Implementation.cpp +47 -0
- data/ext/common/ServerKit/Server.h +1040 -0
- data/ext/common/ServerKit/http_parser.cpp +2259 -0
- data/ext/common/ServerKit/http_parser.h +330 -0
- data/ext/common/StaticString.h +8 -0
- data/ext/common/Utils.cpp +14 -12
- data/ext/common/Utils.h +9 -103
- data/ext/common/Utils/BufferedIO.h +1 -0
- data/ext/common/Utils/CachedFileStat.hpp +1 -7
- data/ext/common/Utils/DateParsing.h +379 -0
- data/ext/common/Utils/FileChangeChecker.h +3 -9
- data/ext/common/Utils/Hasher.cpp +52 -0
- data/ext/common/Utils/Hasher.h +58 -0
- data/ext/common/Utils/IOUtils.cpp +62 -62
- data/ext/common/Utils/JsonUtils.h +21 -0
- data/ext/common/Utils/OptionParsing.h +75 -0
- data/ext/common/Utils/StrIntUtils.cpp +112 -19
- data/ext/common/Utils/StrIntUtils.h +52 -12
- data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
- data/ext/common/Utils/VariantMap.h +18 -7
- data/ext/common/Utils/modp_b64.cpp +290 -0
- data/ext/common/Utils/modp_b64.h +241 -0
- data/ext/common/Utils/modp_b64_data.h +479 -0
- data/ext/common/Utils/sysqueue.h +811 -0
- data/ext/common/agents/Base.cpp +71 -98
- data/ext/common/agents/Base.h +11 -3
- data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
- data/ext/common/agents/HelperAgent/Main.cpp +899 -487
- data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
- data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
- data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
- data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
- data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
- data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
- data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
- data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
- data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
- data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
- data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
- data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
- data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/Main.cpp +107 -0
- data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
- data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
- data/ext/common/agents/Watchdog/AdminServer.h +390 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
- data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
- data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
- data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
- data/ext/common/agents/Watchdog/Main.cpp +743 -202
- data/ext/libeio/eio.c +17 -0
- data/ext/libeio/eio.h +2 -0
- data/ext/nginx/CacheLocationConfig.c +177 -198
- data/ext/nginx/CacheLocationConfig.c.erb +35 -22
- data/ext/nginx/Configuration.c +402 -236
- data/ext/nginx/Configuration.h +12 -5
- data/ext/nginx/ConfigurationCommands.c +35 -15
- data/ext/nginx/ConfigurationCommands.c.erb +4 -4
- data/ext/nginx/ConfigurationFields.h +9 -5
- data/ext/nginx/ConfigurationFields.h.erb +3 -1
- data/ext/nginx/ContentHandler.c +393 -362
- data/ext/nginx/CreateLocationConfig.c +8 -4
- data/ext/nginx/CreateLocationConfig.c.erb +8 -3
- data/ext/nginx/MergeLocationConfig.c +36 -6
- data/ext/nginx/MergeLocationConfig.c.erb +42 -1
- data/ext/nginx/ngx_http_passenger_module.c +28 -15
- data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
- data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
- data/ext/oxt/implementation.cpp +92 -20
- data/ext/oxt/thread.hpp +5 -0
- data/ext/ruby/extconf.rb +3 -6
- data/ext/ruby/passenger_native_support.c +13 -40
- data/helper-scripts/download_binaries/extconf.rb +4 -4
- data/helper-scripts/meteor-loader.rb +12 -112
- data/helper-scripts/node-loader.js +3 -91
- data/helper-scripts/rack-loader.rb +13 -14
- data/helper-scripts/rack-preloader.rb +16 -17
- data/helper-scripts/wsgi-loader.py +11 -7
- data/lib/phusion_passenger.rb +100 -79
- data/lib/phusion_passenger/abstract_installer.rb +28 -3
- data/lib/phusion_passenger/admin_tools.rb +3 -3
- data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
- data/lib/phusion_passenger/apache2/config_options.rb +72 -22
- data/lib/phusion_passenger/common_library.rb +79 -14
- data/lib/phusion_passenger/config/about_command.rb +17 -23
- data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
- data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
- data/lib/phusion_passenger/config/command.rb +1 -4
- data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
- data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
- data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
- data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
- data/lib/phusion_passenger/config/installation_utils.rb +241 -0
- data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
- data/lib/phusion_passenger/config/main.rb +43 -14
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
- data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
- data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
- data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
- data/lib/phusion_passenger/config/utils.rb +64 -39
- data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
- data/lib/phusion_passenger/constants.rb +27 -6
- data/lib/phusion_passenger/debug_logging.rb +32 -15
- data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
- data/lib/phusion_passenger/message_client.rb +21 -22
- data/lib/phusion_passenger/native_support.rb +26 -31
- data/lib/phusion_passenger/nginx/config_options.rb +32 -19
- data/lib/phusion_passenger/packaging.rb +7 -3
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
- data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
- data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
- data/lib/phusion_passenger/request_handler.rb +47 -82
- data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
- data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
- data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
- data/lib/phusion_passenger/standalone/command.rb +27 -275
- data/lib/phusion_passenger/standalone/command2.rb +292 -0
- data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
- data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
- data/lib/phusion_passenger/standalone/main.rb +69 -71
- data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
- data/lib/phusion_passenger/standalone/start_command.rb +406 -467
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
- data/lib/phusion_passenger/standalone/status_command.rb +64 -23
- data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
- data/lib/phusion_passenger/standalone/version_command.rb +1 -5
- data/lib/phusion_passenger/utils.rb +0 -4
- data/lib/phusion_passenger/utils/json.rb +70 -4
- data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
- data/lib/phusion_passenger/utils/tee_input.rb +3 -3
- data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
- data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
- data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
- data/packaging/rpm/setup-system +2 -1
- data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
- data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
- data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
- data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
- data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
- data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
- data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
- data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
- data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
- data/resources/templates/standalone/config.erb +14 -16
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
- data/test/.rspec +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
- data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
- data/test/cxx/BufferedIOTest.cpp +40 -40
- data/test/cxx/CxxTestMain.cpp +4 -22
- data/test/cxx/DataStructures/LStringTest.cpp +275 -0
- data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
- data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
- data/test/cxx/MessageServerTest.cpp +62 -55
- data/test/cxx/RequestHandlerTest.cpp +26 -27
- data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
- data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
- data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
- data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
- data/test/cxx/ServerKit/ServerTest.cpp +408 -0
- data/test/cxx/TestSupport.cpp +51 -15
- data/test/cxx/TestSupport.h +31 -21
- data/test/cxx/UnionStationTest.cpp +121 -122
- data/test/cxx/UtilsTest.cpp +9 -33
- data/test/integration_tests/apache2_tests.rb +65 -27
- data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
- data/test/integration_tests/native_packaging_spec.rb +32 -17
- data/test/integration_tests/nginx_tests.rb +28 -10
- data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
- data/test/integration_tests/standalone_tests.rb +232 -169
- data/test/ruby/debug_logging_spec.rb +44 -40
- data/test/ruby/rails3.0/preloader_spec.rb +1 -1
- data/test/ruby/rails3.1/preloader_spec.rb +1 -1
- data/test/ruby/rails3.2/preloader_spec.rb +1 -1
- data/test/ruby/rails4.0/preloader_spec.rb +1 -1
- data/test/ruby/rails4.1/preloader_spec.rb +1 -1
- data/test/ruby/request_handler_spec.rb +62 -24
- data/test/ruby/shared/loader_sharedspec.rb +10 -9
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
- data/test/ruby/spec_helper.rb +2 -11
- data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
- data/test/ruby/union_station_spec.rb +45 -40
- data/test/ruby/utils/tee_input_spec.rb +5 -5
- data/test/ruby/utils_spec.rb +3 -39
- data/test/stub/apache2/httpd.conf.erb +5 -2
- data/test/stub/nginx/nginx.conf.erb +3 -1
- data/test/support/apache2_controller.rb +25 -25
- data/test/support/nginx_controller.rb +14 -14
- data/test/support/test_helper.rb +74 -75
- metadata +439 -643
- metadata.gz.asc +7 -7
- data/ext/common/MultiLibeio.cpp +0 -204
- data/ext/common/MultiLibeio.h +0 -67
- data/ext/common/ServerInstanceDir.h +0 -402
- data/ext/common/Utils/Base64.cpp +0 -143
- data/ext/common/Utils/Base64.h +0 -83
- data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
- data/ext/common/Utils/PriorityQueue.h +0 -54
- data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
- data/ext/common/Utils/fib.c +0 -699
- data/ext/common/Utils/fib.h +0 -101
- data/ext/common/Utils/fibpriv.h +0 -67
- data/ext/common/agents/EnvPrinter.c +0 -16
- data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
- data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
- data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
- data/ext/common/agents/SpawnPreparer.cpp +0 -206
- data/ext/common/agents/TempDirToucher.c +0 -383
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
- data/helper-scripts/classic-rails-loader.rb +0 -166
- data/helper-scripts/classic-rails-preloader.rb +0 -193
- data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
- data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
- data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
- data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
- data/lib/phusion_passenger/standalone/config_file.rb +0 -119
- data/lib/phusion_passenger/standalone/help_command.rb +0 -57
- data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
- data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
- data/lib/phusion_passenger/standalone/utils.rb +0 -58
- data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
- data/packaging/debian/LICENSE.md +0 -19
- data/packaging/debian/README.md +0 -320
- data/packaging/debian/Vagrantfile +0 -25
- data/packaging/debian/build +0 -210
- data/packaging/debian/debian_specs/nginx/changelog +0 -1989
- data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
- data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
- data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
- data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
- data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
- data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
- data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
- data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
- data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
- data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
- data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
- data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
- data/packaging/debian/debian_specs/nginx/control.erb +0 -226
- data/packaging/debian/debian_specs/nginx/copyright +0 -196
- data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
- data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
- data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
- data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
- data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
- data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
- data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
- data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
- data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
- data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
- data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
- data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
- data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
- data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
- data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
- data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
- data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
- data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
- data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
- data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
- data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
- data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
- data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
- data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
- data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
- data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
- data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
- data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
- data/packaging/debian/debian_specs/nginx/patches/series +0 -1
- data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
- data/packaging/debian/debian_specs/nginx/source/format +0 -1
- data/packaging/debian/debian_specs/nginx/tests/control +0 -4
- data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
- data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
- data/packaging/debian/debian_specs/nginx/watch +0 -3
- data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger/changelog +0 -316
- data/packaging/debian/debian_specs/passenger/compat +0 -1
- data/packaging/debian/debian_specs/passenger/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger/copyright +0 -385
- data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
- data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
- data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
- data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
- data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
- data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
- data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
- data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger/source/format +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
- data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
- data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
- data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
- data/packaging/debian/docker_images/Makefile +0 -38
- data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
- data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
- data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
- data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
- data/packaging/debian/docker_images/buildbox/install.sh +0 -85
- data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
- data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
- data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
- data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
- data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
- data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
- data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
- data/packaging/debian/internal/build/Rakefile +0 -235
- data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
- data/packaging/debian/internal/build/build-source-package.rb +0 -121
- data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
- data/packaging/debian/internal/build/rakefile_support.rb +0 -96
- data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
- data/packaging/debian/internal/build/setup-environment.sh +0 -29
- data/packaging/debian/internal/lib/distro_info.rb +0 -82
- data/packaging/debian/internal/lib/distro_info.sh +0 -303
- data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
- data/packaging/debian/internal/lib/library.sh +0 -83
- data/packaging/debian/internal/lib/preprocessor.rb +0 -173
- data/packaging/debian/internal/lib/tracking.rb +0 -95
- data/packaging/debian/internal/lib/tracking_category.rb +0 -45
- data/packaging/debian/internal/lib/tracking_database.rb +0 -132
- data/packaging/debian/internal/lib/tracking_task.rb +0 -148
- data/packaging/debian/internal/lib/utils.rb +0 -78
- data/packaging/debian/internal/publish/Rakefile +0 -97
- data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/preinit.sh +0 -7
- data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
- data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
- data/packaging/debian/internal/scripts/initccache.sh +0 -35
- data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
- data/packaging/debian/internal/scripts/my_init +0 -340
- data/packaging/debian/internal/scripts/pin_certificates +0 -34
- data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
- data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
- data/packaging/debian/internal/scripts/setuser +0 -31
- data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
- data/packaging/debian/internal/shell/preinit.sh +0 -28
- data/packaging/debian/internal/shell/sudoers.conf +0 -1
- data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
- data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
- data/packaging/debian/internal/test/apache/vhost.conf +0 -17
- data/packaging/debian/internal/test/misc/config.json +0 -15
- data/packaging/debian/internal/test/misc/hosts.conf +0 -4
- data/packaging/debian/internal/test/misc/init.sh +0 -25
- data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
- data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
- data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
- data/packaging/debian/internal/test/misc/test_support.rb +0 -61
- data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
- data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
- data/packaging/debian/internal/test/test.sh +0 -141
- data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
- data/packaging/debian/jenkins/publish/publish.sh +0 -69
- data/packaging/debian/jenkins/test/test.sh +0 -63
- data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
- data/packaging/debian/publish +0 -172
- data/packaging/debian/shell +0 -116
- data/packaging/debian/test +0 -142
- data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
- data/test/cxx/Base64Test.cpp +0 -50
- data/test/cxx/FileBackedPipeTest.cpp +0 -626
- data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
- data/test/cxx/ScgiRequestParserTest.cpp +0 -423
- data/test/cxx/ServerInstanceDirTest.cpp +0 -175
- data/test/ruby/admin_tools_spec.rb +0 -360
- data/test/ruby/classic_rails/loader_spec.rb +0 -46
- data/test/ruby/classic_rails/preloader_spec.rb +0 -52
- data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
- data/test/stub/rails2.3/Rakefile +0 -10
- data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
- data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
- data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
- data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
- data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
- data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
- data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
- data/test/stub/rails2.3/config/boot.rb +0 -110
- data/test/stub/rails2.3/config/database.yml +0 -19
- data/test/stub/rails2.3/config/environment.rb +0 -62
- data/test/stub/rails2.3/config/environments/development.rb +0 -17
- data/test/stub/rails2.3/config/environments/production.rb +0 -18
- data/test/stub/rails2.3/config/environments/staging.rb +0 -18
- data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
- data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails2.3/config/routes.rb +0 -35
- data/test/stub/rails2.3/log/.gitignore +0 -1
- data/test/stub/rails2.3/public/.gitignore +0 -1
- data/test/stub/rails2.3/script/about +0 -3
- data/test/stub/rails2.3/script/console +0 -3
- data/test/stub/rails2.3/script/dbconsole +0 -3
- data/test/stub/rails2.3/script/destroy +0 -3
- data/test/stub/rails2.3/script/generate +0 -3
- data/test/stub/rails2.3/script/performance/benchmarker +0 -3
- data/test/stub/rails2.3/script/performance/profiler +0 -3
- data/test/stub/rails2.3/script/performance/request +0 -3
- data/test/stub/rails2.3/script/plugin +0 -3
- data/test/stub/rails2.3/script/process/inspector +0 -3
- data/test/stub/rails2.3/script/process/reaper +0 -3
- data/test/stub/rails2.3/script/process/spawner +0 -3
- data/test/stub/rails2.3/script/runner +0 -3
- data/test/stub/rails2.3/script/server +0 -3
- data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2011-
|
3
|
+
* Copyright (c) 2011-2014 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -27,14 +27,17 @@
|
|
27
27
|
|
28
28
|
#include <boost/thread.hpp>
|
29
29
|
#include <boost/shared_ptr.hpp>
|
30
|
+
#include <boost/intrusive_ptr.hpp>
|
30
31
|
#include <boost/function.hpp>
|
31
32
|
#include <oxt/tracable_exception.hpp>
|
32
33
|
#include <ResourceLocator.h>
|
33
34
|
#include <RandomGenerator.h>
|
35
|
+
#include <StaticString.h>
|
36
|
+
#include <MemoryKit/palloc.h>
|
37
|
+
#include <DataStructures/StringKeyTable.h>
|
34
38
|
#include <UnionStation/Core.h>
|
35
39
|
#include <UnionStation/Transaction.h>
|
36
40
|
#include <ApplicationPool2/Options.h>
|
37
|
-
#include <Utils/StringMap.h>
|
38
41
|
#include <Utils/VariantMap.h>
|
39
42
|
|
40
43
|
namespace tut {
|
@@ -52,6 +55,7 @@ class Pool;
|
|
52
55
|
class SuperGroup;
|
53
56
|
class Group;
|
54
57
|
class Process;
|
58
|
+
class Socket;
|
55
59
|
class Session;
|
56
60
|
|
57
61
|
/**
|
@@ -160,13 +164,25 @@ typedef boost::shared_ptr<Pool> PoolPtr;
|
|
160
164
|
typedef boost::shared_ptr<SuperGroup> SuperGroupPtr;
|
161
165
|
typedef boost::shared_ptr<Group> GroupPtr;
|
162
166
|
typedef boost::shared_ptr<Process> ProcessPtr;
|
163
|
-
typedef boost::
|
167
|
+
typedef boost::intrusive_ptr<Session> SessionPtr;
|
164
168
|
typedef boost::shared_ptr<tracable_exception> ExceptionPtr;
|
165
|
-
typedef
|
166
|
-
typedef boost::function<void (const SessionPtr &session, const ExceptionPtr &e)> GetCallback;
|
169
|
+
typedef StringKeyTable<SuperGroupPtr> SuperGroupMap;
|
167
170
|
typedef boost::function<void (const ProcessPtr &process, DisableResult result)> DisableCallback;
|
168
171
|
typedef boost::function<void ()> Callback;
|
169
172
|
|
173
|
+
struct GetCallback {
|
174
|
+
void (*func)(const SessionPtr &session, const ExceptionPtr &e, void *userData);
|
175
|
+
mutable void *userData;
|
176
|
+
|
177
|
+
void operator()(const SessionPtr &session, const ExceptionPtr &e) const {
|
178
|
+
func(session, e, userData);
|
179
|
+
}
|
180
|
+
|
181
|
+
static void call(GetCallback cb, const SessionPtr &session, const ExceptionPtr &e) {
|
182
|
+
cb(session, e);
|
183
|
+
}
|
184
|
+
};
|
185
|
+
|
170
186
|
struct GetWaiter {
|
171
187
|
Options options;
|
172
188
|
GetCallback callback;
|
@@ -188,36 +204,36 @@ struct Ticket {
|
|
188
204
|
|
189
205
|
struct SpawnerConfig {
|
190
206
|
// Used by error pages and hooks.
|
191
|
-
ResourceLocator resourceLocator;
|
207
|
+
ResourceLocator *resourceLocator;
|
192
208
|
const VariantMap *agentsOptions;
|
193
209
|
|
194
210
|
// Used for Union Station logging.
|
195
211
|
UnionStation::CorePtr unionStationCore;
|
196
212
|
|
197
213
|
// Used by SmartSpawner and DirectSpawner.
|
198
|
-
/** A random generator to use. */
|
199
214
|
RandomGeneratorPtr randomGenerator;
|
215
|
+
string instanceDir;
|
200
216
|
|
201
217
|
// Used by DummySpawner and SpawnerFactory.
|
202
218
|
unsigned int concurrency;
|
203
219
|
unsigned int spawnerCreationSleepTime;
|
204
220
|
unsigned int spawnTime;
|
205
221
|
|
206
|
-
SpawnerConfig(
|
207
|
-
|
208
|
-
|
209
|
-
const VariantMap *_agentsOptions = NULL)
|
210
|
-
: resourceLocator(_resourceLocator),
|
211
|
-
agentsOptions(_agentsOptions),
|
212
|
-
unionStationCore(_unionStationCore),
|
222
|
+
SpawnerConfig()
|
223
|
+
: resourceLocator(NULL),
|
224
|
+
agentsOptions(NULL),
|
213
225
|
concurrency(1),
|
214
226
|
spawnerCreationSleepTime(0),
|
215
227
|
spawnTime(0)
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
228
|
+
{ }
|
229
|
+
|
230
|
+
void finalize() {
|
231
|
+
TRACE_POINT();
|
232
|
+
if (resourceLocator == NULL) {
|
233
|
+
throw RuntimeException("ResourceLocator not initialized");
|
234
|
+
}
|
235
|
+
if (randomGenerator == NULL) {
|
236
|
+
randomGenerator = boost::make_shared<RandomGenerator>();
|
221
237
|
}
|
222
238
|
}
|
223
239
|
};
|
@@ -228,6 +244,7 @@ ExceptionPtr copyException(const tracable_exception &e);
|
|
228
244
|
void rethrowException(const ExceptionPtr &e);
|
229
245
|
void processAndLogNewSpawnException(SpawnException &e, const Options &options,
|
230
246
|
const SpawnerConfigPtr &config);
|
247
|
+
void recreateString(psg_pool_t *pool, StaticString &str);
|
231
248
|
|
232
249
|
} // namespace ApplicationPool2
|
233
250
|
} // namespace Passenger
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2011-
|
3
|
+
* Copyright (c) 2011-2014 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#define _PASSENGER_APPLICATION_POOL2_DIRECT_SPAWNER_H_
|
27
27
|
|
28
28
|
#include <ApplicationPool2/Spawner.h>
|
29
|
+
#include <Constants.h>
|
29
30
|
#include <limits.h> // for PTHREAD_STACK_MIN
|
30
31
|
#include <pthread.h>
|
31
32
|
|
@@ -111,10 +112,10 @@ private:
|
|
111
112
|
shared_array<const char *> &args) const
|
112
113
|
{
|
113
114
|
vector<string> startCommandArgs;
|
114
|
-
string
|
115
|
+
string agentFilename = config->resourceLocator->findSupportBinary(AGENT_EXE);
|
115
116
|
vector<string> command;
|
116
117
|
|
117
|
-
split(options.getStartCommand(config->resourceLocator), '\t', startCommandArgs);
|
118
|
+
split(options.getStartCommand(*config->resourceLocator), '\t', startCommandArgs);
|
118
119
|
if (startCommandArgs.empty()) {
|
119
120
|
throw RuntimeException("No startCommand given");
|
120
121
|
}
|
@@ -126,9 +127,10 @@ private:
|
|
126
127
|
command.push_back("exec \"$@\"");
|
127
128
|
command.push_back("SpawnPreparerShell");
|
128
129
|
} else {
|
129
|
-
command.push_back(
|
130
|
+
command.push_back(agentFilename);
|
130
131
|
}
|
131
|
-
command.push_back(
|
132
|
+
command.push_back(agentFilename);
|
133
|
+
command.push_back("spawn-preparer");
|
132
134
|
command.push_back(preparation.appRoot);
|
133
135
|
command.push_back(serializeEnvvarsFromPoolOptions(options));
|
134
136
|
command.push_back(startCommandArgs[0]);
|
@@ -144,14 +146,11 @@ private:
|
|
144
146
|
}
|
145
147
|
|
146
148
|
public:
|
147
|
-
DirectSpawner(const
|
148
|
-
const SpawnerConfigPtr &_config)
|
149
|
+
DirectSpawner(const SpawnerConfigPtr &_config)
|
149
150
|
: Spawner(_config)
|
150
|
-
|
151
|
-
generation = _generation;
|
152
|
-
}
|
151
|
+
{ }
|
153
152
|
|
154
|
-
virtual
|
153
|
+
virtual SpawnObject spawn(const Options &options) {
|
155
154
|
TRACE_POINT();
|
156
155
|
this_thread::disable_interruption di;
|
157
156
|
this_thread::disable_syscall_interruption dsi;
|
@@ -222,17 +221,17 @@ public:
|
|
222
221
|
details.options = &options;
|
223
222
|
details.debugDir = debugDir;
|
224
223
|
|
225
|
-
|
224
|
+
SpawnObject object;
|
226
225
|
{
|
227
226
|
this_thread::restore_interruption ri(di);
|
228
227
|
this_thread::restore_syscall_interruption rsi(dsi);
|
229
|
-
|
228
|
+
object = negotiateSpawn(details);
|
230
229
|
}
|
231
|
-
detachProcess(process->pid);
|
230
|
+
detachProcess(object.process->pid);
|
232
231
|
guard.clear();
|
233
232
|
P_DEBUG("Process spawning done: appRoot=" << options.appRoot <<
|
234
|
-
", pid=" << process->pid);
|
235
|
-
return
|
233
|
+
", pid=" << object.process->pid);
|
234
|
+
return boost::move(object);
|
236
235
|
}
|
237
236
|
}
|
238
237
|
};
|
@@ -50,24 +50,25 @@ public:
|
|
50
50
|
cleanCount = 0;
|
51
51
|
}
|
52
52
|
|
53
|
-
virtual
|
53
|
+
virtual SpawnObject spawn(const Options &options) {
|
54
54
|
TRACE_POINT();
|
55
55
|
possiblyRaiseInternalError(options);
|
56
56
|
|
57
57
|
SocketPair adminSocket = createUnixSocketPair();
|
58
|
-
|
59
|
-
sockets
|
58
|
+
SocketList sockets;
|
59
|
+
sockets.add("main", "tcp://127.0.0.1:1234", "session", config->concurrency);
|
60
60
|
syscalls::usleep(config->spawnTime);
|
61
61
|
|
62
62
|
boost::lock_guard<boost::mutex> l(lock);
|
63
63
|
count++;
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
SpawnObject object;
|
65
|
+
string gupid = "gupid-" + toString(count);
|
66
|
+
object.process = boost::make_shared<Process>(
|
67
|
+
(pid_t) count, gupid,
|
67
68
|
adminSocket.second, FileDescriptor(), sockets,
|
68
69
|
SystemTime::getUsec(), SystemTime::getUsec());
|
69
|
-
process->dummy = true;
|
70
|
-
return
|
70
|
+
object.process->dummy = true;
|
71
|
+
return boost::move(object);
|
71
72
|
}
|
72
73
|
|
73
74
|
virtual bool cleanable() const {
|
@@ -74,7 +74,7 @@ public:
|
|
74
74
|
params.set("ENVIRONMENT", options.environment);
|
75
75
|
params.set("MESSAGE", message);
|
76
76
|
params.set("IS_RUBY_APP",
|
77
|
-
(options.appType == "
|
77
|
+
(options.appType == "rack")
|
78
78
|
? "true" : "false");
|
79
79
|
if (e != NULL) {
|
80
80
|
params.set("TITLE", "Web application could not be started");
|
@@ -34,9 +34,12 @@
|
|
34
34
|
#include <boost/foreach.hpp>
|
35
35
|
#include <boost/shared_ptr.hpp>
|
36
36
|
#include <boost/make_shared.hpp>
|
37
|
+
#include <boost/container/vector.hpp>
|
38
|
+
#include <boost/atomic.hpp>
|
37
39
|
#include <oxt/macros.hpp>
|
38
40
|
#include <oxt/thread.hpp>
|
39
41
|
#include <oxt/dynamic_thread_group.hpp>
|
42
|
+
#include <sys/stat.h>
|
40
43
|
#include <cstdlib>
|
41
44
|
#include <cassert>
|
42
45
|
#include <ApplicationPool2/Common.h>
|
@@ -44,10 +47,9 @@
|
|
44
47
|
#include <ApplicationPool2/SpawnerFactory.h>
|
45
48
|
#include <ApplicationPool2/Process.h>
|
46
49
|
#include <ApplicationPool2/Options.h>
|
50
|
+
#include <MemoryKit/palloc.h>
|
47
51
|
#include <Hooks.h>
|
48
52
|
#include <Utils.h>
|
49
|
-
#include <Utils/CachedFileStat.hpp>
|
50
|
-
#include <Utils/FileChangeChecker.h>
|
51
53
|
#include <Utils/SmallVector.h>
|
52
54
|
|
53
55
|
namespace Passenger {
|
@@ -93,22 +95,6 @@ public:
|
|
93
95
|
{ }
|
94
96
|
};
|
95
97
|
|
96
|
-
/**
|
97
|
-
* Protects `lifeStatus`.
|
98
|
-
*/
|
99
|
-
mutable boost::mutex lifetimeSyncher;
|
100
|
-
/**
|
101
|
-
* A Group object progresses through a life.
|
102
|
-
*
|
103
|
-
* Do not access directly, always use `isAlive()`/`getLifeStatus()` or
|
104
|
-
* through `lifetimeSyncher`.
|
105
|
-
*
|
106
|
-
* Invariant:
|
107
|
-
* if lifeStatus != ALIVE:
|
108
|
-
* enabledCount == 0
|
109
|
-
* disablingCount == 0
|
110
|
-
* disabledCount == 0
|
111
|
-
*/
|
112
98
|
enum LifeStatus {
|
113
99
|
/** Up and operational. */
|
114
100
|
ALIVE,
|
@@ -124,7 +110,7 @@ public:
|
|
124
110
|
* from this Group anymore.
|
125
111
|
*/
|
126
112
|
SHUT_DOWN
|
127
|
-
}
|
113
|
+
};
|
128
114
|
|
129
115
|
/**
|
130
116
|
* A back reference to the containing SuperGroup. Should never
|
@@ -132,11 +118,9 @@ public:
|
|
132
118
|
* Groups.
|
133
119
|
* Read-only; only set during initialization.
|
134
120
|
*/
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
string restartFile;
|
139
|
-
string alwaysRestartFile;
|
121
|
+
SuperGroup *superGroup;
|
122
|
+
time_t lastRestartFileMtime;
|
123
|
+
time_t lastRestartFileCheckTime;
|
140
124
|
|
141
125
|
/** Number of times a restart has been initiated so far. This is incremented immediately
|
142
126
|
* in Group::restart(), and is used to abort the restarter thread that was active at the
|
@@ -150,6 +134,19 @@ public:
|
|
150
134
|
* if processesBeingSpawned > 0: m_spawning
|
151
135
|
*/
|
152
136
|
short processesBeingSpawned;
|
137
|
+
/**
|
138
|
+
* A Group object progresses through a life.
|
139
|
+
*
|
140
|
+
* You should not access this directly. You should use `isAlive()`/`getLifeStatus()`.
|
141
|
+
*
|
142
|
+
* Invariant:
|
143
|
+
* if lifeStatus != ALIVE:
|
144
|
+
* enabledCount == 0
|
145
|
+
* disablingCount == 0
|
146
|
+
* disabledCount == 0
|
147
|
+
* nEnabledProcessesTotallyBusy == 0
|
148
|
+
*/
|
149
|
+
boost::atomic<boost::uint8_t> lifeStatus;
|
153
150
|
/**
|
154
151
|
* Whether the spawner thread is currently working. Note that even
|
155
152
|
* if it's working, it doesn't necessarily mean that processes are
|
@@ -158,7 +155,7 @@ public:
|
|
158
155
|
* the newly-spawned process to the group. During that time it's not
|
159
156
|
* technically spawning anything.
|
160
157
|
*/
|
161
|
-
bool m_spawning;
|
158
|
+
bool m_spawning: 1;
|
162
159
|
/** Whether a non-rolling restart is in progress (i.e. whether spawnThreadRealMain()
|
163
160
|
* is at work). While it is in progress, it is not possible to signal the desire to
|
164
161
|
* spawn new process. If spawning was already in progress when the restart was initiated,
|
@@ -169,11 +166,16 @@ public:
|
|
169
166
|
* Invariant:
|
170
167
|
* if m_restarting: processesBeingSpawned == 0
|
171
168
|
*/
|
172
|
-
bool m_restarting;
|
169
|
+
bool m_restarting: 1;
|
170
|
+
bool alwaysRestartFileExists: 1;
|
173
171
|
|
174
172
|
/** Contains the spawn loop thread and the restarter thread. */
|
175
173
|
dynamic_thread_group interruptableThreads;
|
176
174
|
|
175
|
+
string restartFile;
|
176
|
+
string alwaysRestartFile;
|
177
|
+
ProcessPtr nullProcess;
|
178
|
+
|
177
179
|
/** This timer scans `detachedProcesses` periodically to see
|
178
180
|
* whether any of the Processes can be shut down.
|
179
181
|
*/
|
@@ -183,28 +185,18 @@ public:
|
|
183
185
|
GroupPtr selfPointer;
|
184
186
|
|
185
187
|
|
186
|
-
static void
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
static void _onSessionClose(Session *session) {
|
193
|
-
ProcessPtr process = session->getProcess();
|
194
|
-
assert(process != NULL);
|
195
|
-
process->getGroup()->onSessionClose(process, session);
|
196
|
-
}
|
197
|
-
|
198
|
-
static string generateSecret(const SuperGroupPtr &superGroup);
|
199
|
-
static string generateUuid(const SuperGroupPtr &superGroup);
|
200
|
-
void onSessionInitiateFailure(const ProcessPtr &process, Session *session);
|
201
|
-
void onSessionClose(const ProcessPtr &process, Session *session);
|
188
|
+
static void generateSecret(const SuperGroup *superGroup, char *secret);
|
189
|
+
static string generateUuid(const SuperGroup *superGroup);
|
190
|
+
static void _onSessionInitiateFailure(Session *session);
|
191
|
+
static void _onSessionClose(Session *session);
|
192
|
+
OXT_FORCE_INLINE void onSessionInitiateFailure(Process *process, Session *session);
|
193
|
+
OXT_FORCE_INLINE void onSessionClose(Process *process, Session *session);
|
202
194
|
|
203
195
|
/** Returns whether it is allowed to perform a new OOBW in this group. */
|
204
196
|
bool oobwAllowed() const;
|
205
197
|
/** Returns whether a new OOBW should be initiated for this process. */
|
206
|
-
bool shouldInitiateOobw(
|
207
|
-
void maybeInitiateOobw(
|
198
|
+
bool shouldInitiateOobw(Process *process) const;
|
199
|
+
void maybeInitiateOobw(Process *process);
|
208
200
|
void lockAndMaybeInitiateOobw(const ProcessPtr &process, DisableResult result, GroupPtr self);
|
209
201
|
void initiateOobw(const ProcessPtr &process);
|
210
202
|
void spawnThreadOOBWRequest(GroupPtr self, ProcessPtr process);
|
@@ -214,17 +206,20 @@ public:
|
|
214
206
|
unsigned int restartsInitiated);
|
215
207
|
void spawnThreadRealMain(const SpawnerPtr &spawner, const Options &options,
|
216
208
|
unsigned int restartsInitiated);
|
217
|
-
void finalizeRestart(GroupPtr self, Options
|
218
|
-
|
219
|
-
|
209
|
+
void finalizeRestart(GroupPtr self, Options options, RestartMethod method,
|
210
|
+
SpawnerFactoryPtr spawnerFactory, unsigned int restartsInitiated,
|
211
|
+
boost::container::vector<Callback> postLockActions);
|
220
212
|
void startCheckingDetachedProcesses(bool immediately);
|
221
213
|
void detachedProcessesCheckerMain(GroupPtr self);
|
222
214
|
void wakeUpGarbageCollector();
|
215
|
+
bool selfCheckingEnabled() const;
|
223
216
|
bool poolAtFullCapacity() const;
|
224
217
|
bool anotherGroupIsWaitingForCapacity() const;
|
225
|
-
|
226
|
-
ProcessPtr poolForceFreeCapacity(const Group *exclude, vector<Callback> &postLockActions);
|
218
|
+
Group *findOtherGroupWaitingForCapacity() const;
|
219
|
+
ProcessPtr poolForceFreeCapacity(const Group *exclude, boost::container::vector<Callback> &postLockActions);
|
227
220
|
bool testOverflowRequestQueue() const;
|
221
|
+
void callAbortLongRunningConnectionsCallback(const ProcessPtr &process);
|
222
|
+
psg_pool_t *getPallocPool() const;
|
228
223
|
const ResourceLocator &getResourceLocator() const;
|
229
224
|
void runAttachHooks(const ProcessPtr process) const;
|
230
225
|
void runDetachHooks(const ProcessPtr process) const;
|
@@ -232,11 +227,17 @@ public:
|
|
232
227
|
|
233
228
|
void verifyInvariants() const {
|
234
229
|
// !a || b: logical equivalent of a IMPLIES b.
|
230
|
+
#ifndef NDEBUG
|
231
|
+
if (!selfCheckingEnabled()) {
|
232
|
+
return;
|
233
|
+
}
|
234
|
+
|
235
|
+
LifeStatus lifeStatus = (LifeStatus) this->lifeStatus.load(boost::memory_order_relaxed);
|
235
236
|
|
236
237
|
assert(enabledCount >= 0);
|
237
238
|
assert(disablingCount >= 0);
|
238
239
|
assert(disabledCount >= 0);
|
239
|
-
assert(
|
240
|
+
assert(nEnabledProcessesTotallyBusy >= 0);
|
240
241
|
assert(!( enabledCount == 0 && disablingCount > 0 ) || ( processesBeingSpawned > 0) );
|
241
242
|
assert(!( !m_spawning ) || ( enabledCount > 0 || disablingCount == 0 ));
|
242
243
|
|
@@ -255,19 +256,28 @@ public:
|
|
255
256
|
assert(!( m_restarting ) || ( processesBeingSpawned == 0 ));
|
256
257
|
|
257
258
|
// Verify lifeStatus.
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
259
|
+
if (lifeStatus != ALIVE) {
|
260
|
+
assert(enabledCount == 0);
|
261
|
+
assert(disablingCount == 0);
|
262
|
+
assert(disabledCount == 0);
|
263
|
+
assert(nEnabledProcessesTotallyBusy == 0);
|
264
|
+
}
|
265
|
+
|
266
|
+
// Verify list sizes.
|
267
|
+
assert((int) enabledProcesses.size() == enabledCount);
|
268
|
+
assert((int) disablingProcesses.size() == disablingCount);
|
269
|
+
assert((int) disabledProcesses.size() == disabledCount);
|
270
|
+
assert(nEnabledProcessesTotallyBusy <= enabledCount);
|
271
|
+
#endif
|
262
272
|
}
|
263
273
|
|
264
274
|
void verifyExpensiveInvariants() const {
|
265
275
|
#ifndef NDEBUG
|
266
276
|
// !a || b: logical equivalent of a IMPLIES b.
|
267
277
|
|
268
|
-
|
269
|
-
|
270
|
-
|
278
|
+
if (!selfCheckingEnabled()) {
|
279
|
+
return;
|
280
|
+
}
|
271
281
|
|
272
282
|
ProcessList::const_iterator it, end;
|
273
283
|
|
@@ -275,7 +285,6 @@ public:
|
|
275
285
|
for (it = enabledProcesses.begin(); it != end; it++) {
|
276
286
|
const ProcessPtr &process = *it;
|
277
287
|
assert(process->enabled == Process::ENABLED);
|
278
|
-
assert(process->pqHandle != NULL);
|
279
288
|
assert(process->isAlive());
|
280
289
|
assert(process->oobwStatus == Process::OOBW_NOT_ACTIVE
|
281
290
|
|| process->oobwStatus == Process::OOBW_REQUESTED);
|
@@ -285,7 +294,6 @@ public:
|
|
285
294
|
for (it = disablingProcesses.begin(); it != end; it++) {
|
286
295
|
const ProcessPtr &process = *it;
|
287
296
|
assert(process->enabled == Process::DISABLING);
|
288
|
-
assert(process->pqHandle == NULL);
|
289
297
|
assert(process->isAlive());
|
290
298
|
assert(process->oobwStatus == Process::OOBW_NOT_ACTIVE
|
291
299
|
|| process->oobwStatus == Process::OOBW_IN_PROGRESS);
|
@@ -295,7 +303,6 @@ public:
|
|
295
303
|
for (it = disabledProcesses.begin(); it != end; it++) {
|
296
304
|
const ProcessPtr &process = *it;
|
297
305
|
assert(process->enabled == Process::DISABLED);
|
298
|
-
assert(process->pqHandle == NULL);
|
299
306
|
assert(process->isAlive());
|
300
307
|
assert(process->oobwStatus == Process::OOBW_NOT_ACTIVE
|
301
308
|
|| process->oobwStatus == Process::OOBW_IN_PROGRESS);
|
@@ -303,7 +310,6 @@ public:
|
|
303
310
|
|
304
311
|
foreach (const ProcessPtr &process, detachedProcesses) {
|
305
312
|
assert(process->enabled == Process::DETACHED);
|
306
|
-
assert(process->pqHandle == NULL);
|
307
313
|
}
|
308
314
|
#endif
|
309
315
|
}
|
@@ -322,18 +328,14 @@ public:
|
|
322
328
|
#endif
|
323
329
|
|
324
330
|
/**
|
325
|
-
*
|
326
|
-
* Values will be persisted into `destination`. Or if it's NULL, into `this->options`.
|
331
|
+
* Sets options for this Group. Called at creation time and at restart time.
|
327
332
|
*/
|
328
|
-
void resetOptions(const Options &newOptions
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
destination->clearPerRequestFields();
|
335
|
-
destination->groupSecret = secret;
|
336
|
-
destination->groupUuid = uuid;
|
333
|
+
void resetOptions(const Options &newOptions) {
|
334
|
+
options = newOptions;
|
335
|
+
options.persist(newOptions);
|
336
|
+
options.clearPerRequestFields();
|
337
|
+
options.groupSecret = StaticString(secret, SECRET_SIZE);
|
338
|
+
options.groupUuid = uuid;
|
337
339
|
}
|
338
340
|
|
339
341
|
/**
|
@@ -346,8 +348,8 @@ public:
|
|
346
348
|
options.maxPreloaderIdleTime = other.maxPreloaderIdleTime;
|
347
349
|
}
|
348
350
|
|
349
|
-
static void runAllActions(const vector<Callback> &actions) {
|
350
|
-
vector<Callback>::const_iterator it, end = actions.end();
|
351
|
+
static void runAllActions(const boost::container::vector<Callback> &actions) {
|
352
|
+
boost::container::vector<Callback>::const_iterator it, end = actions.end();
|
351
353
|
for (it = actions.begin(); it != end; it++) {
|
352
354
|
(*it)();
|
353
355
|
}
|
@@ -382,21 +384,21 @@ public:
|
|
382
384
|
RouteResult route(const Options &options) const {
|
383
385
|
if (OXT_LIKELY(enabledCount > 0)) {
|
384
386
|
if (options.stickySessionId == 0) {
|
385
|
-
|
386
|
-
|
387
|
+
Process *process = findProcessWithLowestBusyness(enabledProcesses);
|
388
|
+
if (process->canBeRoutedTo()) {
|
389
|
+
return RouteResult(process);
|
387
390
|
} else {
|
388
391
|
return RouteResult(NULL, true);
|
389
392
|
}
|
390
393
|
} else {
|
391
|
-
Process *process =
|
394
|
+
Process *process = findProcessWithStickySessionIdOrLowestBusyness(
|
395
|
+
options.stickySessionId);
|
392
396
|
if (process != NULL) {
|
393
397
|
if (process->canBeRoutedTo()) {
|
394
398
|
return RouteResult(process);
|
395
399
|
} else {
|
396
400
|
return RouteResult(NULL, false);
|
397
401
|
}
|
398
|
-
} else if (pqueue.top()->canBeRoutedTo()) {
|
399
|
-
return RouteResult(pqueue.top());
|
400
402
|
} else {
|
401
403
|
return RouteResult(NULL, true);
|
402
404
|
}
|
@@ -411,22 +413,23 @@ public:
|
|
411
413
|
}
|
412
414
|
}
|
413
415
|
|
414
|
-
SessionPtr newSession(Process *process) {
|
415
|
-
|
416
|
+
SessionPtr newSession(Process *process, unsigned long long now = 0) {
|
417
|
+
bool wasTotallyBusy = process->isTotallyBusy();
|
418
|
+
SessionPtr session = process->newSession(now);
|
416
419
|
session->onInitiateFailure = _onSessionInitiateFailure;
|
417
420
|
session->onClose = _onSessionClose;
|
418
421
|
if (process->enabled == Process::ENABLED) {
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
pqueue.erase(process->pqHandle);
|
422
|
+
enabledProcessBusynessLevels[process->index] = process->busyness();
|
423
|
+
if (!wasTotallyBusy && process->isTotallyBusy()) {
|
424
|
+
nEnabledProcessesTotallyBusy++;
|
423
425
|
}
|
424
|
-
process->pqHandle = pqueue.push(process, process->busyness());
|
425
426
|
}
|
426
427
|
return session;
|
427
428
|
}
|
428
429
|
|
429
|
-
bool pushGetWaiter(const Options &newOptions, const GetCallback &callback
|
430
|
+
bool pushGetWaiter(const Options &newOptions, const GetCallback &callback,
|
431
|
+
boost::container::vector<Callback> &postLockActions)
|
432
|
+
{
|
430
433
|
if (OXT_LIKELY(!testOverflowRequestQueue()
|
431
434
|
&& (newOptions.maxRequestQueueSize == 0
|
432
435
|
|| getWaitlist.size() < newOptions.maxRequestQueueSize)))
|
@@ -437,7 +440,8 @@ public:
|
|
437
440
|
return true;
|
438
441
|
} else {
|
439
442
|
P_WARN("Request queue is full. Returning an error");
|
440
|
-
|
443
|
+
postLockActions.push_back(boost::bind(GetCallback::call,
|
444
|
+
callback, SessionPtr(), boost::make_shared<RequestQueueFullException>()));
|
441
445
|
return false;
|
442
446
|
}
|
443
447
|
}
|
@@ -453,16 +457,46 @@ public:
|
|
453
457
|
return NULL;
|
454
458
|
}
|
455
459
|
|
460
|
+
Process *findProcessWithStickySessionIdOrLowestBusyness(unsigned int id) const {
|
461
|
+
int leastBusyProcessIndex = -1;
|
462
|
+
int lowestBusyness = 0;
|
463
|
+
unsigned int i, size = enabledProcessBusynessLevels.size();
|
464
|
+
const int *enabledProcessBusynessLevels = &this->enabledProcessBusynessLevels[0];
|
465
|
+
|
466
|
+
for (i = 0; i < size; i++) {
|
467
|
+
Process *process = enabledProcesses[i].get();
|
468
|
+
if (process->stickySessionId == id) {
|
469
|
+
return process;
|
470
|
+
} else if (leastBusyProcessIndex == -1 || enabledProcessBusynessLevels[i] < lowestBusyness) {
|
471
|
+
leastBusyProcessIndex = i;
|
472
|
+
lowestBusyness = enabledProcessBusynessLevels[i];
|
473
|
+
}
|
474
|
+
}
|
475
|
+
|
476
|
+
if (leastBusyProcessIndex == -1) {
|
477
|
+
return NULL;
|
478
|
+
} else {
|
479
|
+
return enabledProcesses[leastBusyProcessIndex].get();
|
480
|
+
}
|
481
|
+
}
|
482
|
+
|
456
483
|
Process *findProcessWithLowestBusyness(const ProcessList &processes) const {
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
484
|
+
if (processes.empty()) {
|
485
|
+
return NULL;
|
486
|
+
}
|
487
|
+
|
488
|
+
int leastBusyProcessIndex = -1;
|
489
|
+
int lowestBusyness = 0;
|
490
|
+
unsigned int i, size = enabledProcessBusynessLevels.size();
|
491
|
+
const int *enabledProcessBusynessLevels = &this->enabledProcessBusynessLevels[0];
|
492
|
+
|
493
|
+
for (i = 0; i < size; i++) {
|
494
|
+
if (leastBusyProcessIndex == -1 || enabledProcessBusynessLevels[i] < lowestBusyness) {
|
495
|
+
leastBusyProcessIndex = i;
|
496
|
+
lowestBusyness = enabledProcessBusynessLevels[i];
|
463
497
|
}
|
464
498
|
}
|
465
|
-
return
|
499
|
+
return enabledProcesses[leastBusyProcessIndex].get();
|
466
500
|
}
|
467
501
|
|
468
502
|
/**
|
@@ -471,13 +505,17 @@ public:
|
|
471
505
|
*/
|
472
506
|
void removeProcessFromList(const ProcessPtr &process, ProcessList &source) {
|
473
507
|
ProcessPtr p = process; // Keep an extra reference count just in case.
|
474
|
-
|
508
|
+
|
509
|
+
source.erase(source.begin() + process->index);
|
510
|
+
process->index = -1;
|
511
|
+
|
475
512
|
switch (process->enabled) {
|
476
513
|
case Process::ENABLED:
|
477
514
|
assert(&source == &enabledProcesses);
|
478
515
|
enabledCount--;
|
479
|
-
|
480
|
-
|
516
|
+
if (process->isTotallyBusy()) {
|
517
|
+
nEnabledProcessesTotallyBusy--;
|
518
|
+
}
|
481
519
|
break;
|
482
520
|
case Process::DISABLING:
|
483
521
|
assert(&source == &disablingProcesses);
|
@@ -493,6 +531,24 @@ public:
|
|
493
531
|
default:
|
494
532
|
P_BUG("Unknown 'enabled' state " << (int) process->enabled);
|
495
533
|
}
|
534
|
+
|
535
|
+
// Rebuild indices
|
536
|
+
ProcessList::iterator it, end = source.end();
|
537
|
+
unsigned int i = 0;
|
538
|
+
for (it = source.begin(); it != end; it++, i++) {
|
539
|
+
const ProcessPtr &process = *it;
|
540
|
+
process->index = i;
|
541
|
+
}
|
542
|
+
|
543
|
+
// Rebuild enabledProcessBusynessLevels
|
544
|
+
if (&source == &enabledProcesses) {
|
545
|
+
enabledProcessBusynessLevels.clear();
|
546
|
+
for (it = source.begin(); it != end; it++, i++) {
|
547
|
+
const ProcessPtr &process = *it;
|
548
|
+
enabledProcessBusynessLevels.push_back(process->busyness());
|
549
|
+
}
|
550
|
+
enabledProcessBusynessLevels.shrink_to_fit();
|
551
|
+
}
|
496
552
|
}
|
497
553
|
|
498
554
|
/**
|
@@ -503,11 +559,14 @@ public:
|
|
503
559
|
*/
|
504
560
|
void addProcessToList(const ProcessPtr &process, ProcessList &destination) {
|
505
561
|
destination.push_back(process);
|
506
|
-
process->
|
562
|
+
process->index = destination.size() - 1;
|
507
563
|
if (&destination == &enabledProcesses) {
|
508
564
|
process->enabled = Process::ENABLED;
|
509
|
-
process->pqHandle = pqueue.push(process.get(), process->busyness());
|
510
565
|
enabledCount++;
|
566
|
+
enabledProcessBusynessLevels.push_back(process->busyness());
|
567
|
+
if (process->isTotallyBusy()) {
|
568
|
+
nEnabledProcessesTotallyBusy++;
|
569
|
+
}
|
511
570
|
} else if (&destination == &disablingProcesses) {
|
512
571
|
process->enabled = Process::DISABLING;
|
513
572
|
disablingCount++;
|
@@ -518,7 +577,7 @@ public:
|
|
518
577
|
} else if (&destination == &detachedProcesses) {
|
519
578
|
assert(process->isAlive());
|
520
579
|
process->enabled = Process::DETACHED;
|
521
|
-
process
|
580
|
+
callAbortLongRunningConnectionsCallback(process);
|
522
581
|
} else {
|
523
582
|
P_BUG("Unknown destination list");
|
524
583
|
}
|
@@ -532,7 +591,7 @@ public:
|
|
532
591
|
return;
|
533
592
|
}
|
534
593
|
|
535
|
-
SmallVector<GetAction,
|
594
|
+
SmallVector<GetAction, 8> actions;
|
536
595
|
unsigned int i = 0;
|
537
596
|
bool done = false;
|
538
597
|
|
@@ -563,7 +622,7 @@ public:
|
|
563
622
|
}
|
564
623
|
}
|
565
624
|
|
566
|
-
void assignSessionsToGetWaiters(vector<Callback> &postLockActions) {
|
625
|
+
void assignSessionsToGetWaiters(boost::container::vector<Callback> &postLockActions) {
|
567
626
|
unsigned int i = 0;
|
568
627
|
bool done = false;
|
569
628
|
|
@@ -572,6 +631,7 @@ public:
|
|
572
631
|
RouteResult result = route(waiter.options);
|
573
632
|
if (result.process != NULL) {
|
574
633
|
postLockActions.push_back(boost::bind(
|
634
|
+
GetCallback::call,
|
575
635
|
waiter.callback,
|
576
636
|
newSession(result.process),
|
577
637
|
ExceptionPtr()));
|
@@ -585,7 +645,7 @@ public:
|
|
585
645
|
}
|
586
646
|
}
|
587
647
|
|
588
|
-
void enableAllDisablingProcesses(vector<Callback> &postLockActions) {
|
648
|
+
void enableAllDisablingProcesses(boost::container::vector<Callback> &postLockActions) {
|
589
649
|
P_DEBUG("Enabling all DISABLING processes with result DR_ERROR");
|
590
650
|
deque<DisableWaiter>::iterator it, end = disableWaitlist.end();
|
591
651
|
for (it = disableWaitlist.begin(); it != end; it++) {
|
@@ -604,7 +664,7 @@ public:
|
|
604
664
|
}
|
605
665
|
|
606
666
|
void removeFromDisableWaitlist(const ProcessPtr &p, DisableResult result,
|
607
|
-
vector<Callback> &postLockActions)
|
667
|
+
boost::container::vector<Callback> &postLockActions)
|
608
668
|
{
|
609
669
|
deque<DisableWaiter>::const_iterator it, end = disableWaitlist.end();
|
610
670
|
deque<DisableWaiter> newList;
|
@@ -620,7 +680,9 @@ public:
|
|
620
680
|
disableWaitlist = newList;
|
621
681
|
}
|
622
682
|
|
623
|
-
void clearDisableWaitlist(DisableResult result,
|
683
|
+
void clearDisableWaitlist(DisableResult result,
|
684
|
+
boost::container::vector<Callback> &postLockActions)
|
685
|
+
{
|
624
686
|
// This function may be called after processes in the disableWaitlist
|
625
687
|
// have been disabled or enabled, so do not assume any value for
|
626
688
|
// waiter.process->enabled in this function.
|
@@ -633,7 +695,8 @@ public:
|
|
633
695
|
}
|
634
696
|
|
635
697
|
bool shutdownCanFinish() const {
|
636
|
-
|
698
|
+
LifeStatus lifeStatus = (LifeStatus) this->lifeStatus.load(boost::memory_order_relaxed);
|
699
|
+
return lifeStatus == SHUTTING_DOWN
|
637
700
|
&& enabledCount == 0
|
638
701
|
&& disablingCount == 0
|
639
702
|
&& disabledCount == 0
|
@@ -647,9 +710,12 @@ public:
|
|
647
710
|
/** One of the post lock actions can potentially perform a long-running
|
648
711
|
* operation, so running them in a thread is advised.
|
649
712
|
*/
|
650
|
-
void finishShutdown(vector<Callback> &postLockActions) {
|
713
|
+
void finishShutdown(boost::container::vector<Callback> &postLockActions) {
|
651
714
|
TRACE_POINT();
|
652
|
-
|
715
|
+
#ifndef NDEBUG
|
716
|
+
LifeStatus lifeStatus = (LifeStatus) this->lifeStatus.load(boost::memory_order_relaxed);
|
717
|
+
P_ASSERT_EQ(lifeStatus, SHUTTING_DOWN);
|
718
|
+
#endif
|
653
719
|
P_DEBUG("Finishing shutdown of group " << name);
|
654
720
|
if (shutdownCallback) {
|
655
721
|
postLockActions.push_back(shutdownCallback);
|
@@ -657,21 +723,20 @@ public:
|
|
657
723
|
}
|
658
724
|
postLockActions.push_back(boost::bind(interruptAndJoinAllThreads,
|
659
725
|
shared_from_this()));
|
660
|
-
|
661
|
-
boost::lock_guard<boost::mutex> l(lifetimeSyncher);
|
662
|
-
lifeStatus = SHUT_DOWN;
|
663
|
-
}
|
726
|
+
this->lifeStatus.store(SHUT_DOWN, boost::memory_order_release);
|
664
727
|
selfPointer.reset();
|
665
728
|
}
|
666
729
|
|
667
730
|
public:
|
731
|
+
static const unsigned int SECRET_SIZE = 16;
|
732
|
+
|
668
733
|
Options options;
|
669
734
|
/** This name uniquely identifies this Group within its Pool. It can also be used as the display name. */
|
670
735
|
const string name;
|
671
736
|
/** A secret token that may be known among all processes in this Group. Used for securing
|
672
737
|
* intra-group process communication.
|
673
738
|
*/
|
674
|
-
|
739
|
+
char secret[SECRET_SIZE];
|
675
740
|
/** A UUID that's generated on Group initialization, and changes every time
|
676
741
|
* the Group receives a restart command. Allows Union Station to track app
|
677
742
|
* restarts. This information is public.
|
@@ -698,8 +763,8 @@ public:
|
|
698
763
|
* their numbers.
|
699
764
|
* These lists do not intersect. A process is in exactly 1 list.
|
700
765
|
*
|
701
|
-
*
|
702
|
-
*
|
766
|
+
* `nEnabledProcessesTotallyBusy` counts the number of enabled processes for which
|
767
|
+
* `isTotallyBusy()` is true.
|
703
768
|
*
|
704
769
|
* Invariants:
|
705
770
|
* enabledCount >= 0
|
@@ -708,9 +773,8 @@ public:
|
|
708
773
|
* enabledProcesses.size() == enabledCount
|
709
774
|
* disablingProcesses.size() == disabingCount
|
710
775
|
* disabledProcesses.size() == disabledCount
|
776
|
+
* nEnabledProcessesTotallyBusy <= enabledCount
|
711
777
|
*
|
712
|
-
* enabledProcesses.empty() == (pqueue.top() == NULL)
|
713
|
-
*
|
714
778
|
* if (enabledCount == 0):
|
715
779
|
* processesBeingSpawned > 0 || restarting() || poolAtFullCapacity()
|
716
780
|
* if (enabledCount == 0) and (disablingCount > 0):
|
@@ -718,29 +782,23 @@ public:
|
|
718
782
|
* if !m_spawning:
|
719
783
|
* (enabledCount > 0) || (disablingCount == 0)
|
720
784
|
*
|
721
|
-
* if pqueue.top().isTotallyBusy():
|
722
|
-
* All enabled processes are totally busy.
|
723
|
-
*
|
724
785
|
* for all process in enabledProcesses:
|
725
786
|
* process.enabled == Process::ENABLED
|
726
|
-
* process.pqHandle != NULL
|
727
787
|
* process.isAlive()
|
728
788
|
* process.oobwStatus == Process::OOBW_NOT_ACTIVE || process.oobwStatus == Process::OOBW_REQUESTED
|
729
789
|
* for all processes in disablingProcesses:
|
730
790
|
* process.enabled == Process::DISABLING
|
731
|
-
* process.pqHandle == NULL
|
732
791
|
* process.isAlive()
|
733
792
|
* process.oobwStatus == Process::OOBW_NOT_ACTIVE || process.oobwStatus == Process::OOBW_IN_PROGRESS
|
734
793
|
* for all process in disabledProcesses:
|
735
794
|
* process.enabled == Process::DISABLED
|
736
|
-
* process.pqHandle == NULL
|
737
795
|
* process.isAlive()
|
738
796
|
* process.oobwStatus == Process::OOBW_NOT_ACTIVE || process.oobwStatus == Process::OOBW_IN_PROGRESS
|
739
797
|
*/
|
740
798
|
int enabledCount;
|
741
799
|
int disablingCount;
|
742
800
|
int disabledCount;
|
743
|
-
|
801
|
+
int nEnabledProcessesTotallyBusy;
|
744
802
|
ProcessList enabledProcesses;
|
745
803
|
ProcessList disablingProcesses;
|
746
804
|
ProcessList disabledProcesses;
|
@@ -751,10 +809,16 @@ public:
|
|
751
809
|
*
|
752
810
|
* for all process in detachedProcesses:
|
753
811
|
* process.enabled == Process::DETACHED
|
754
|
-
* process.pqHandle == NULL
|
755
812
|
*/
|
756
813
|
ProcessList detachedProcesses;
|
757
814
|
|
815
|
+
/**
|
816
|
+
* A cache of the processes' busyness. It's in a compact structure
|
817
|
+
* so that `findProcessWithLowestBusyness()` can work very quickly
|
818
|
+
* when there are a large number of processes.
|
819
|
+
*/
|
820
|
+
boost::container::vector<int> enabledProcessBusynessLevels;
|
821
|
+
|
758
822
|
/**
|
759
823
|
* get() requests for this group that cannot be immediately satisfied are
|
760
824
|
* put on this wait list, which must be processed as soon as the necessary
|
@@ -808,8 +872,9 @@ public:
|
|
808
872
|
* Constructors and destructors
|
809
873
|
********************************************/
|
810
874
|
|
811
|
-
Group(
|
875
|
+
Group(SuperGroup *superGroup, const Options &options, const ComponentInfo &info);
|
812
876
|
~Group();
|
877
|
+
void initialize();
|
813
878
|
|
814
879
|
/**
|
815
880
|
* Must be called before destroying a Group. You can optionally provide a
|
@@ -820,7 +885,9 @@ public:
|
|
820
885
|
* One of the post lock actions can potentially perform a long-running
|
821
886
|
* operation, so running them in a thread is advised.
|
822
887
|
*/
|
823
|
-
void shutdown(const Callback &callback,
|
888
|
+
void shutdown(const Callback &callback,
|
889
|
+
boost::container::vector<Callback> &postLockActions)
|
890
|
+
{
|
824
891
|
assert(isAlive());
|
825
892
|
|
826
893
|
P_DEBUG("Begin shutting down group " << name);
|
@@ -832,10 +899,7 @@ public:
|
|
832
899
|
spawner.reset();
|
833
900
|
selfPointer = shared_from_this();
|
834
901
|
assert(disableWaitlist.empty());
|
835
|
-
|
836
|
-
boost::lock_guard<boost::mutex> l(lifetimeSyncher);
|
837
|
-
lifeStatus = SHUTTING_DOWN;
|
838
|
-
}
|
902
|
+
lifeStatus.store(SHUTTING_DOWN, boost::memory_order_release);
|
839
903
|
}
|
840
904
|
|
841
905
|
|
@@ -848,12 +912,12 @@ public:
|
|
848
912
|
* @pre getLifeState() != SHUT_DOWN
|
849
913
|
* @post result != NULL
|
850
914
|
*/
|
851
|
-
|
852
|
-
return superGroup
|
915
|
+
SuperGroup *getSuperGroup() const {
|
916
|
+
return superGroup;
|
853
917
|
}
|
854
918
|
|
855
|
-
void setSuperGroup(
|
856
|
-
assert(this->superGroup
|
919
|
+
void setSuperGroup(SuperGroup *superGroup) {
|
920
|
+
assert(this->superGroup == NULL);
|
857
921
|
this->superGroup = superGroup;
|
858
922
|
}
|
859
923
|
|
@@ -862,18 +926,17 @@ public:
|
|
862
926
|
* @pre getLifeState() != SHUT_DOWN
|
863
927
|
* @post result != NULL
|
864
928
|
*/
|
865
|
-
|
929
|
+
OXT_FORCE_INLINE Pool *getPool() const;
|
866
930
|
|
867
931
|
// Thread-safe.
|
868
932
|
bool isAlive() const {
|
869
|
-
|
870
|
-
return lifeStatus == ALIVE;
|
933
|
+
return getLifeStatus() == ALIVE;
|
871
934
|
}
|
872
935
|
|
873
936
|
// Thread-safe.
|
937
|
+
OXT_FORCE_INLINE
|
874
938
|
LifeStatus getLifeStatus() const {
|
875
|
-
|
876
|
-
return lifeStatus;
|
939
|
+
return (LifeStatus) lifeStatus.load(boost::memory_order_acquire);
|
877
940
|
}
|
878
941
|
|
879
942
|
|
@@ -882,7 +945,7 @@ public:
|
|
882
945
|
********************************************/
|
883
946
|
|
884
947
|
SessionPtr get(const Options &newOptions, const GetCallback &callback,
|
885
|
-
vector<Callback> &postLockActions)
|
948
|
+
boost::container::vector<Callback> &postLockActions)
|
886
949
|
{
|
887
950
|
assert(isAlive());
|
888
951
|
|
@@ -913,14 +976,7 @@ public:
|
|
913
976
|
}
|
914
977
|
|
915
978
|
if (OXT_UNLIKELY(newOptions.noop)) {
|
916
|
-
|
917
|
-
0, string(), string(),
|
918
|
-
FileDescriptor(), FileDescriptor(),
|
919
|
-
SocketListPtr(), 0, 0);
|
920
|
-
process->dummy = true;
|
921
|
-
process->requiresShutdown = false;
|
922
|
-
process->setGroup(shared_from_this());
|
923
|
-
return boost::make_shared<Session>(process, (Socket *) NULL);
|
979
|
+
return nullProcess->createSessionObject((Socket *) NULL);
|
924
980
|
}
|
925
981
|
|
926
982
|
if (OXT_UNLIKELY(enabledCount == 0)) {
|
@@ -943,11 +999,11 @@ public:
|
|
943
999
|
disablingProcesses);
|
944
1000
|
assert(process != NULL);
|
945
1001
|
if (!process->isTotallyBusy()) {
|
946
|
-
return newSession(process);
|
1002
|
+
return newSession(process, newOptions.currentTime);
|
947
1003
|
}
|
948
1004
|
}
|
949
1005
|
|
950
|
-
if (pushGetWaiter(newOptions, callback)) {
|
1006
|
+
if (pushGetWaiter(newOptions, callback, postLockActions)) {
|
951
1007
|
P_DEBUG("No session checked out yet: group is spawning or restarting");
|
952
1008
|
}
|
953
1009
|
return SessionPtr();
|
@@ -958,13 +1014,13 @@ public:
|
|
958
1014
|
* Wait until a new one has been spawned or until
|
959
1015
|
* resources have become free.
|
960
1016
|
*/
|
961
|
-
if (pushGetWaiter(newOptions, callback)) {
|
1017
|
+
if (pushGetWaiter(newOptions, callback, postLockActions)) {
|
962
1018
|
P_DEBUG("No session checked out yet: all processes are at full capacity");
|
963
1019
|
}
|
964
1020
|
return SessionPtr();
|
965
1021
|
} else {
|
966
1022
|
P_DEBUG("Session checked out from process " << result.process->inspect());
|
967
|
-
return newSession(result.process);
|
1023
|
+
return newSession(result.process, newOptions.currentTime);
|
968
1024
|
}
|
969
1025
|
}
|
970
1026
|
}
|
@@ -982,9 +1038,12 @@ public:
|
|
982
1038
|
* function doesn't touch `getWaitlist` so be sure to fix its invariants
|
983
1039
|
* afterwards if necessary, e.g. by calling `assignSessionsToGetWaiters()`.
|
984
1040
|
*/
|
985
|
-
AttachResult attach(const
|
1041
|
+
AttachResult attach(const SpawnObject &spawnObject,
|
1042
|
+
boost::container::vector<Callback> &postLockActions)
|
1043
|
+
{
|
986
1044
|
TRACE_POINT();
|
987
|
-
|
1045
|
+
const ProcessPtr &process = spawnObject.process;
|
1046
|
+
assert(process->getGroup() == NULL || process->getGroup() == this);
|
988
1047
|
assert(process->isAlive());
|
989
1048
|
assert(isAlive());
|
990
1049
|
|
@@ -996,11 +1055,15 @@ public:
|
|
996
1055
|
return AR_ANOTHER_GROUP_IS_WAITING_FOR_CAPACITY;
|
997
1056
|
}
|
998
1057
|
|
999
|
-
process->setGroup(
|
1058
|
+
process->setGroup(this);
|
1000
1059
|
process->stickySessionId = generateStickySessionId();
|
1001
1060
|
P_DEBUG("Attaching process " << process->inspect());
|
1002
1061
|
addProcessToList(process, enabledProcesses);
|
1003
1062
|
|
1063
|
+
if (spawnObject.pool != getPallocPool()) {
|
1064
|
+
process->recreateStrings(getPallocPool());
|
1065
|
+
}
|
1066
|
+
|
1004
1067
|
/* Now that there are enough resources, relevant processes in
|
1005
1068
|
* 'disableWaitlist' can be disabled.
|
1006
1069
|
*/
|
@@ -1043,9 +1106,9 @@ public:
|
|
1043
1106
|
* `pool->detachProcessUnlocked()` does that so you should usually use
|
1044
1107
|
* that method over this one.
|
1045
1108
|
*/
|
1046
|
-
void detach(const ProcessPtr &process, vector<Callback> &postLockActions) {
|
1109
|
+
void detach(const ProcessPtr &process, boost::container::vector<Callback> &postLockActions) {
|
1047
1110
|
TRACE_POINT();
|
1048
|
-
assert(process->getGroup()
|
1111
|
+
assert(process->getGroup() == this);
|
1049
1112
|
assert(process->isAlive());
|
1050
1113
|
assert(isAlive());
|
1051
1114
|
|
@@ -1081,13 +1144,12 @@ public:
|
|
1081
1144
|
* Detaches all processes from this Group. This function doesn't touch
|
1082
1145
|
* getWaitlist so be sure to fix its invariants afterwards if necessary.
|
1083
1146
|
*/
|
1084
|
-
void detachAll(vector<Callback> &postLockActions) {
|
1147
|
+
void detachAll(boost::container::vector<Callback> &postLockActions) {
|
1085
1148
|
assert(isAlive());
|
1086
1149
|
P_DEBUG("Detaching all processes in group " << name);
|
1087
1150
|
|
1088
1151
|
foreach (ProcessPtr process, enabledProcesses) {
|
1089
1152
|
addProcessToList(process, detachedProcesses);
|
1090
|
-
process->pqHandle = NULL;
|
1091
1153
|
}
|
1092
1154
|
foreach (ProcessPtr process, disablingProcesses) {
|
1093
1155
|
addProcessToList(process, detachedProcesses);
|
@@ -1099,10 +1161,11 @@ public:
|
|
1099
1161
|
enabledProcesses.clear();
|
1100
1162
|
disablingProcesses.clear();
|
1101
1163
|
disabledProcesses.clear();
|
1102
|
-
|
1164
|
+
enabledProcessBusynessLevels.clear();
|
1103
1165
|
enabledCount = 0;
|
1104
1166
|
disablingCount = 0;
|
1105
1167
|
disabledCount = 0;
|
1168
|
+
nEnabledProcessesTotallyBusy = 0;
|
1106
1169
|
clearDisableWaitlist(DR_NOOP, postLockActions);
|
1107
1170
|
startCheckingDetachedProcesses(false);
|
1108
1171
|
}
|
@@ -1111,8 +1174,8 @@ public:
|
|
1111
1174
|
* Marks the given process as enabled. This function doesn't touch getWaitlist
|
1112
1175
|
* so be sure to fix its invariants afterwards if necessary.
|
1113
1176
|
*/
|
1114
|
-
void enable(const ProcessPtr &process, vector<Callback> &postLockActions) {
|
1115
|
-
assert(process->getGroup()
|
1177
|
+
void enable(const ProcessPtr &process, boost::container::vector<Callback> &postLockActions) {
|
1178
|
+
assert(process->getGroup() == this);
|
1116
1179
|
assert(process->isAlive());
|
1117
1180
|
assert(isAlive());
|
1118
1181
|
|
@@ -1136,7 +1199,7 @@ public:
|
|
1136
1199
|
* called later with the result of this action.
|
1137
1200
|
*/
|
1138
1201
|
DisableResult disable(const ProcessPtr &process, const DisableCallback &callback) {
|
1139
|
-
assert(process->getGroup()
|
1202
|
+
assert(process->getGroup() == this);
|
1140
1203
|
assert(process->isAlive());
|
1141
1204
|
assert(isAlive());
|
1142
1205
|
|
@@ -1216,7 +1279,7 @@ public:
|
|
1216
1279
|
}
|
1217
1280
|
}
|
1218
1281
|
|
1219
|
-
void cleanupSpawner(vector<Callback> &postLockActions) {
|
1282
|
+
void cleanupSpawner(boost::container::vector<Callback> &postLockActions) {
|
1220
1283
|
assert(isAlive());
|
1221
1284
|
postLockActions.push_back(boost::bind(doCleanupSpawner, spawner));
|
1222
1285
|
}
|
@@ -1264,7 +1327,7 @@ public:
|
|
1264
1327
|
* Returns false if there are no enabled processes.
|
1265
1328
|
*/
|
1266
1329
|
bool allEnabledProcessesAreTotallyBusy() const {
|
1267
|
-
return
|
1330
|
+
return nEnabledProcessesTotallyBusy == enabledCount;
|
1268
1331
|
}
|
1269
1332
|
|
1270
1333
|
/**
|
@@ -1312,9 +1375,78 @@ public:
|
|
1312
1375
|
if (m_restarting) {
|
1313
1376
|
return false;
|
1314
1377
|
} else {
|
1378
|
+
time_t now;
|
1315
1379
|
struct stat buf;
|
1316
|
-
|
1317
|
-
|
1380
|
+
|
1381
|
+
if (options.currentTime != 0) {
|
1382
|
+
now = options.currentTime / 1000000;
|
1383
|
+
} else {
|
1384
|
+
now = SystemTime::get();
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
if (lastRestartFileCheckTime == 0) {
|
1388
|
+
// First time we call needsRestart() for this group.
|
1389
|
+
if (syscalls::stat(restartFile.c_str(), &buf) == 0) {
|
1390
|
+
lastRestartFileMtime = buf.st_mtime;
|
1391
|
+
} else {
|
1392
|
+
lastRestartFileMtime = 0;
|
1393
|
+
}
|
1394
|
+
lastRestartFileCheckTime = now;
|
1395
|
+
return false;
|
1396
|
+
|
1397
|
+
} else if (lastRestartFileCheckTime <= now - (time_t) options.statThrottleRate) {
|
1398
|
+
// Not first time we call needsRestart() for this group.
|
1399
|
+
// Stat throttle time has passed.
|
1400
|
+
bool restart;
|
1401
|
+
|
1402
|
+
lastRestartFileCheckTime = now;
|
1403
|
+
|
1404
|
+
if (lastRestartFileMtime > 0) {
|
1405
|
+
// restart.txt existed before
|
1406
|
+
if (syscalls::stat(restartFile.c_str(), &buf) == -1) {
|
1407
|
+
// restart.txt no longer exists
|
1408
|
+
lastRestartFileMtime = buf.st_mtime;
|
1409
|
+
restart = false;
|
1410
|
+
} else if (buf.st_mtime != lastRestartFileMtime) {
|
1411
|
+
// restart.txt's mtime has changed
|
1412
|
+
lastRestartFileMtime = buf.st_mtime;
|
1413
|
+
restart = true;
|
1414
|
+
} else {
|
1415
|
+
restart = false;
|
1416
|
+
}
|
1417
|
+
} else {
|
1418
|
+
// restart.txt didn't exist before
|
1419
|
+
if (syscalls::stat(restartFile.c_str(), &buf) == 0) {
|
1420
|
+
// restart.txt now exists
|
1421
|
+
lastRestartFileMtime = buf.st_mtime;
|
1422
|
+
restart = true;
|
1423
|
+
} else {
|
1424
|
+
// restart.txt still doesn't exist
|
1425
|
+
lastRestartFileMtime = 0;
|
1426
|
+
restart = false;
|
1427
|
+
}
|
1428
|
+
}
|
1429
|
+
|
1430
|
+
if (!restart) {
|
1431
|
+
alwaysRestartFileExists = restart =
|
1432
|
+
syscalls::stat(alwaysRestartFile.c_str(), &buf) == 0;
|
1433
|
+
}
|
1434
|
+
|
1435
|
+
return restart;
|
1436
|
+
|
1437
|
+
} else {
|
1438
|
+
// Not first time we call needsRestart() for this group.
|
1439
|
+
// Still within stat throttling window.
|
1440
|
+
if (alwaysRestartFileExists) {
|
1441
|
+
// always_restart.txt existed before
|
1442
|
+
alwaysRestartFileExists = syscalls::stat(
|
1443
|
+
alwaysRestartFile.c_str(), &buf) == 0;
|
1444
|
+
return alwaysRestartFileExists;
|
1445
|
+
} else {
|
1446
|
+
// Don't check until stat throttling window is over
|
1447
|
+
return false;
|
1448
|
+
}
|
1449
|
+
}
|
1318
1450
|
}
|
1319
1451
|
}
|
1320
1452
|
|
@@ -1350,8 +1482,9 @@ public:
|
|
1350
1482
|
stream << "<restarting/>";
|
1351
1483
|
}
|
1352
1484
|
if (includeSecrets) {
|
1353
|
-
stream << "<secret>" << escapeForXml(secret) << "</secret>";
|
1485
|
+
stream << "<secret>" << escapeForXml(StaticString(secret, SECRET_SIZE)) << "</secret>";
|
1354
1486
|
}
|
1487
|
+
LifeStatus lifeStatus = (LifeStatus) this->lifeStatus.load(boost::memory_order_relaxed);
|
1355
1488
|
switch (lifeStatus) {
|
1356
1489
|
case ALIVE:
|
1357
1490
|
stream << "<life_status>ALIVE</life_status>";
|
@@ -1363,7 +1496,7 @@ public:
|
|
1363
1496
|
stream << "<life_status>SHUT_DOWN</life_status>";
|
1364
1497
|
break;
|
1365
1498
|
default:
|
1366
|
-
P_BUG("Unknown 'lifeStatus' state " <<
|
1499
|
+
P_BUG("Unknown 'lifeStatus' state " << lifeStatus);
|
1367
1500
|
}
|
1368
1501
|
|
1369
1502
|
stream << "<options>";
|