passenger 6.0.23 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -23,6 +23,13 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
|
27
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
28
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
29
|
+
|
30
|
+
#ifdef INTELLISENSE
|
31
|
+
#include <Core/ApplicationPool/Pool.h>
|
32
|
+
#endif
|
26
33
|
#include <Core/ApplicationPool/Group.h>
|
27
34
|
|
28
35
|
/*************************************************************************
|
@@ -65,3 +72,5 @@ Group::authorizeByApiKey(const ApiKey &key) const {
|
|
65
72
|
|
66
73
|
} // namespace ApplicationPool2
|
67
74
|
} // namespace Passenger
|
75
|
+
|
76
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_MISCELLANEOUS_CPP_
|
@@ -23,6 +23,13 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
|
27
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
28
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
29
|
+
|
30
|
+
#ifdef INTELLISENSE
|
31
|
+
#include <Core/ApplicationPool/Pool.h>
|
32
|
+
#endif
|
26
33
|
#include <Core/ApplicationPool/Group.h>
|
27
34
|
#include <IOTools/MessageSerialization.h>
|
28
35
|
|
@@ -322,3 +329,5 @@ Group::requestOOBW(const ProcessPtr &process) {
|
|
322
329
|
|
323
330
|
} // namespace ApplicationPool2
|
324
331
|
} // namespace Passenger
|
332
|
+
|
333
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_OUT_OF_BAND_WORK_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -57,72 +63,75 @@ Group::findProcessWithStickySessionId(unsigned int id) const {
|
|
57
63
|
return NULL;
|
58
64
|
}
|
59
65
|
|
66
|
+
/**
|
67
|
+
* Return the process with the given sticky session ID if it exists.
|
68
|
+
* If not, then find the "best" enabled process to route a request to,
|
69
|
+
* according to the same criteria documented for findBestProcess().
|
70
|
+
*
|
71
|
+
* - If the process with the given sticky session ID exists, then always
|
72
|
+
* returns that process. Meaning that this process could be `!canBeRoutedTo()`.
|
73
|
+
* - If there is no process that can be routed to, then returns nullptr.
|
74
|
+
*/
|
60
75
|
Process *
|
61
|
-
Group::
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
Process *process = enabledProcesses[i].get();
|
76
|
+
Group::findBestProcessPreferringStickySessionId(unsigned int id) const {
|
77
|
+
Process *bestProcess = nullptr;
|
78
|
+
ProcessList::const_iterator it;
|
79
|
+
ProcessList::const_iterator end = enabledProcesses.end();
|
80
|
+
|
81
|
+
for (it = enabledProcesses.begin(); it != end; it++) {
|
82
|
+
Process *process = it->get();
|
69
83
|
if (process->getStickySessionId() == id) {
|
70
84
|
return process;
|
71
|
-
} else if (
|
72
|
-
|
73
|
-
|
85
|
+
} else if (!process->isTotallyBusy()
|
86
|
+
&& (
|
87
|
+
bestProcess == nullptr
|
88
|
+
|| process->generation > bestProcess->generation
|
89
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime < bestProcess->spawnStartTime)
|
90
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime == bestProcess->spawnStartTime && process->busyness() < bestProcess->busyness())
|
91
|
+
)
|
92
|
+
) {
|
93
|
+
bestProcess = process;
|
74
94
|
}
|
75
95
|
}
|
76
96
|
|
77
|
-
|
78
|
-
return NULL;
|
79
|
-
} else {
|
80
|
-
return enabledProcesses[leastBusyProcessIndex].get();
|
81
|
-
}
|
97
|
+
return bestProcess;
|
82
98
|
}
|
83
99
|
|
100
|
+
/**
|
101
|
+
* Given a ProcessList, find the "best" process to route a request to.
|
102
|
+
* At the moment, "best" is defined as the process with the highest generation,
|
103
|
+
* lowest start time, and lowest busyness, in that order of priority.
|
104
|
+
*
|
105
|
+
* If there is no process that can be routed to, then returns nullptr.
|
106
|
+
*
|
107
|
+
* @post result != nullptr || result.canBeRoutedTo()
|
108
|
+
*/
|
84
109
|
Process *
|
85
|
-
Group::
|
110
|
+
Group::findBestProcess(const ProcessList &processes) const {
|
86
111
|
if (processes.empty()) {
|
87
|
-
return
|
112
|
+
return nullptr;
|
88
113
|
}
|
89
114
|
|
90
|
-
|
91
|
-
Process *leastBusyProcess = NULL;
|
115
|
+
Process *bestProcess = nullptr;
|
92
116
|
ProcessList::const_iterator it;
|
93
117
|
ProcessList::const_iterator end = processes.end();
|
94
|
-
for (it = processes.begin(); it != end; it++) {
|
95
|
-
Process *process = (*it).get();
|
96
|
-
int busyness = process->busyness();
|
97
|
-
if (lowestBusyness == -1 || lowestBusyness > busyness) {
|
98
|
-
lowestBusyness = busyness;
|
99
|
-
leastBusyProcess = process;
|
100
|
-
}
|
101
|
-
}
|
102
|
-
return leastBusyProcess;
|
103
|
-
}
|
104
118
|
|
105
|
-
|
106
|
-
*
|
107
|
-
*/
|
108
|
-
Process *
|
109
|
-
Group::findEnabledProcessWithLowestBusyness() const {
|
110
|
-
if (enabledProcesses.empty()) {
|
111
|
-
return NULL;
|
112
|
-
}
|
113
|
-
|
114
|
-
int leastBusyProcessIndex = -1;
|
115
|
-
int lowestBusyness = 0;
|
116
|
-
unsigned int i, size = enabledProcessBusynessLevels.size();
|
117
|
-
const int *enabledProcessBusynessLevels = &this->enabledProcessBusynessLevels[0];
|
119
|
+
for (it = processes.begin(); it != end; it++) {
|
120
|
+
Process *process = it->get();
|
118
121
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
122
|
+
if (!process->isTotallyBusy()
|
123
|
+
&& (
|
124
|
+
bestProcess == nullptr
|
125
|
+
|| process->generation > bestProcess->generation
|
126
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime < bestProcess->spawnStartTime)
|
127
|
+
|| (process->generation == bestProcess->generation && process->spawnStartTime == bestProcess->spawnStartTime && process->busyness() < bestProcess->busyness())
|
128
|
+
)
|
129
|
+
) {
|
130
|
+
bestProcess = process;
|
123
131
|
}
|
124
132
|
}
|
125
|
-
|
133
|
+
|
134
|
+
return bestProcess;
|
126
135
|
}
|
127
136
|
|
128
137
|
/**
|
@@ -222,6 +231,7 @@ void
|
|
222
231
|
Group::removeFromDisableWaitlist(const ProcessPtr &p, DisableResult result,
|
223
232
|
boost::container::vector<Callback> &postLockActions)
|
224
233
|
{
|
234
|
+
const deque<DisableWaiter> &disableWaitlist = this->disableWaitlist;
|
225
235
|
deque<DisableWaiter>::const_iterator it, end = disableWaitlist.end();
|
226
236
|
deque<DisableWaiter> newList;
|
227
237
|
for (it = disableWaitlist.begin(); it != end; it++) {
|
@@ -233,7 +243,7 @@ Group::removeFromDisableWaitlist(const ProcessPtr &p, DisableResult result,
|
|
233
243
|
newList.push_back(waiter);
|
234
244
|
}
|
235
245
|
}
|
236
|
-
disableWaitlist = newList;
|
246
|
+
this->disableWaitlist = newList;
|
237
247
|
}
|
238
248
|
|
239
249
|
void
|
@@ -428,6 +438,7 @@ Group::attach(const ProcessPtr &process,
|
|
428
438
|
/* Now that there are enough resources, relevant processes in
|
429
439
|
* 'disableWaitlist' can be disabled.
|
430
440
|
*/
|
441
|
+
const deque<DisableWaiter> &disableWaitlist = this->disableWaitlist;
|
431
442
|
deque<DisableWaiter>::const_iterator it, end = disableWaitlist.end();
|
432
443
|
deque<DisableWaiter> newDisableWaitlist;
|
433
444
|
for (it = disableWaitlist.begin(); it != end; it++) {
|
@@ -451,7 +462,7 @@ Group::attach(const ProcessPtr &process,
|
|
451
462
|
newDisableWaitlist.push_back(waiter);
|
452
463
|
}
|
453
464
|
}
|
454
|
-
disableWaitlist = newDisableWaitlist;
|
465
|
+
this->disableWaitlist = newDisableWaitlist;
|
455
466
|
|
456
467
|
// Update GC sleep timer.
|
457
468
|
wakeUpGarbageCollector();
|
@@ -616,3 +627,5 @@ Group::disable(const ProcessPtr &process, const DisableCallback &callback) {
|
|
616
627
|
|
617
628
|
} // namespace ApplicationPool2
|
618
629
|
} // namespace Passenger
|
630
|
+
|
631
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_PROCESS_LIST_MANAGEMENT_CPP_
|
@@ -23,7 +23,14 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
33
|
+
#include <cassert>
|
27
34
|
|
28
35
|
/*************************************************************************
|
29
36
|
*
|
@@ -58,16 +65,17 @@ Group::RouteResult
|
|
58
65
|
Group::route(const Options &options) const {
|
59
66
|
if (OXT_LIKELY(enabledCount > 0)) {
|
60
67
|
if (options.stickySessionId == 0) {
|
61
|
-
Process *process =
|
62
|
-
if (process
|
68
|
+
Process *process = findBestProcess(enabledProcesses);
|
69
|
+
if (process != nullptr) {
|
70
|
+
assert(process->canBeRoutedTo());
|
63
71
|
return RouteResult(process);
|
64
72
|
} else {
|
65
73
|
return RouteResult(NULL, true);
|
66
74
|
}
|
67
75
|
} else {
|
68
|
-
Process *process =
|
76
|
+
Process *process = findBestProcessPreferringStickySessionId(
|
69
77
|
options.stickySessionId);
|
70
|
-
if (process !=
|
78
|
+
if (process != nullptr) {
|
71
79
|
if (process->canBeRoutedTo()) {
|
72
80
|
return RouteResult(process);
|
73
81
|
} else {
|
@@ -78,8 +86,9 @@ Group::route(const Options &options) const {
|
|
78
86
|
}
|
79
87
|
}
|
80
88
|
} else {
|
81
|
-
Process *process =
|
82
|
-
if (process
|
89
|
+
Process *process = findBestProcess(disablingProcesses);
|
90
|
+
if (process != nullptr) {
|
91
|
+
assert(process->canBeRoutedTo());
|
83
92
|
return RouteResult(process);
|
84
93
|
} else {
|
85
94
|
return RouteResult(NULL, true);
|
@@ -304,9 +313,8 @@ Group::get(const Options &newOptions, const GetCallback &callback,
|
|
304
313
|
assert(m_spawning || restarting() || poolAtFullCapacity());
|
305
314
|
|
306
315
|
if (disablingCount > 0 && !restarting()) {
|
307
|
-
Process *process =
|
308
|
-
|
309
|
-
if (!process->isTotallyBusy()) {
|
316
|
+
Process *process = findBestProcess(disablingProcesses);
|
317
|
+
if (process != nullptr && !process->isTotallyBusy()) {
|
310
318
|
return newSession(process, newOptions.currentTime);
|
311
319
|
}
|
312
320
|
}
|
@@ -336,3 +344,5 @@ Group::get(const Options &newOptions, const GetCallback &callback,
|
|
336
344
|
|
337
345
|
} // namespace ApplicationPool2
|
338
346
|
} // namespace Passenger
|
347
|
+
|
348
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_SESSION_MANAGEMENT_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -485,3 +491,5 @@ Group::allowSpawn() const {
|
|
485
491
|
|
486
492
|
} // namespace ApplicationPool2
|
487
493
|
} // namespace Passenger
|
494
|
+
|
495
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_SPAWNING_AND_RESTARTING_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
#include <FileTools/PathManip.h>
|
28
34
|
#include <cassert>
|
@@ -303,3 +309,5 @@ Group::inspectConfigInAdminPanelFormat(Json::Value &result) const {
|
|
303
309
|
|
304
310
|
} // namespace ApplicationPool2
|
305
311
|
} // namespace Passenger
|
312
|
+
|
313
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_STATE_INSPECTION_CPP_
|
@@ -23,6 +23,12 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
28
|
+
|
29
|
+
#ifdef INTELLISENSE
|
30
|
+
#include <Core/ApplicationPool/Pool.h>
|
31
|
+
#endif
|
26
32
|
#include <Core/ApplicationPool/Group.h>
|
27
33
|
|
28
34
|
/*************************************************************************
|
@@ -158,3 +164,5 @@ Group::verifyNoRequestsOnGetWaitlistAreRoutable() const {
|
|
158
164
|
|
159
165
|
} // namespace ApplicationPool2
|
160
166
|
} // namespace Passenger
|
167
|
+
|
168
|
+
#endif // _PASSENGER_APPLICATION_POOL_GROUP_VERIFICATION_CPP_
|
@@ -92,8 +92,18 @@ public:
|
|
92
92
|
};
|
93
93
|
|
94
94
|
struct RouteResult {
|
95
|
-
Process
|
96
|
-
|
95
|
+
/** The Process to route the request to, or nullptr if no process can be routed to. */
|
96
|
+
Process * const process;
|
97
|
+
/**
|
98
|
+
* If `process` is nullptr, then `finished` indicates whether another `Group::route()`
|
99
|
+
* call on a different request *could* succeed, meaning that the caller should continue
|
100
|
+
* calling `Group::route()` if there are more queued requests that need to be processed.
|
101
|
+
*
|
102
|
+
* Usually `finished` is false because all processes are totally busy. But in some cases,
|
103
|
+
* for example when using sticky sessions, it could be true because other requests can
|
104
|
+
* potentially be routed to other processes.
|
105
|
+
*/
|
106
|
+
const bool finished;
|
97
107
|
|
98
108
|
RouteResult(Process *p, bool _finished = false)
|
99
109
|
: process(p),
|
@@ -223,9 +233,9 @@ public:
|
|
223
233
|
/****** Process list management ******/
|
224
234
|
|
225
235
|
Process *findProcessWithStickySessionId(unsigned int id) const;
|
226
|
-
Process *
|
227
|
-
Process *
|
228
|
-
Process *
|
236
|
+
Process *findBestProcessPreferringStickySessionId(unsigned int id) const;
|
237
|
+
Process *findBestProcess(const ProcessList &processes) const;
|
238
|
+
Process *findBestEnabledProcess() const;
|
229
239
|
|
230
240
|
void addProcessToList(const ProcessPtr &process, ProcessList &destination);
|
231
241
|
void removeProcessFromList(const ProcessPtr &process, ProcessList &source);
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -191,3 +194,5 @@ Pool::realCollectAnalytics() {
|
|
191
194
|
|
192
195
|
} // namespace ApplicationPool2
|
193
196
|
} // namespace Passenger
|
197
|
+
|
198
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_ANALYTICS_COLLECTION_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -199,3 +202,5 @@ Pool::wakeupGarbageCollector() {
|
|
199
202
|
|
200
203
|
} // namespace ApplicationPool2
|
201
204
|
} // namespace Passenger
|
205
|
+
|
206
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GARBAGE_COLLECTION_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -237,3 +240,5 @@ Pool::getRandomGenerator() const {
|
|
237
240
|
|
238
241
|
} // namespace ApplicationPool2
|
239
242
|
} // namespace Passenger
|
243
|
+
|
244
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GENERAL_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -288,3 +291,5 @@ Pool::restartGroupsByAppRoot(const StaticString &appRoot, const RestartOptions &
|
|
288
291
|
|
289
292
|
} // namespace ApplicationPool2
|
290
293
|
} // namespace Passenger
|
294
|
+
|
295
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_GROUP_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -140,3 +143,5 @@ Pool::destroy() {
|
|
140
143
|
|
141
144
|
} // namespace ApplicationPool2
|
142
145
|
} // namespace Passenger
|
146
|
+
|
147
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_INITIALIZATION_AND_SHUTDOWN_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -250,3 +253,5 @@ Pool::authorizeByUid(uid_t uid, bool lock) const {
|
|
250
253
|
|
251
254
|
} // namespace ApplicationPool2
|
252
255
|
} // namespace Passenger
|
256
|
+
|
257
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_MISCELLANEOUS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -329,3 +332,5 @@ Pool::disableProcess(const StaticString &gupid) {
|
|
329
332
|
|
330
333
|
} // namespace ApplicationPool2
|
331
334
|
} // namespace Passenger
|
335
|
+
|
336
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_PROCESS_UTILS_CPP_
|
@@ -23,6 +23,9 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#ifndef _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
27
|
+
#define _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
28
|
+
|
26
29
|
#include <Core/ApplicationPool/Pool.h>
|
27
30
|
|
28
31
|
/*************************************************************************
|
@@ -81,12 +84,17 @@ Pool::inspectProcessList(const InspectOptions &options, stringstream &result,
|
|
81
84
|
|
82
85
|
if (process->metrics.isValid()) {
|
83
86
|
snprintf(cpubuf, sizeof(cpubuf), "%d%%", (int) process->metrics.cpu);
|
87
|
+
#ifndef __clang__
|
84
88
|
#pragma GCC diagnostic push
|
85
89
|
#pragma GCC diagnostic ignored "-Wformat-truncation"
|
86
|
-
|
90
|
+
#endif
|
91
|
+
// GCC warns about format-truncation here, but no one has 9.3PB RAM
|
92
|
+
// So we can safely ignore this warning.
|
87
93
|
snprintf(membuf, sizeof(membuf), "%ldM",
|
88
94
|
(unsigned long) (process->metrics.realMemory() / 1024));
|
95
|
+
#ifndef __clang__
|
89
96
|
#pragma GCC diagnostic pop
|
97
|
+
#endif
|
90
98
|
} else {
|
91
99
|
snprintf(cpubuf, sizeof(cpubuf), "0%%");
|
92
100
|
snprintf(membuf, sizeof(membuf), "0M");
|
@@ -431,3 +439,5 @@ Pool::getGroupCount() const {
|
|
431
439
|
|
432
440
|
} // namespace ApplicationPool2
|
433
441
|
} // namespace Passenger
|
442
|
+
|
443
|
+
#endif // _PASSENGER_APPLICATION_POOL_POOL_STATE_INSPECTION_CPP_
|
@@ -28,7 +28,6 @@
|
|
28
28
|
|
29
29
|
#include <string>
|
30
30
|
#include <vector>
|
31
|
-
#include <algorithm>
|
32
31
|
#include <boost/intrusive_ptr.hpp>
|
33
32
|
#include <boost/move/core.hpp>
|
34
33
|
#include <boost/container/vector.hpp>
|
@@ -54,6 +53,10 @@
|
|
54
53
|
#include <Core/SpawningKit/Result.h>
|
55
54
|
#include <Shared/ApplicationPoolApiKey.h>
|
56
55
|
|
56
|
+
namespace tut {
|
57
|
+
template<class Data> class test_object;
|
58
|
+
}
|
59
|
+
|
57
60
|
namespace Passenger {
|
58
61
|
namespace ApplicationPool2 {
|
59
62
|
|
@@ -100,6 +103,9 @@ typedef boost::container::vector<ProcessPtr> ProcessList;
|
|
100
103
|
*/
|
101
104
|
class Process {
|
102
105
|
public:
|
106
|
+
friend class Group;
|
107
|
+
template<class Data> friend class tut::test_object;
|
108
|
+
|
103
109
|
static const unsigned int MAX_SOCKETS_ACCEPTING_HTTP_REQUESTS = 3;
|
104
110
|
|
105
111
|
private:
|
@@ -337,9 +343,14 @@ private:
|
|
337
343
|
}
|
338
344
|
|
339
345
|
void destroySelf() const {
|
346
|
+
Context *context = getContext();
|
347
|
+
Process *storagePointer = const_cast<Process *>(this);
|
340
348
|
this->~Process();
|
341
|
-
|
342
|
-
|
349
|
+
|
350
|
+
LockGuard l(context->memoryManagementSyncher);
|
351
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
352
|
+
// is undefined behavior.
|
353
|
+
context->processObjectPool.free(storagePointer);
|
343
354
|
}
|
344
355
|
|
345
356
|
|
@@ -384,6 +395,10 @@ public:
|
|
384
395
|
|
385
396
|
/** Last time when a session was opened for this Process. */
|
386
397
|
unsigned long long lastUsed;
|
398
|
+
/** Which generation of app processes this one belongs to,
|
399
|
+
inherited from the app group, incremented when a restart
|
400
|
+
is initiated*/
|
401
|
+
const unsigned int generation;
|
387
402
|
/** Number of sessions currently open.
|
388
403
|
* @invariant session >= 0
|
389
404
|
*/
|
@@ -446,8 +461,7 @@ public:
|
|
446
461
|
/** Collected by Pool::collectAnalytics(). */
|
447
462
|
ProcessMetrics metrics;
|
448
463
|
|
449
|
-
|
450
|
-
Process(const BasicGroupInfo *groupInfo, const Json::Value &args)
|
464
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const Json::Value &args)
|
451
465
|
: info(this, groupInfo, args),
|
452
466
|
socketsAcceptingHttpRequestsCount(0),
|
453
467
|
spawnerCreationTime(getJsonUint64Field(args, "spawner_creation_time")),
|
@@ -458,6 +472,7 @@ public:
|
|
458
472
|
refcount(1),
|
459
473
|
index(-1),
|
460
474
|
lastUsed(spawnEndTime),
|
475
|
+
generation(gen),
|
461
476
|
sessions(0),
|
462
477
|
processed(0),
|
463
478
|
lifeStatus(ALIVE),
|
@@ -471,7 +486,7 @@ public:
|
|
471
486
|
indexSocketsAcceptingHttpRequests();
|
472
487
|
}
|
473
488
|
|
474
|
-
Process(const BasicGroupInfo *groupInfo, const SpawningKit::Result &skResult,
|
489
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const SpawningKit::Result &skResult,
|
475
490
|
const Json::Value &args)
|
476
491
|
: info(this, groupInfo, skResult),
|
477
492
|
socketsAcceptingHttpRequestsCount(0),
|
@@ -483,6 +498,7 @@ public:
|
|
483
498
|
refcount(1),
|
484
499
|
index(-1),
|
485
500
|
lastUsed(spawnEndTime),
|
501
|
+
generation(gen),
|
486
502
|
sessions(0),
|
487
503
|
processed(0),
|
488
504
|
lifeStatus(ALIVE),
|
@@ -109,9 +109,14 @@ private:
|
|
109
109
|
}
|
110
110
|
|
111
111
|
void destroySelf() const {
|
112
|
+
Context *context = this->context;
|
113
|
+
Session *storagePointer = const_cast<Session *>(this);
|
112
114
|
this->~Session();
|
115
|
+
|
113
116
|
LockGuard l(context->memoryManagementSyncher);
|
114
|
-
|
117
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
118
|
+
// is undefined behavior.
|
119
|
+
context->sessionObjectPool.free(storagePointer);
|
115
120
|
}
|
116
121
|
|
117
122
|
public:
|