passenger_dudemeister 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/DEVELOPERS.TXT +113 -0
- data/INSTALL +6 -0
- data/LICENSE +19 -0
- data/NEWS +429 -0
- data/PACKAGING.TXT +25 -0
- data/README +45 -0
- data/Rakefile +56 -0
- data/bin/passenger +32 -0
- data/bin/passenger-config +46 -0
- data/bin/passenger-install-apache2-module +237 -0
- data/bin/passenger-install-nginx-module +476 -0
- data/bin/passenger-make-enterprisey +82 -0
- data/bin/passenger-memory-stats +171 -0
- data/bin/passenger-status +211 -0
- data/build/agents.rb +80 -0
- data/build/apache2.rb +168 -0
- data/build/basics.rb +105 -0
- data/build/common_library.rb +268 -0
- data/build/config.rb +42 -0
- data/build/cplusplus_support.rb +61 -0
- data/build/cxx_tests.rb +219 -0
- data/build/documentation.rb +84 -0
- data/build/gempackagetask.rb +99 -0
- data/build/integration_tests.rb +64 -0
- data/build/misc.rb +153 -0
- data/build/nginx.rb +72 -0
- data/build/oxt_tests.rb +59 -0
- data/build/packagetask.rb +186 -0
- data/build/packaging.rb +194 -0
- data/build/rake_extensions.rb +182 -0
- data/build/rdoctask.rb +209 -0
- data/build/rpm.rb +98 -0
- data/build/ruby_extension.rb +52 -0
- data/build/ruby_tests.rb +49 -0
- data/build/test_basics.rb +43 -0
- data/debian/README.Debian +15 -0
- data/debian/changelog +185 -0
- data/debian/compat +1 -0
- data/debian/control +49 -0
- data/debian/copyright +20 -0
- data/debian/libapache2-mod-passenger.install +1 -0
- data/debian/libapache2-mod-passenger.postinst +36 -0
- data/debian/libapache2-mod-passenger.prerm +15 -0
- data/debian/passenger-common.install +4 -0
- data/debian/passenger.conf +4 -0
- data/debian/passenger.load +1 -0
- data/debian/prerm +2 -0
- data/debian/rules +37 -0
- data/debian/watch +3 -0
- data/dev/copy_boost_headers.rb +155 -0
- data/dev/find_owner_pipe_leaks.rb +128 -0
- data/dev/render_error_pages.rb +116 -0
- data/doc/ApplicationPool algorithm.txt +615 -0
- data/doc/Architectural overview.html +1 -0
- data/doc/Architectural overview.txt +334 -0
- data/doc/Doxyfile +241 -0
- data/doc/Security of user switching support.html +1 -0
- data/doc/Security of user switching support.txt +197 -0
- data/doc/Users guide Apache.html +1 -0
- data/doc/Users guide Apache.txt +2208 -0
- data/doc/Users guide Nginx.html +1 -0
- data/doc/Users guide Nginx.txt +1394 -0
- data/doc/Users guide Standalone.html +1 -0
- data/doc/Users guide Standalone.txt +40 -0
- data/doc/definitions.h +5 -0
- data/doc/images/by_sa.png +0 -0
- data/doc/images/conservative_spawning.png +0 -0
- data/doc/images/conservative_spawning.svg +248 -0
- data/doc/images/icons/README +5 -0
- data/doc/images/icons/callouts/1.png +0 -0
- data/doc/images/icons/callouts/10.png +0 -0
- data/doc/images/icons/callouts/11.png +0 -0
- data/doc/images/icons/callouts/12.png +0 -0
- data/doc/images/icons/callouts/13.png +0 -0
- data/doc/images/icons/callouts/14.png +0 -0
- data/doc/images/icons/callouts/15.png +0 -0
- data/doc/images/icons/callouts/2.png +0 -0
- data/doc/images/icons/callouts/3.png +0 -0
- data/doc/images/icons/callouts/4.png +0 -0
- data/doc/images/icons/callouts/5.png +0 -0
- data/doc/images/icons/callouts/6.png +0 -0
- data/doc/images/icons/callouts/7.png +0 -0
- data/doc/images/icons/callouts/8.png +0 -0
- data/doc/images/icons/callouts/9.png +0 -0
- data/doc/images/icons/caution.png +0 -0
- data/doc/images/icons/example.png +0 -0
- data/doc/images/icons/home.png +0 -0
- data/doc/images/icons/important.png +0 -0
- data/doc/images/icons/next.png +0 -0
- data/doc/images/icons/note.png +0 -0
- data/doc/images/icons/prev.png +0 -0
- data/doc/images/icons/tip.png +0 -0
- data/doc/images/icons/up.png +0 -0
- data/doc/images/icons/warning.png +0 -0
- data/doc/images/passenger_architecture.png +0 -0
- data/doc/images/passenger_architecture.svg +401 -0
- data/doc/images/phusion_banner.png +0 -0
- data/doc/images/smart-lv2.png +0 -0
- data/doc/images/smart-lv2.svg +320 -0
- data/doc/images/spawn_server_architecture.png +0 -0
- data/doc/images/spawn_server_architecture.svg +655 -0
- data/doc/images/typical_isolated_web_application.png +0 -0
- data/doc/images/typical_isolated_web_application.svg +213 -0
- data/doc/rdoc/classes/ConditionVariable.html +215 -0
- data/doc/rdoc/classes/Exception.html +120 -0
- data/doc/rdoc/classes/GC.html +113 -0
- data/doc/rdoc/classes/IO.html +221 -0
- data/doc/rdoc/classes/PhusionPassenger.html +397 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +180 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +647 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +654 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +619 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +142 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +368 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +231 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +588 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +147 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +279 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +123 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +341 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +294 -0
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +199 -0
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +155 -0
- data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +367 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +95 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +351 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +200 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +410 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +156 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +115 -0
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +202 -0
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
- data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +273 -0
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +162 -0
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +673 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +415 -0
- data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +134 -0
- data/doc/rdoc/classes/PhusionPassenger/Packaging.html +129 -0
- data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +1972 -0
- data/doc/rdoc/classes/PhusionPassenger/Plugin.html +237 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +312 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +218 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +114 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +259 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +139 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +118 -0
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +135 -0
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +378 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone.html +111 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +252 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +161 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +368 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +132 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +151 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +189 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +177 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +341 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +203 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +156 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +168 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +86 -0
- data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +135 -0
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +1543 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +204 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +171 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +260 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +265 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +120 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +561 -0
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +182 -0
- data/doc/rdoc/classes/Process.html +115 -0
- data/doc/rdoc/classes/Signal.html +139 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/DEVELOPERS_TXT.html +280 -0
- data/doc/rdoc/files/README.html +157 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +130 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +135 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +141 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +146 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +147 -0
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
- data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +132 -0
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +128 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +137 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +160 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +136 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +133 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +136 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +120 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +100 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +179 -0
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +132 -0
- data/doc/rdoc/fr_class_index.html +138 -0
- data/doc/rdoc/fr_file_index.html +108 -0
- data/doc/rdoc/fr_method_index.html +433 -0
- data/doc/rdoc/index.html +26 -0
- data/doc/rdoc/rdoc-style.css +187 -0
- data/doc/template/horo.rb +613 -0
- data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +201 -0
- data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
- data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +303 -0
- data/doc/users_guide_snippets/global_queueing_explained.txt +74 -0
- data/doc/users_guide_snippets/passenger_spawn_method.txt +49 -0
- data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
- data/doc/users_guide_snippets/tips.txt +207 -0
- data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
- data/ext/apache2/Bucket.cpp +190 -0
- data/ext/apache2/Bucket.h +87 -0
- data/ext/apache2/Configuration.cpp +717 -0
- data/ext/apache2/Configuration.h +51 -0
- data/ext/apache2/Configuration.hpp +462 -0
- data/ext/apache2/DirectoryMapper.h +280 -0
- data/ext/apache2/HelperAgent.cpp +365 -0
- data/ext/apache2/Hooks.cpp +1757 -0
- data/ext/apache2/Hooks.h +45 -0
- data/ext/apache2/mod_passenger.c +44 -0
- data/ext/boost/algorithm/string/case_conv.hpp +176 -0
- data/ext/boost/algorithm/string/compare.hpp +199 -0
- data/ext/boost/algorithm/string/concept.hpp +83 -0
- data/ext/boost/algorithm/string/config.hpp +28 -0
- data/ext/boost/algorithm/string/constants.hpp +36 -0
- data/ext/boost/algorithm/string/detail/case_conv.hpp +121 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +204 -0
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +273 -0
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +89 -0
- data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
- data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
- data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
- data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
- data/ext/boost/algorithm/string/detail/util.hpp +106 -0
- data/ext/boost/algorithm/string/erase.hpp +844 -0
- data/ext/boost/algorithm/string/find_format.hpp +287 -0
- data/ext/boost/algorithm/string/finder.hpp +270 -0
- data/ext/boost/algorithm/string/formatter.hpp +103 -0
- data/ext/boost/algorithm/string/replace.hpp +928 -0
- data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
- data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
- data/ext/boost/assert.hpp +50 -0
- data/ext/boost/bind.hpp +24 -0
- data/ext/boost/bind/arg.hpp +62 -0
- data/ext/boost/bind/bind.hpp +1751 -0
- data/ext/boost/bind/bind_cc.hpp +117 -0
- data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
- data/ext/boost/bind/bind_mf_cc.hpp +227 -0
- data/ext/boost/bind/bind_template.hpp +345 -0
- data/ext/boost/bind/mem_fn.hpp +389 -0
- data/ext/boost/bind/mem_fn_cc.hpp +103 -0
- data/ext/boost/bind/mem_fn_template.hpp +1047 -0
- data/ext/boost/bind/placeholders.hpp +69 -0
- data/ext/boost/bind/storage.hpp +475 -0
- data/ext/boost/call_traits.hpp +24 -0
- data/ext/boost/checked_delete.hpp +69 -0
- data/ext/boost/concept/assert.hpp +46 -0
- data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
- data/ext/boost/concept/detail/concept_def.hpp +51 -0
- data/ext/boost/concept/detail/concept_undef.hpp +5 -0
- data/ext/boost/concept/detail/general.hpp +75 -0
- data/ext/boost/concept/detail/has_constraints.hpp +50 -0
- data/ext/boost/concept/usage.hpp +44 -0
- data/ext/boost/concept_check.hpp +1007 -0
- data/ext/boost/config.hpp +70 -0
- data/ext/boost/config/abi/borland_prefix.hpp +27 -0
- data/ext/boost/config/abi/borland_suffix.hpp +12 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +22 -0
- data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
- data/ext/boost/config/abi_prefix.hpp +25 -0
- data/ext/boost/config/abi_suffix.hpp +27 -0
- data/ext/boost/config/auto_link.hpp +420 -0
- data/ext/boost/config/compiler/borland.hpp +275 -0
- data/ext/boost/config/compiler/clang.hpp +62 -0
- data/ext/boost/config/compiler/codegear.hpp +177 -0
- data/ext/boost/config/compiler/comeau.hpp +59 -0
- data/ext/boost/config/compiler/common_edg.hpp +99 -0
- data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
- data/ext/boost/config/compiler/digitalmars.hpp +93 -0
- data/ext/boost/config/compiler/gcc.hpp +243 -0
- data/ext/boost/config/compiler/gcc_xml.hpp +55 -0
- data/ext/boost/config/compiler/greenhills.hpp +28 -0
- data/ext/boost/config/compiler/hp_acc.hpp +127 -0
- data/ext/boost/config/compiler/intel.hpp +196 -0
- data/ext/boost/config/compiler/kai.hpp +33 -0
- data/ext/boost/config/compiler/metrowerks.hpp +139 -0
- data/ext/boost/config/compiler/mpw.hpp +81 -0
- data/ext/boost/config/compiler/nvcc.hpp +86 -0
- data/ext/boost/config/compiler/pgi.hpp +77 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +29 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +144 -0
- data/ext/boost/config/compiler/vacpp.hpp +96 -0
- data/ext/boost/config/compiler/visualc.hpp +274 -0
- data/ext/boost/config/no_tr1/cmath.hpp +28 -0
- data/ext/boost/config/no_tr1/complex.hpp +28 -0
- data/ext/boost/config/no_tr1/functional.hpp +28 -0
- data/ext/boost/config/no_tr1/memory.hpp +28 -0
- data/ext/boost/config/no_tr1/utility.hpp +28 -0
- data/ext/boost/config/platform/aix.hpp +33 -0
- data/ext/boost/config/platform/amigaos.hpp +15 -0
- data/ext/boost/config/platform/beos.hpp +26 -0
- data/ext/boost/config/platform/bsd.hpp +86 -0
- data/ext/boost/config/platform/cygwin.hpp +48 -0
- data/ext/boost/config/platform/hpux.hpp +87 -0
- data/ext/boost/config/platform/irix.hpp +31 -0
- data/ext/boost/config/platform/linux.hpp +98 -0
- data/ext/boost/config/platform/macos.hpp +86 -0
- data/ext/boost/config/platform/qnxnto.hpp +31 -0
- data/ext/boost/config/platform/solaris.hpp +28 -0
- data/ext/boost/config/platform/symbian.hpp +94 -0
- data/ext/boost/config/platform/vxworks.hpp +31 -0
- data/ext/boost/config/platform/win32.hpp +65 -0
- data/ext/boost/config/posix_features.hpp +95 -0
- data/ext/boost/config/requires_threads.hpp +92 -0
- data/ext/boost/config/select_compiler_config.hpp +129 -0
- data/ext/boost/config/select_platform_config.hpp +98 -0
- data/ext/boost/config/select_stdlib_config.hpp +77 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +148 -0
- data/ext/boost/config/stdlib/libcomo.hpp +72 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +128 -0
- data/ext/boost/config/stdlib/modena.hpp +56 -0
- data/ext/boost/config/stdlib/msl.hpp +84 -0
- data/ext/boost/config/stdlib/roguewave.hpp +180 -0
- data/ext/boost/config/stdlib/sgi.hpp +137 -0
- data/ext/boost/config/stdlib/stlport.hpp +237 -0
- data/ext/boost/config/stdlib/vacpp.hpp +44 -0
- data/ext/boost/config/suffix.hpp +639 -0
- data/ext/boost/config/user.hpp +124 -0
- data/ext/boost/config/warning_disable.hpp +47 -0
- data/ext/boost/cstdint.hpp +504 -0
- data/ext/boost/current_function.hpp +67 -0
- data/ext/boost/date_time/adjust_functors.hpp +178 -0
- data/ext/boost/date_time/c_time.hpp +107 -0
- data/ext/boost/date_time/compiler_config.hpp +171 -0
- data/ext/boost/date_time/constrained_value.hpp +121 -0
- data/ext/boost/date_time/date.hpp +208 -0
- data/ext/boost/date_time/date_clock_device.hpp +77 -0
- data/ext/boost/date_time/date_defs.hpp +26 -0
- data/ext/boost/date_time/date_duration.hpp +146 -0
- data/ext/boost/date_time/date_duration_types.hpp +269 -0
- data/ext/boost/date_time/date_facet.hpp +764 -0
- data/ext/boost/date_time/date_format_simple.hpp +159 -0
- data/ext/boost/date_time/date_formatting.hpp +127 -0
- data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
- data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
- data/ext/boost/date_time/date_generator_formatter.hpp +265 -0
- data/ext/boost/date_time/date_generator_parser.hpp +330 -0
- data/ext/boost/date_time/date_generators.hpp +509 -0
- data/ext/boost/date_time/date_iterator.hpp +101 -0
- data/ext/boost/date_time/date_names_put.hpp +320 -0
- data/ext/boost/date_time/date_parsing.hpp +316 -0
- data/ext/boost/date_time/dst_rules.hpp +391 -0
- data/ext/boost/date_time/filetime_functions.hpp +170 -0
- data/ext/boost/date_time/format_date_parser.hpp +743 -0
- data/ext/boost/date_time/gregorian/conversion.hpp +68 -0
- data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
- data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
- data/ext/boost/date_time/gregorian/greg_calendar.hpp +48 -0
- data/ext/boost/date_time/gregorian/greg_date.hpp +136 -0
- data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
- data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
- data/ext/boost/date_time/gregorian/greg_duration.hpp +134 -0
- data/ext/boost/date_time/gregorian/greg_duration_types.hpp +43 -0
- data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
- data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
- data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
- data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
- data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
- data/ext/boost/date_time/gregorian/gregorian_io.hpp +784 -0
- data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
- data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
- data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
- data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
- data/ext/boost/date_time/int_adapter.hpp +509 -0
- data/ext/boost/date_time/iso_format.hpp +303 -0
- data/ext/boost/date_time/locale_config.hpp +31 -0
- data/ext/boost/date_time/microsec_time_clock.hpp +127 -0
- data/ext/boost/date_time/parse_format_base.hpp +29 -0
- data/ext/boost/date_time/period.hpp +377 -0
- data/ext/boost/date_time/period_formatter.hpp +196 -0
- data/ext/boost/date_time/period_parser.hpp +198 -0
- data/ext/boost/date_time/posix_time/conversion.hpp +94 -0
- data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
- data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
- data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
- data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
- data/ext/boost/date_time/posix_time/posix_time_io.hpp +239 -0
- data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
- data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
- data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
- data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
- data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
- data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
- data/ext/boost/date_time/special_defs.hpp +25 -0
- data/ext/boost/date_time/special_values_formatter.hpp +96 -0
- data/ext/boost/date_time/special_values_parser.hpp +159 -0
- data/ext/boost/date_time/string_convert.hpp +33 -0
- data/ext/boost/date_time/string_parse_tree.hpp +278 -0
- data/ext/boost/date_time/strings_from_facet.hpp +125 -0
- data/ext/boost/date_time/time.hpp +191 -0
- data/ext/boost/date_time/time_clock.hpp +83 -0
- data/ext/boost/date_time/time_defs.hpp +43 -0
- data/ext/boost/date_time/time_duration.hpp +282 -0
- data/ext/boost/date_time/time_facet.hpp +1367 -0
- data/ext/boost/date_time/time_formatting_streams.hpp +122 -0
- data/ext/boost/date_time/time_iterator.hpp +52 -0
- data/ext/boost/date_time/time_parsing.hpp +321 -0
- data/ext/boost/date_time/time_resolution_traits.hpp +144 -0
- data/ext/boost/date_time/time_system_counted.hpp +254 -0
- data/ext/boost/date_time/time_system_split.hpp +207 -0
- data/ext/boost/date_time/wrapping_int.hpp +169 -0
- data/ext/boost/date_time/year_month_day.hpp +45 -0
- data/ext/boost/detail/call_traits.hpp +164 -0
- data/ext/boost/detail/endian.hpp +76 -0
- data/ext/boost/detail/indirect_traits.hpp +487 -0
- data/ext/boost/detail/iterator.hpp +494 -0
- data/ext/boost/detail/lcast_precision.hpp +184 -0
- data/ext/boost/detail/limits.hpp +449 -0
- data/ext/boost/detail/no_exceptions_support.hpp +87 -0
- data/ext/boost/detail/reference_content.hpp +141 -0
- data/ext/boost/detail/sp_typeinfo.hpp +129 -0
- data/ext/boost/detail/workaround.hpp +267 -0
- data/ext/boost/enable_shared_from_this.hpp +18 -0
- data/ext/boost/exception/current_exception_cast.hpp +43 -0
- data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
- data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
- data/ext/boost/exception/detail/exception_ptr.hpp +431 -0
- data/ext/boost/exception/detail/is_output_streamable.hpp +60 -0
- data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
- data/ext/boost/exception/detail/type_info.hpp +83 -0
- data/ext/boost/exception/diagnostic_information.hpp +184 -0
- data/ext/boost/exception/exception.hpp +436 -0
- data/ext/boost/exception/get_error_info.hpp +130 -0
- data/ext/boost/exception/info.hpp +200 -0
- data/ext/boost/exception/to_string.hpp +83 -0
- data/ext/boost/exception/to_string_stub.hpp +109 -0
- data/ext/boost/exception_ptr.hpp +11 -0
- data/ext/boost/function.hpp +66 -0
- data/ext/boost/function/detail/function_iterate.hpp +16 -0
- data/ext/boost/function/detail/maybe_include.hpp +267 -0
- data/ext/boost/function/detail/prologue.hpp +26 -0
- data/ext/boost/function/function_base.hpp +904 -0
- data/ext/boost/function/function_fwd.hpp +70 -0
- data/ext/boost/function/function_template.hpp +1158 -0
- data/ext/boost/function_equal.hpp +28 -0
- data/ext/boost/get_pointer.hpp +33 -0
- data/ext/boost/implicit_cast.hpp +29 -0
- data/ext/boost/integer.hpp +257 -0
- data/ext/boost/integer_fwd.hpp +180 -0
- data/ext/boost/integer_traits.hpp +261 -0
- data/ext/boost/io/ios_state.hpp +439 -0
- data/ext/boost/io_fwd.hpp +67 -0
- data/ext/boost/is_placeholder.hpp +31 -0
- data/ext/boost/iterator.hpp +59 -0
- data/ext/boost/iterator/detail/config_def.hpp +137 -0
- data/ext/boost/iterator/detail/config_undef.hpp +25 -0
- data/ext/boost/iterator/detail/enable_if.hpp +86 -0
- data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
- data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
- data/ext/boost/iterator/interoperable.hpp +50 -0
- data/ext/boost/iterator/iterator_adaptor.hpp +371 -0
- data/ext/boost/iterator/iterator_categories.hpp +188 -0
- data/ext/boost/iterator/iterator_concepts.hpp +284 -0
- data/ext/boost/iterator/iterator_facade.hpp +878 -0
- data/ext/boost/iterator/iterator_traits.hpp +92 -0
- data/ext/boost/iterator/reverse_iterator.hpp +69 -0
- data/ext/boost/iterator/transform_iterator.hpp +187 -0
- data/ext/boost/lexical_cast.hpp +1213 -0
- data/ext/boost/limits.hpp +146 -0
- data/ext/boost/make_shared.hpp +17 -0
- data/ext/boost/mem_fn.hpp +24 -0
- data/ext/boost/memory_order.hpp +53 -0
- data/ext/boost/mpl/always.hpp +39 -0
- data/ext/boost/mpl/and.hpp +60 -0
- data/ext/boost/mpl/apply.hpp +229 -0
- data/ext/boost/mpl/apply_fwd.hpp +107 -0
- data/ext/boost/mpl/apply_wrap.hpp +234 -0
- data/ext/boost/mpl/arg.hpp +131 -0
- data/ext/boost/mpl/arg_fwd.hpp +28 -0
- data/ext/boost/mpl/assert.hpp +370 -0
- data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
- data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
- data/ext/boost/mpl/aux_/arity.hpp +39 -0
- data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
- data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
- data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
- data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
- data/ext/boost/mpl/aux_/config/compiler.hpp +66 -0
- data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
- data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
- data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
- data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
- data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +34 -0
- data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
- data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
- data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
- data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
- data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
- data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
- data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
- data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
- data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
- data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
- data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/has_type.hpp +23 -0
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
- data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
- data/ext/boost/mpl/aux_/na.hpp +95 -0
- data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
- data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
- data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
- data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
- data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
- data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
- data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
- data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
- data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
- data/ext/boost/mpl/bind.hpp +551 -0
- data/ext/boost/mpl/bind_fwd.hpp +99 -0
- data/ext/boost/mpl/bool.hpp +39 -0
- data/ext/boost/mpl/bool_fwd.hpp +33 -0
- data/ext/boost/mpl/eval_if.hpp +71 -0
- data/ext/boost/mpl/has_xxx.hpp +640 -0
- data/ext/boost/mpl/identity.hpp +45 -0
- data/ext/boost/mpl/if.hpp +135 -0
- data/ext/boost/mpl/int.hpp +22 -0
- data/ext/boost/mpl/int_fwd.hpp +27 -0
- data/ext/boost/mpl/integral_c.hpp +51 -0
- data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
- data/ext/boost/mpl/integral_c_tag.hpp +26 -0
- data/ext/boost/mpl/lambda.hpp +29 -0
- data/ext/boost/mpl/lambda_fwd.hpp +57 -0
- data/ext/boost/mpl/limits/arity.hpp +21 -0
- data/ext/boost/mpl/logical.hpp +21 -0
- data/ext/boost/mpl/next.hpp +19 -0
- data/ext/boost/mpl/next_prior.hpp +49 -0
- data/ext/boost/mpl/not.hpp +51 -0
- data/ext/boost/mpl/or.hpp +61 -0
- data/ext/boost/mpl/placeholders.hpp +100 -0
- data/ext/boost/mpl/protect.hpp +55 -0
- data/ext/boost/mpl/quote.hpp +151 -0
- data/ext/boost/mpl/size_t.hpp +25 -0
- data/ext/boost/mpl/size_t_fwd.hpp +28 -0
- data/ext/boost/mpl/void.hpp +76 -0
- data/ext/boost/mpl/void_fwd.hpp +26 -0
- data/ext/boost/next_prior.hpp +51 -0
- data/ext/boost/non_type.hpp +27 -0
- data/ext/boost/noncopyable.hpp +36 -0
- data/ext/boost/none.hpp +28 -0
- data/ext/boost/none_t.hpp +24 -0
- data/ext/boost/operators.hpp +976 -0
- data/ext/boost/optional.hpp +18 -0
- data/ext/boost/optional/optional.hpp +924 -0
- data/ext/boost/optional/optional_fwd.hpp +22 -0
- data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
- data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
- data/ext/boost/preprocessor/array/data.hpp +28 -0
- data/ext/boost/preprocessor/array/elem.hpp +29 -0
- data/ext/boost/preprocessor/array/size.hpp +28 -0
- data/ext/boost/preprocessor/cat.hpp +35 -0
- data/ext/boost/preprocessor/comma_if.hpp +17 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/config/config.hpp +70 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
- data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
- data/ext/boost/preprocessor/control/if.hpp +30 -0
- data/ext/boost/preprocessor/control/iif.hpp +34 -0
- data/ext/boost/preprocessor/control/while.hpp +312 -0
- data/ext/boost/preprocessor/debug/error.hpp +33 -0
- data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
- data/ext/boost/preprocessor/detail/check.hpp +48 -0
- data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
- data/ext/boost/preprocessor/empty.hpp +17 -0
- data/ext/boost/preprocessor/enum.hpp +17 -0
- data/ext/boost/preprocessor/enum_params.hpp +17 -0
- data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
- data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
- data/ext/boost/preprocessor/identity.hpp +17 -0
- data/ext/boost/preprocessor/inc.hpp +17 -0
- data/ext/boost/preprocessor/iterate.hpp +17 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
- data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
- data/ext/boost/preprocessor/list/adt.hpp +73 -0
- data/ext/boost/preprocessor/list/append.hpp +40 -0
- data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
- data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
- data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
- data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
- data/ext/boost/preprocessor/list/reverse.hpp +40 -0
- data/ext/boost/preprocessor/list/transform.hpp +49 -0
- data/ext/boost/preprocessor/logical/and.hpp +30 -0
- data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
- data/ext/boost/preprocessor/logical/bool.hpp +288 -0
- data/ext/boost/preprocessor/logical/compl.hpp +36 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
- data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
- data/ext/boost/preprocessor/repeat.hpp +17 -0
- data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
- data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
- data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
- data/ext/boost/preprocessor/repetition/for.hpp +306 -0
- data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
- data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
- data/ext/boost/preprocessor/seq/cat.hpp +48 -0
- data/ext/boost/preprocessor/seq/elem.hpp +304 -0
- data/ext/boost/preprocessor/seq/enum.hpp +288 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
- data/ext/boost/preprocessor/seq/seq.hpp +44 -0
- data/ext/boost/preprocessor/seq/size.hpp +548 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
- data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
- data/ext/boost/preprocessor/slot/slot.hpp +32 -0
- data/ext/boost/preprocessor/stringize.hpp +33 -0
- data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
- data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
- data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
- data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
- data/ext/boost/range/algorithm/equal.hpp +188 -0
- data/ext/boost/range/as_literal.hpp +127 -0
- data/ext/boost/range/begin.hpp +132 -0
- data/ext/boost/range/concepts.hpp +331 -0
- data/ext/boost/range/config.hpp +54 -0
- data/ext/boost/range/const_iterator.hpp +67 -0
- data/ext/boost/range/detail/common.hpp +117 -0
- data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
- data/ext/boost/range/detail/implementation_help.hpp +103 -0
- data/ext/boost/range/detail/misc_concept.hpp +33 -0
- data/ext/boost/range/detail/sfinae.hpp +77 -0
- data/ext/boost/range/detail/str_types.hpp +38 -0
- data/ext/boost/range/difference_type.hpp +29 -0
- data/ext/boost/range/distance.hpp +34 -0
- data/ext/boost/range/empty.hpp +34 -0
- data/ext/boost/range/end.hpp +131 -0
- data/ext/boost/range/functions.hpp +27 -0
- data/ext/boost/range/iterator.hpp +72 -0
- data/ext/boost/range/iterator_range.hpp +16 -0
- data/ext/boost/range/iterator_range_core.hpp +542 -0
- data/ext/boost/range/iterator_range_io.hpp +93 -0
- data/ext/boost/range/mutable_iterator.hpp +67 -0
- data/ext/boost/range/rbegin.hpp +65 -0
- data/ext/boost/range/rend.hpp +65 -0
- data/ext/boost/range/reverse_iterator.hpp +40 -0
- data/ext/boost/range/size.hpp +36 -0
- data/ext/boost/range/size_type.hpp +79 -0
- data/ext/boost/range/value_type.hpp +34 -0
- data/ext/boost/ref.hpp +189 -0
- data/ext/boost/scoped_array.hpp +16 -0
- data/ext/boost/scoped_ptr.hpp +16 -0
- data/ext/boost/shared_array.hpp +19 -0
- data/ext/boost/shared_ptr.hpp +19 -0
- data/ext/boost/smart_ptr/bad_weak_ptr.hpp +59 -0
- data/ext/boost/smart_ptr/detail/atomic_count.hpp +119 -0
- data/ext/boost/smart_ptr/detail/atomic_count_gcc.hpp +72 -0
- data/ext/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +77 -0
- data/ext/boost/smart_ptr/detail/atomic_count_pthreads.hpp +96 -0
- data/ext/boost/smart_ptr/detail/atomic_count_solaris.hpp +59 -0
- data/ext/boost/smart_ptr/detail/atomic_count_sync.hpp +61 -0
- data/ext/boost/smart_ptr/detail/atomic_count_win32.hpp +63 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
- data/ext/boost/smart_ptr/detail/shared_count.hpp +444 -0
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +150 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +170 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +158 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +157 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +181 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +166 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +173 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +107 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +135 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +113 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +155 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp +130 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +231 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
- data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
- data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
- data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
- data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
- data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
- data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
- data/ext/boost/smart_ptr/make_shared.hpp +508 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
- data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
- data/ext/boost/smart_ptr/shared_array.hpp +147 -0
- data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
- data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
- data/ext/boost/src/pthread/once.cpp +51 -0
- data/ext/boost/src/pthread/thread.cpp +616 -0
- data/ext/boost/src/pthread/timeconv.inl +133 -0
- data/ext/boost/src/tss_null.cpp +34 -0
- data/ext/boost/static_assert.hpp +132 -0
- data/ext/boost/thread.hpp +26 -0
- data/ext/boost/thread/barrier.hpp +64 -0
- data/ext/boost/thread/condition.hpp +16 -0
- data/ext/boost/thread/condition_variable.hpp +21 -0
- data/ext/boost/thread/detail/config.hpp +100 -0
- data/ext/boost/thread/detail/force_cast.hpp +39 -0
- data/ext/boost/thread/detail/move.hpp +60 -0
- data/ext/boost/thread/detail/platform.hpp +71 -0
- data/ext/boost/thread/detail/singleton.hpp +59 -0
- data/ext/boost/thread/detail/thread.hpp +540 -0
- data/ext/boost/thread/detail/thread_group.hpp +108 -0
- data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
- data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
- data/ext/boost/thread/detail/tss_hooks.hpp +65 -0
- data/ext/boost/thread/exceptions.hpp +223 -0
- data/ext/boost/thread/future.hpp +1375 -0
- data/ext/boost/thread/locks.hpp +1585 -0
- data/ext/boost/thread/mutex.hpp +21 -0
- data/ext/boost/thread/once.hpp +33 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +179 -0
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +102 -0
- data/ext/boost/thread/pthread/mutex.hpp +236 -0
- data/ext/boost/thread/pthread/once.hpp +95 -0
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +54 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +345 -0
- data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
- data/ext/boost/thread/pthread/thread_data.hpp +129 -0
- data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
- data/ext/boost/thread/pthread/timespec.hpp +36 -0
- data/ext/boost/thread/recursive_mutex.hpp +21 -0
- data/ext/boost/thread/shared_mutex.hpp +21 -0
- data/ext/boost/thread/thread.hpp +27 -0
- data/ext/boost/thread/thread_time.hpp +50 -0
- data/ext/boost/thread/tss.hpp +113 -0
- data/ext/boost/thread/xtime.hpp +92 -0
- data/ext/boost/throw_exception.hpp +91 -0
- data/ext/boost/token_functions.hpp +641 -0
- data/ext/boost/token_iterator.hpp +128 -0
- data/ext/boost/tokenizer.hpp +98 -0
- data/ext/boost/type.hpp +18 -0
- data/ext/boost/type_traits/add_const.hpp +47 -0
- data/ext/boost/type_traits/add_pointer.hpp +72 -0
- data/ext/boost/type_traits/add_reference.hpp +107 -0
- data/ext/boost/type_traits/add_volatile.hpp +47 -0
- data/ext/boost/type_traits/alignment_of.hpp +128 -0
- data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
- data/ext/boost/type_traits/composite_traits.hpp +29 -0
- data/ext/boost/type_traits/config.hpp +76 -0
- data/ext/boost/type_traits/conversion_traits.hpp +17 -0
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
- data/ext/boost/type_traits/detail/false_result.hpp +28 -0
- data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
- data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
- data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
- data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
- data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
- data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
- data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
- data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
- data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
- data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
- data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
- data/ext/boost/type_traits/function_traits.hpp +236 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
- data/ext/boost/type_traits/ice.hpp +20 -0
- data/ext/boost/type_traits/integral_constant.hpp +53 -0
- data/ext/boost/type_traits/intrinsics.hpp +240 -0
- data/ext/boost/type_traits/is_abstract.hpp +153 -0
- data/ext/boost/type_traits/is_arithmetic.hpp +51 -0
- data/ext/boost/type_traits/is_array.hpp +91 -0
- data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
- data/ext/boost/type_traits/is_base_of.hpp +51 -0
- data/ext/boost/type_traits/is_class.hpp +140 -0
- data/ext/boost/type_traits/is_const.hpp +165 -0
- data/ext/boost/type_traits/is_convertible.hpp +430 -0
- data/ext/boost/type_traits/is_enum.hpp +189 -0
- data/ext/boost/type_traits/is_float.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +106 -0
- data/ext/boost/type_traits/is_fundamental.hpp +45 -0
- data/ext/boost/type_traits/is_integral.hpp +78 -0
- data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +136 -0
- data/ext/boost/type_traits/is_member_pointer.hpp +116 -0
- data/ext/boost/type_traits/is_pod.hpp +135 -0
- data/ext/boost/type_traits/is_pointer.hpp +162 -0
- data/ext/boost/type_traits/is_reference.hpp +45 -0
- data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
- data/ext/boost/type_traits/is_same.hpp +103 -0
- data/ext/boost/type_traits/is_scalar.hpp +55 -0
- data/ext/boost/type_traits/is_signed.hpp +135 -0
- data/ext/boost/type_traits/is_union.hpp +49 -0
- data/ext/boost/type_traits/is_unsigned.hpp +130 -0
- data/ext/boost/type_traits/is_void.hpp +38 -0
- data/ext/boost/type_traits/is_volatile.hpp +152 -0
- data/ext/boost/type_traits/make_unsigned.hpp +137 -0
- data/ext/boost/type_traits/remove_const.hpp +90 -0
- data/ext/boost/type_traits/remove_cv.hpp +83 -0
- data/ext/boost/type_traits/remove_pointer.hpp +43 -0
- data/ext/boost/type_traits/remove_reference.hpp +70 -0
- data/ext/boost/type_traits/type_with_alignment.hpp +393 -0
- data/ext/boost/units/detail/utility.hpp +104 -0
- data/ext/boost/utility.hpp +20 -0
- data/ext/boost/utility/addressof.hpp +102 -0
- data/ext/boost/utility/base_from_member.hpp +87 -0
- data/ext/boost/utility/binary.hpp +708 -0
- data/ext/boost/utility/compare_pointees.hpp +68 -0
- data/ext/boost/utility/enable_if.hpp +119 -0
- data/ext/boost/visit_each.hpp +29 -0
- data/ext/boost/weak_ptr.hpp +18 -0
- data/ext/common/AbstractSpawnManager.h +110 -0
- data/ext/common/Account.h +175 -0
- data/ext/common/AccountsDatabase.cpp +81 -0
- data/ext/common/AccountsDatabase.h +130 -0
- data/ext/common/AgentBase.cpp +323 -0
- data/ext/common/AgentBase.h +39 -0
- data/ext/common/AgentsStarter.cpp +154 -0
- data/ext/common/AgentsStarter.h +81 -0
- data/ext/common/AgentsStarter.hpp +646 -0
- data/ext/common/ApplicationPool/Client.h +796 -0
- data/ext/common/ApplicationPool/Interface.h +295 -0
- data/ext/common/ApplicationPool/Pool.h +1327 -0
- data/ext/common/ApplicationPool/Server.h +475 -0
- data/ext/common/BCrypt.cpp +343 -0
- data/ext/common/BCrypt.h +73 -0
- data/ext/common/Blowfish.c +685 -0
- data/ext/common/Blowfish.h +103 -0
- data/ext/common/Constants.h +48 -0
- data/ext/common/EventedClient.h +702 -0
- data/ext/common/EventedMessageServer.h +327 -0
- data/ext/common/EventedServer.h +295 -0
- data/ext/common/Exceptions.h +348 -0
- data/ext/common/FileDescriptor.h +293 -0
- data/ext/common/HelperAgent/BacktracesServer.h +59 -0
- data/ext/common/IniFile.h +488 -0
- data/ext/common/Logging.cpp +64 -0
- data/ext/common/Logging.h +695 -0
- data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
- data/ext/common/LoggingAgent/DataStoreId.h +177 -0
- data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
- data/ext/common/LoggingAgent/Main.cpp +278 -0
- data/ext/common/LoggingAgent/RemoteSender.h +468 -0
- data/ext/common/MessageChannel.h +737 -0
- data/ext/common/MessageClient.h +297 -0
- data/ext/common/MessageReadersWriters.h +508 -0
- data/ext/common/MessageServer.h +581 -0
- data/ext/common/PoolOptions.h +518 -0
- data/ext/common/Process.h +255 -0
- data/ext/common/RandomGenerator.h +160 -0
- data/ext/common/ResourceLocator.h +134 -0
- data/ext/common/SafeLibev.h +149 -0
- data/ext/common/ServerInstanceDir.h +347 -0
- data/ext/common/Session.h +470 -0
- data/ext/common/SpawnManager.h +616 -0
- data/ext/common/StaticString.h +298 -0
- data/ext/common/StringListCreator.h +83 -0
- data/ext/common/Utils.cpp +972 -0
- data/ext/common/Utils.h +428 -0
- data/ext/common/Utils/Base64.cpp +143 -0
- data/ext/common/Utils/Base64.h +83 -0
- data/ext/common/Utils/BlockingQueue.h +136 -0
- data/ext/common/Utils/BufferedIO.h +196 -0
- data/ext/common/Utils/CachedFileStat.cpp +62 -0
- data/ext/common/Utils/CachedFileStat.h +51 -0
- data/ext/common/Utils/CachedFileStat.hpp +243 -0
- data/ext/common/Utils/FileChangeChecker.h +209 -0
- data/ext/common/Utils/IOUtils.cpp +913 -0
- data/ext/common/Utils/IOUtils.h +370 -0
- data/ext/common/Utils/MD5.cpp +406 -0
- data/ext/common/Utils/MD5.h +98 -0
- data/ext/common/Utils/MemZeroGuard.h +103 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +590 -0
- data/ext/common/Utils/ScopeGuard.h +72 -0
- data/ext/common/Utils/StrIntUtils.cpp +363 -0
- data/ext/common/Utils/StrIntUtils.h +231 -0
- data/ext/common/Utils/SystemTime.cpp +37 -0
- data/ext/common/Utils/SystemTime.h +201 -0
- data/ext/common/Utils/Timer.h +152 -0
- data/ext/common/Utils/VariantMap.h +363 -0
- data/ext/common/Utils/utf8.h +35 -0
- data/ext/common/Utils/utf8/checked.h +324 -0
- data/ext/common/Utils/utf8/core.h +359 -0
- data/ext/common/Utils/utf8/unchecked.h +229 -0
- data/ext/common/Watchdog.cpp +1001 -0
- data/ext/google/COPYING +28 -0
- data/ext/google/ChangeLog +167 -0
- data/ext/google/dense_hash_map +310 -0
- data/ext/google/dense_hash_set +287 -0
- data/ext/google/sparse_hash_map +294 -0
- data/ext/google/sparse_hash_set +275 -0
- data/ext/google/sparsehash/densehashtable.h +1062 -0
- data/ext/google/sparsehash/sparseconfig.h +55 -0
- data/ext/google/sparsehash/sparsehashtable.h +1015 -0
- data/ext/google/sparsetable +1468 -0
- data/ext/google/type_traits.h +250 -0
- data/ext/libev/Changes +302 -0
- data/ext/libev/LICENSE +36 -0
- data/ext/libev/Makefile.am +18 -0
- data/ext/libev/Makefile.in +685 -0
- data/ext/libev/README +58 -0
- data/ext/libev/aclocal.m4 +7549 -0
- data/ext/libev/autogen.sh +6 -0
- data/ext/libev/config.guess +1526 -0
- data/ext/libev/config.h.in +121 -0
- data/ext/libev/config.sub +1658 -0
- data/ext/libev/configure +22156 -0
- data/ext/libev/configure.ac +18 -0
- data/ext/libev/ev++.h +800 -0
- data/ext/libev/ev.c +3694 -0
- data/ext/libev/ev.h +705 -0
- data/ext/libev/ev_epoll.c +228 -0
- data/ext/libev/ev_kqueue.c +196 -0
- data/ext/libev/ev_poll.c +144 -0
- data/ext/libev/ev_port.c +165 -0
- data/ext/libev/ev_select.c +308 -0
- data/ext/libev/ev_vars.h +187 -0
- data/ext/libev/ev_win32.c +153 -0
- data/ext/libev/ev_wrap.h +178 -0
- data/ext/libev/event.c +401 -0
- data/ext/libev/event.h +158 -0
- data/ext/libev/install-sh +294 -0
- data/ext/libev/libev.m4 +38 -0
- data/ext/libev/ltmain.sh +6871 -0
- data/ext/libev/missing +336 -0
- data/ext/libev/mkinstalldirs +111 -0
- data/ext/nginx/Configuration.c +1454 -0
- data/ext/nginx/Configuration.h +94 -0
- data/ext/nginx/ContentHandler.c +1360 -0
- data/ext/nginx/ContentHandler.h +64 -0
- data/ext/nginx/HelperAgent.cpp +988 -0
- data/ext/nginx/HttpStatusExtractor.h +351 -0
- data/ext/nginx/ScgiRequestParser.h +375 -0
- data/ext/nginx/StaticContentHandler.c +256 -0
- data/ext/nginx/StaticContentHandler.h +37 -0
- data/ext/nginx/config +56 -0
- data/ext/nginx/ngx_http_passenger_module.c +499 -0
- data/ext/nginx/ngx_http_passenger_module.h +63 -0
- data/ext/oxt/backtrace.cpp +185 -0
- data/ext/oxt/backtrace.hpp +135 -0
- data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
- data/ext/oxt/detail/backtrace_enabled.hpp +156 -0
- data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +81 -0
- data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
- data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
- data/ext/oxt/dynamic_thread_group.hpp +195 -0
- data/ext/oxt/macros.hpp +58 -0
- data/ext/oxt/spin_lock.hpp +57 -0
- data/ext/oxt/system_calls.cpp +477 -0
- data/ext/oxt/system_calls.hpp +260 -0
- data/ext/oxt/thread.cpp +32 -0
- data/ext/oxt/thread.hpp +370 -0
- data/ext/oxt/tracable_exception.cpp +87 -0
- data/ext/oxt/tracable_exception.hpp +35 -0
- data/ext/ruby/extconf.rb +41 -0
- data/ext/ruby/passenger_native_support.c +1037 -0
- data/helper-scripts/passenger-spawn-server +106 -0
- data/helper-scripts/prespawn +63 -0
- data/lib/phusion_passenger.rb +107 -0
- data/lib/phusion_passenger/abstract_installer.rb +234 -0
- data/lib/phusion_passenger/abstract_request_handler.rb +738 -0
- data/lib/phusion_passenger/abstract_server.rb +372 -0
- data/lib/phusion_passenger/abstract_server_collection.rb +335 -0
- data/lib/phusion_passenger/admin_tools.rb +48 -0
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
- data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
- data/lib/phusion_passenger/analytics_logger.rb +342 -0
- data/lib/phusion_passenger/app_process.rb +162 -0
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
- data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +68 -0
- data/lib/phusion_passenger/classic_rails/framework_spawner.rb +311 -0
- data/lib/phusion_passenger/classic_rails/request_handler.rb +75 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
- data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
- data/lib/phusion_passenger/console_text_template.rb +66 -0
- data/lib/phusion_passenger/constants.rb +35 -0
- data/lib/phusion_passenger/debug_logging.rb +104 -0
- data/lib/phusion_passenger/dependencies.rb +633 -0
- data/lib/phusion_passenger/exceptions.rb +103 -0
- data/lib/phusion_passenger/html_template.rb +107 -0
- data/lib/phusion_passenger/message_channel.rb +387 -0
- data/lib/phusion_passenger/message_client.rb +173 -0
- data/lib/phusion_passenger/native_support.rb +166 -0
- data/lib/phusion_passenger/packaging.rb +108 -0
- data/lib/phusion_passenger/platform_info.rb +248 -0
- data/lib/phusion_passenger/platform_info/apache.rb +332 -0
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +175 -0
- data/lib/phusion_passenger/platform_info/compiler.rb +183 -0
- data/lib/phusion_passenger/platform_info/curl.rb +61 -0
- data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
- data/lib/phusion_passenger/platform_info/linux.rb +77 -0
- data/lib/phusion_passenger/platform_info/operating_system.rb +158 -0
- data/lib/phusion_passenger/platform_info/ruby.rb +338 -0
- data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
- data/lib/phusion_passenger/plugin.rb +96 -0
- data/lib/phusion_passenger/public_api.rb +112 -0
- data/lib/phusion_passenger/rack/application_spawner.rb +227 -0
- data/lib/phusion_passenger/rack/request_handler.rb +145 -0
- data/lib/phusion_passenger/rails3_extensions/init.rb +207 -0
- data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
- data/lib/phusion_passenger/spawn_manager.rb +359 -0
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
- data/lib/phusion_passenger/standalone/command.rb +241 -0
- data/lib/phusion_passenger/standalone/config_file.rb +119 -0
- data/lib/phusion_passenger/standalone/help_command.rb +57 -0
- data/lib/phusion_passenger/standalone/main.rb +101 -0
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
- data/lib/phusion_passenger/standalone/runtime_installer.rb +479 -0
- data/lib/phusion_passenger/standalone/start_command.rb +514 -0
- data/lib/phusion_passenger/standalone/status_command.rb +62 -0
- data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
- data/lib/phusion_passenger/standalone/utils.rb +46 -0
- data/lib/phusion_passenger/standalone/version_command.rb +42 -0
- data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
- data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
- data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
- data/lib/phusion_passenger/templates/app_init_error.html.erb +64 -0
- data/lib/phusion_passenger/templates/database_error.html.erb +66 -0
- data/lib/phusion_passenger/templates/error_layout.css +97 -0
- data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +39 -0
- data/lib/phusion_passenger/templates/general_error.html.erb +22 -0
- data/lib/phusion_passenger/templates/load_error.html.erb +46 -0
- data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
- data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
- data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/standalone/config.erb +94 -0
- data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
- data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
- data/lib/phusion_passenger/templates/version_not_found.html.erb +34 -0
- data/lib/phusion_passenger/utils.rb +1080 -0
- data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
- data/lib/phusion_passenger/utils/rewindable_input.rb +125 -0
- data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
- data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
- data/lib/phusion_passenger/wsgi/application_spawner.rb +108 -0
- data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
- data/man/passenger-config.1 +29 -0
- data/man/passenger-make-enterprisey.8 +23 -0
- data/man/passenger-memory-stats.8 +33 -0
- data/man/passenger-status.8 +43 -0
- data/man/passenger-stress-test.1 +43 -0
- data/resources/mime.types +73 -0
- data/resources/union_station_gateway.crt +32 -0
- data/test/config.yml.example +41 -0
- data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
- data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
- data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
- data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
- data/test/cxx/Base64Test.cpp +50 -0
- data/test/cxx/BufferedIOTest.cpp +364 -0
- data/test/cxx/CachedFileStatTest.cpp +402 -0
- data/test/cxx/CxxTestMain.cpp +122 -0
- data/test/cxx/EventedClientTest.cpp +523 -0
- data/test/cxx/FileChangeCheckerTest.cpp +329 -0
- data/test/cxx/FileDescriptorTest.cpp +69 -0
- data/test/cxx/HttpStatusExtractorTest.cpp +198 -0
- data/test/cxx/IOUtilsTest.cpp +796 -0
- data/test/cxx/LoggingTest.cpp +914 -0
- data/test/cxx/MessageChannelTest.cpp +557 -0
- data/test/cxx/MessageReadersWritersTest.cpp +574 -0
- data/test/cxx/MessageServerTest.cpp +383 -0
- data/test/cxx/PoolOptionsTest.cpp +116 -0
- data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
- data/test/cxx/ScgiRequestParserTest.cpp +389 -0
- data/test/cxx/ServerInstanceDirTest.cpp +186 -0
- data/test/cxx/SpawnManagerTest.cpp +161 -0
- data/test/cxx/StaticStringTest.cpp +220 -0
- data/test/cxx/SystemTimeTest.cpp +37 -0
- data/test/cxx/TestSupport.cpp +166 -0
- data/test/cxx/TestSupport.h +254 -0
- data/test/cxx/UtilsTest.cpp +491 -0
- data/test/cxx/VariantMapTest.cpp +179 -0
- data/test/integration_tests/apache2_tests.rb +666 -0
- data/test/integration_tests/cgi_environment_spec.rb +26 -0
- data/test/integration_tests/hello_world_rack_spec.rb +36 -0
- data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
- data/test/integration_tests/mycook_spec.rb +166 -0
- data/test/integration_tests/nginx_tests.rb +260 -0
- data/test/integration_tests/spec_helper.rb +19 -0
- data/test/oxt/backtrace_test.cpp +88 -0
- data/test/oxt/counter.hpp +55 -0
- data/test/oxt/dynamic_thread_group_test.cpp +131 -0
- data/test/oxt/oxt_test_main.cpp +25 -0
- data/test/oxt/spin_lock_test.cpp +59 -0
- data/test/oxt/syscall_interruption_test.cpp +38 -0
- data/test/ruby/abstract_request_handler_spec.rb +406 -0
- data/test/ruby/abstract_server_collection_spec.rb +247 -0
- data/test/ruby/abstract_server_spec.rb +61 -0
- data/test/ruby/admin_tools_spec.rb +362 -0
- data/test/ruby/analytics_logger_spec.rb +253 -0
- data/test/ruby/app_process_spec.rb +43 -0
- data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
- data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
- data/test/ruby/debug_logging_spec.rb +141 -0
- data/test/ruby/message_channel_spec.rb +196 -0
- data/test/ruby/rack/application_spawner_spec.rb +116 -0
- data/test/ruby/shared/abstract_server_spec.rb +23 -0
- data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
- data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
- data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
- data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
- data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
- data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
- data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
- data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
- data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
- data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
- data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
- data/test/ruby/spawn_manager_spec.rb +134 -0
- data/test/ruby/spec_helper.rb +104 -0
- data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
- data/test/ruby/utils/hosts_file_parser.rb +258 -0
- data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
- data/test/ruby/utils_spec.rb +748 -0
- data/test/ruby/wsgi/application_spawner_spec.rb +50 -0
- data/test/stub/apache2/httpd.conf.erb +86 -0
- data/test/stub/apache2/mime.types +748 -0
- data/test/stub/garbage1.dat +0 -0
- data/test/stub/garbage2.dat +0 -0
- data/test/stub/garbage3.dat +0 -0
- data/test/stub/http_request.yml +23 -0
- data/test/stub/message_channel.rb +11 -0
- data/test/stub/message_channel_2.rb +12 -0
- data/test/stub/message_channel_3.rb +19 -0
- data/test/stub/nginx/koi-utf +109 -0
- data/test/stub/nginx/koi-win +103 -0
- data/test/stub/nginx/mime.types +70 -0
- data/test/stub/nginx/nginx.conf.erb +58 -0
- data/test/stub/nginx/win-utf +126 -0
- data/test/stub/rack/config.ru +4 -0
- data/test/stub/rack/public/rack.jpg +0 -0
- data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
- data/test/stub/rails_apps/1.2/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/1.2/empty/config/boot.rb +108 -0
- data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
- data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
- data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/1.2/empty/public/404.html +30 -0
- data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/1.2/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/1.2/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
- data/test/stub/rails_apps/1.2/empty/script/about +3 -0
- data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
- data/test/stub/rails_apps/1.2/empty/script/console +3 -0
- data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/server +3 -0
- data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
- data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
- data/test/stub/rails_apps/2.0/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.0/empty/config/boot.rb +108 -0
- data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/2.0/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.0/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.0/empty/config/routes.rb +35 -0
- data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.0/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.0/empty/public/500.html +30 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.0/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.0/empty/script/about +3 -0
- data/test/stub/rails_apps/2.0/empty/script/console +3 -0
- data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/server +3 -0
- data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
- data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
- data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
- data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
- data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.2/empty/script/about +4 -0
- data/test/stub/rails_apps/2.2/empty/script/console +3 -0
- data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/server +3 -0
- data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
- data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
- data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.3/empty/script/about +4 -0
- data/test/stub/rails_apps/2.3/empty/script/console +3 -0
- data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.3/empty/script/server +3 -0
- data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
- data/test/stub/rails_apps/2.3/foobar/app/controllers/application_controller.rb +12 -0
- data/test/stub/rails_apps/2.3/foobar/app/controllers/bar_controller_1.rb +5 -0
- data/test/stub/rails_apps/2.3/foobar/app/controllers/bar_controller_2.rb +5 -0
- data/test/stub/rails_apps/2.3/foobar/app/controllers/foo_controller.rb +21 -0
- data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
- data/test/stub/rails_apps/2.3/foobar/config/database.yml +19 -0
- data/test/stub/rails_apps/2.3/foobar/config/environment.rb +59 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/2.3/foobar/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
- data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
- data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
- data/test/stub/rails_apps/2.3/mycook/app/controllers/application_controller.rb +12 -0
- data/test/stub/rails_apps/2.3/mycook/app/controllers/recipes_controller.rb +5 -0
- data/test/stub/rails_apps/2.3/mycook/app/controllers/uploads_controller.rb +15 -0
- data/test/stub/rails_apps/2.3/mycook/app/controllers/welcome_controller.rb +71 -0
- data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/layouts/default.rhtml +26 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/recipes/create.rhtml +13 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/recipes/index.rhtml +3 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/recipes/new.rhtml +8 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/uploads/index.rhtml +1 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/uploads/new.html.erb +8 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/welcome/cached.rhtml +1 -0
- data/test/stub/rails_apps/2.3/mycook/app/views/welcome/index.rhtml +20 -0
- data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
- data/test/stub/rails_apps/2.3/mycook/config/database.yml +19 -0
- data/test/stub/rails_apps/2.3/mycook/config/environment.rb +61 -0
- data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/2.3/mycook/config/environments/production.rb +19 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/mycook/config/routes.rb +38 -0
- data/test/stub/rails_apps/2.3/mycook/log/useless.txt +1 -0
- data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/angrywizard.gif +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/cookbook.gif +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/header.png +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/javascripts/application.js +2 -0
- data/test/stub/rails_apps/2.3/mycook/public/javascripts/controls.js +963 -0
- data/test/stub/rails_apps/2.3/mycook/public/javascripts/dragdrop.js +973 -0
- data/test/stub/rails_apps/2.3/mycook/public/javascripts/effects.js +1128 -0
- data/test/stub/rails_apps/2.3/mycook/public/javascripts/prototype.js +4320 -0
- data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.3/mycook/public/uploads.html +26 -0
- data/test/stub/rails_apps/2.3/mycook/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
- data/test/stub/rails_apps/2.3/mycook/sites/some.site/public/uploads.html +26 -0
- data/test/stub/rails_apps/2.3/mycook/sites/some.site/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/2.3/mycook/tmp/cache/useless.txt +1 -0
- data/test/stub/rails_apps/2.3/mycook/tmp/pids/useless.txt +1 -0
- data/test/stub/rails_apps/2.3/mycook/tmp/sessions/useless.txt +1 -0
- data/test/stub/rails_apps/2.3/mycook/tmp/sockets/useless.txt +1 -0
- data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
- data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
- data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
- data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
- data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
- data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
- data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
- data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
- data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
- data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
- data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
- data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
- data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
- data/test/stub/spawn_server.rb +22 -0
- data/test/stub/upload_data.txt +494 -0
- data/test/stub/vendor_rails/minimal/README +1 -0
- data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +22 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
- data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
- data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
- data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +57 -0
- data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
- data/test/stub/wsgi/passenger_wsgi.py +3 -0
- data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
- data/test/stub/zsfa/header.png +0 -0
- data/test/stub/zsfa/index.html +14 -0
- data/test/stub/zsfa/zsfa.png +0 -0
- data/test/support/allocate_memory.c +14 -0
- data/test/support/apache2_controller.rb +258 -0
- data/test/support/multipart.rb +62 -0
- data/test/support/nginx_controller.rb +99 -0
- data/test/support/test_helper.rb +448 -0
- data/test/support/valgrind.h +2539 -0
- data/test/tut/tut.h +1240 -0
- data/test/tut/tut_reporter.h +256 -0
- metadata +1703 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
.TH "passenger-config" "1" "2.0" "Phusion Passenger" "User Commands"
|
2
|
+
.SH "NAME"
|
3
|
+
.LP
|
4
|
+
passenger\-config \- Show configuration settings for Phusion Passenger
|
5
|
+
.SH "SYNOPSIS"
|
6
|
+
.LP
|
7
|
+
\fBpassenger\-config\fR \fI\-\-root\fR | \fI\-\-version\fR
|
8
|
+
.SH "DESCRIPTION"
|
9
|
+
.LP
|
10
|
+
\fBpassenger\-config\fR shows the current configuration settings for Phusion Passenger. You need to select one of the following options.
|
11
|
+
.SH "OPTIONS"
|
12
|
+
.TP
|
13
|
+
\fB\-\-root\fR
|
14
|
+
Shows the Phusion Passenger root directory
|
15
|
+
.TP
|
16
|
+
\fB\-\-version\fR
|
17
|
+
Shows the current Phusion Passenger version number
|
18
|
+
.SH "SEE ALSO"
|
19
|
+
.LP
|
20
|
+
passenger\-memory\-stats(1), passenger\-stress\-test(1), passenger\-status(8)
|
21
|
+
.LP
|
22
|
+
User guide at http://www.modrails.com/documentation.html
|
23
|
+
.SH "AUTHOR"
|
24
|
+
.LP
|
25
|
+
Phusion Passenger is written by Phusion (http://www.phusion.nl)
|
26
|
+
.LP
|
27
|
+
"Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
|
28
|
+
.LP
|
29
|
+
This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
|
@@ -0,0 +1,23 @@
|
|
1
|
+
.TH "passenger-make-enterprisey" "8" "2.0" "Phusion Passenger" "Adminstration Commands"
|
2
|
+
.SH "NAME"
|
3
|
+
.LP
|
4
|
+
passenger\-make-enterprisey \- activate your Phusion passenger enterprise licence
|
5
|
+
.SH "SYNOPSIS"
|
6
|
+
.LP
|
7
|
+
\fBpassenger\-make\-enterprisey
|
8
|
+
.SH "DESCRIPTION"
|
9
|
+
.LP
|
10
|
+
\fBpassenger\-make\-enterprisey\fR changes your ordinary everyday version of Phusion Passenger into a special enterprise version just as soon as you type in your licence key.
|
11
|
+
.LP
|
12
|
+
As everybody working at enterprise level knows, enterprise software is so much better in every possible way. So make sure you pick up your licence key today.
|
13
|
+
.SH "SEE ALSO"
|
14
|
+
Phusion Passenger Enterprise Programme (http://www.modrails.com/enterprise.html)
|
15
|
+
.SH "AUTHOR"
|
16
|
+
.LP
|
17
|
+
Phusion Passenger is written by Phusion (http://www.phusion.nl)
|
18
|
+
.LP
|
19
|
+
"Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
|
20
|
+
.LP
|
21
|
+
This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
|
22
|
+
.SH "CAVEATS"
|
23
|
+
Whatever you do don't look at the source code.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
.TH "passenger-memory-stats" "8" "2.0" "Phusion Passenger" "Administration Commands"
|
2
|
+
.SH "NAME"
|
3
|
+
.LP
|
4
|
+
passenger\-memory\-stats \- reports a snapshot of the Apache and Phusion Passenger memory statistcs
|
5
|
+
.SH "SYNOPSIS"
|
6
|
+
.LP
|
7
|
+
\fBpassenger\-memory\-stats\fR
|
8
|
+
.SH "DESCRIPTION"
|
9
|
+
.LP
|
10
|
+
\fBpassenger\-memory\-stats\fR allows you to easily analyze the real memory usage of Phusion Passenger and Apache.
|
11
|
+
.LP
|
12
|
+
Process inspection tools such as \fIps\fR and \fItop\fR are useful, but they rarely show the correct memory usage. The real memory usage is usually lower than what \fIps\fR and \fItop\fR report.
|
13
|
+
.LP
|
14
|
+
There are many technical reasons why this is so, but an explanation is beyond the scope of this page. We refer the interested reader to operating systems literature about virtual memory and copy\-on\-write.
|
15
|
+
.LP
|
16
|
+
When you run this tool the \fIPrivate\fR or \fIprivate dirty RSS\fR field shows the real memory usage of processes.
|
17
|
+
.SH "ENVIRONMENT VARIABLES"
|
18
|
+
.LP
|
19
|
+
.TP
|
20
|
+
\fBHTTPD\fR
|
21
|
+
The full filename to the Apache executable. By default, Passenger will attempt to autodetect the Apache executable. If autodetection fails for whatever reason, then Apache processes will not be shown in the memory statistics. In that case, you may manually specify the location to the Apache executable using this environment variable.
|
22
|
+
.SH "SEE ALSO"
|
23
|
+
.LP
|
24
|
+
passenger\-status(8), ps(1), top(1),
|
25
|
+
.LP
|
26
|
+
User guide at http://www.modrails.com/documentation.html
|
27
|
+
.SH "AUTHOR"
|
28
|
+
.LP
|
29
|
+
Phusion Passenger is written by Phusion (http://www.phusion.nl)
|
30
|
+
.LP
|
31
|
+
"Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
|
32
|
+
.LP
|
33
|
+
This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
|
@@ -0,0 +1,43 @@
|
|
1
|
+
.TH "passenger-status" "8" "2.0" "Phusion Passenger" "Adminstration Commands"
|
2
|
+
.SH "NAME"
|
3
|
+
.LP
|
4
|
+
passenger\-status \- inspect Phusion Passenger's internal status
|
5
|
+
.SH "SYNOPSIS"
|
6
|
+
.LP
|
7
|
+
\fBpassenger\-status\fR [\fIpid\fR]
|
8
|
+
.SH "DESCRIPTION"
|
9
|
+
.LP
|
10
|
+
\fBpassenger\-status\fR looks at the current status of a Phusion Passenger installation. It will locate Phusion Passenger automatically if it is running and will give you a list of instances if there is more than one Phusion Passenger instance running. You can then select the instance by specifying the relevant PID on the command line.
|
11
|
+
.LP
|
12
|
+
The \fIgeneral information\fR section shows the following details:
|
13
|
+
.TP
|
14
|
+
max
|
15
|
+
The maximum number of application instances that Phusion Passenger will spawn. This equals the value given for \fIPassengerMaxPoolSize\fR in the configuration.
|
16
|
+
.TP
|
17
|
+
count
|
18
|
+
The number of application instances that are currently alive. This value is always less than or equal to \fImax\fR.
|
19
|
+
.TP
|
20
|
+
active
|
21
|
+
The number of application instances that are currently processing requests. This value is always less than or equal to \fIcount\fR.
|
22
|
+
.TP
|
23
|
+
inactive
|
24
|
+
The number of application instances that are currently not processing requests, i.e. are idle. Idle application instances will be shutdown after a while, as can be specified with \fIPassengerPoolIdleTime\fR in the configuration. The value of \fIinactive\fR equals \fIcount\fR \- \fIactive\fR.
|
25
|
+
.LP
|
26
|
+
The \fIapplications\fR section shows each application instance, which directory it belongs to. The \fIsessions\fR field shows how many HTTP client are currently being processed by that application instance.
|
27
|
+
.SH "OPTIONS"
|
28
|
+
.LP
|
29
|
+
.TP
|
30
|
+
\fBpid\fR
|
31
|
+
The process ID of the Phusion Passenger instance you want to look at
|
32
|
+
.SH "SEE ALSO"
|
33
|
+
.LP
|
34
|
+
passenger\-memory\-stats(8), ps(1), top(1)
|
35
|
+
.LP
|
36
|
+
User guide at http://www.modrails.com/documentation.html
|
37
|
+
.SH "AUTHOR"
|
38
|
+
.LP
|
39
|
+
Phusion Passenger is written by Phusion (http://www.phusion.nl)
|
40
|
+
.LP
|
41
|
+
"Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
|
42
|
+
.LP
|
43
|
+
This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
|
@@ -0,0 +1,43 @@
|
|
1
|
+
.TH "passenger-stress-test" "1" "2.0" "Phusion Passenger" "User Commands"
|
2
|
+
.SH "NAME"
|
3
|
+
.LP
|
4
|
+
passenger\-stress\-test \- stress tests a Phusion Passenger powered website.
|
5
|
+
.SH "SYNOPSIS"
|
6
|
+
.LP
|
7
|
+
\fBpassenger\-stress\-test\fR <\fIhostname\fR> <\fIapp_roo\fRt> [\fIoptions\fR]
|
8
|
+
.SH "DESCRIPTION"
|
9
|
+
.LP
|
10
|
+
Stress test the given (Phusion Passenger\-powered) website by
|
11
|
+
.LP
|
12
|
+
\- crawling it with multiple concurrently running crawlers.
|
13
|
+
.LP
|
14
|
+
\- gracefully restarting Apache at random times
|
15
|
+
.LP
|
16
|
+
\- restarting the target (Phusion Passenger\-powered) application at random times
|
17
|
+
.SH "OPTIONS"
|
18
|
+
.LP
|
19
|
+
.TP
|
20
|
+
\fB\-c, \-\-concurrency\fR <\fInumber\fR>
|
21
|
+
Number of crawlers to start (default = 20)
|
22
|
+
.TP
|
23
|
+
\fB\-p, \-\-apache\-restart\-interval\fR <\fIinterval\fR>
|
24
|
+
Gracefully restart Apache after <\fIinterval\fR> minutes (default = 1440)
|
25
|
+
.TP
|
26
|
+
\fB\-a, \-\-app\-restart\-interval\fR <\fIinterval\fR>
|
27
|
+
Restart the application after <\fIinterval\fR> minutes (default = 55)
|
28
|
+
.TP
|
29
|
+
\fB\-h, \-\-help\fR
|
30
|
+
Output help information and exit.
|
31
|
+
|
32
|
+
.SH "SEE ALSO"
|
33
|
+
.LP
|
34
|
+
passenger\-config(1), passenger\-memory\-stats(8), passenger\-status(8)
|
35
|
+
.LP
|
36
|
+
User guide at http://www.modrails.com/documentation.html
|
37
|
+
.SH "AUTHOR"
|
38
|
+
.LP
|
39
|
+
Phusion Passenger is written by Phusion (http://www.phusion.nl)
|
40
|
+
.LP
|
41
|
+
"Phusion" and "Phusion Passenger" are trademarks of Hongli Lai & Ninh Bui.
|
42
|
+
.LP
|
43
|
+
This manual page was written by Neil Wilson <neil@brightbox.co.uk> for the Ubuntu project (but may be used by others).
|
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
types {
|
3
|
+
text/html html htm shtml;
|
4
|
+
text/css css;
|
5
|
+
text/xml xml;
|
6
|
+
image/gif gif;
|
7
|
+
image/jpeg jpeg jpg;
|
8
|
+
application/x-javascript js;
|
9
|
+
application/atom+xml atom;
|
10
|
+
application/rss+xml rss;
|
11
|
+
|
12
|
+
text/mathml mml;
|
13
|
+
text/plain txt;
|
14
|
+
text/vnd.sun.j2me.app-descriptor jad;
|
15
|
+
text/vnd.wap.wml wml;
|
16
|
+
text/x-component htc;
|
17
|
+
|
18
|
+
image/png png;
|
19
|
+
image/tiff tif tiff;
|
20
|
+
image/vnd.wap.wbmp wbmp;
|
21
|
+
image/x-icon ico;
|
22
|
+
image/x-jng jng;
|
23
|
+
image/x-ms-bmp bmp;
|
24
|
+
image/svg+xml svg;
|
25
|
+
|
26
|
+
application/java-archive jar war ear;
|
27
|
+
application/mac-binhex40 hqx;
|
28
|
+
application/msword doc;
|
29
|
+
application/pdf pdf;
|
30
|
+
application/postscript ps eps ai;
|
31
|
+
application/rtf rtf;
|
32
|
+
application/vnd.ms-excel xls;
|
33
|
+
application/vnd.ms-powerpoint ppt;
|
34
|
+
application/vnd.wap.wmlc wmlc;
|
35
|
+
application/vnd.wap.xhtml+xml xhtml;
|
36
|
+
application/vnd.google-earth.kml+xml kml;
|
37
|
+
application/vnd.google-earth.kmz kmz;
|
38
|
+
application/x-cocoa cco;
|
39
|
+
application/x-java-archive-diff jardiff;
|
40
|
+
application/x-java-jnlp-file jnlp;
|
41
|
+
application/x-makeself run;
|
42
|
+
application/x-perl pl pm;
|
43
|
+
application/x-pilot prc pdb;
|
44
|
+
application/x-rar-compressed rar;
|
45
|
+
application/x-redhat-package-manager rpm;
|
46
|
+
application/x-sea sea;
|
47
|
+
application/x-shockwave-flash swf;
|
48
|
+
application/x-stuffit sit;
|
49
|
+
application/x-tcl tcl tk;
|
50
|
+
application/x-x509-ca-cert der pem crt;
|
51
|
+
application/x-xpinstall xpi;
|
52
|
+
application/zip zip;
|
53
|
+
|
54
|
+
application/octet-stream bin exe dll;
|
55
|
+
application/octet-stream deb;
|
56
|
+
application/octet-stream dmg;
|
57
|
+
application/octet-stream eot;
|
58
|
+
application/octet-stream iso img;
|
59
|
+
application/octet-stream msi msp msm;
|
60
|
+
|
61
|
+
audio/midi mid midi kar;
|
62
|
+
audio/mpeg mp3;
|
63
|
+
audio/x-realaudio ra;
|
64
|
+
|
65
|
+
video/3gpp 3gpp 3gp;
|
66
|
+
video/mpeg mpeg mpg;
|
67
|
+
video/quicktime mov;
|
68
|
+
video/x-flv flv;
|
69
|
+
video/x-mng mng;
|
70
|
+
video/x-ms-asf asx asf;
|
71
|
+
video/x-ms-wmv wmv;
|
72
|
+
video/x-msvideo avi;
|
73
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIFbjCCA1YCCQCd2BBmpGM9zDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJO
|
3
|
+
TDESMBAGA1UECBMJTmVkZXJsYW5kMRAwDgYDVQQKEwdQaHVzaW9uMSQwIgYDVQQD
|
4
|
+
ExtnYXRld2F5LnVuaW9uc3RhdGlvbmFwcC5jb20xHjAcBgkqhkiG9w0BCQEWD2lu
|
5
|
+
Zm9AcGh1c2lvbi5ubDAeFw0xMDA4MDkwOTU2MzVaFw0zNzEyMjQwOTU2MzVaMHkx
|
6
|
+
CzAJBgNVBAYTAk5MMRIwEAYDVQQIEwlOZWRlcmxhbmQxEDAOBgNVBAoTB1BodXNp
|
7
|
+
b24xJDAiBgNVBAMTG2dhdGV3YXkudW5pb25zdGF0aW9uYXBwLmNvbTEeMBwGCSqG
|
8
|
+
SIb3DQEJARYPaW5mb0BwaHVzaW9uLm5sMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
|
9
|
+
MIICCgKCAgEAvUjNLupLtz8IIQINJ1XaLmR+ttTOvrGx/Y++BggI3LqAHwMsWjG4
|
10
|
+
KIFhIpLfURViotthfbIYin3sPhC3WwvMfIoxezjAOnsXVcYB8ynxopu8WM4QSYLC
|
11
|
+
64uAKyYlaHckxmppqGCBHtA+hHBLEDM/GO8hyJUn+Tjf0LEoranpfTLnZex9eMEo
|
12
|
+
Ggx08saKZ6A2JLQbMEPOf62DQciwI8ToK8eV1WSrg6O7fVuLe9YPXVeqT3hFGhYX
|
13
|
+
UXEFBFQs8EZDtEZvNCGyD3W3wnanQL/IGTm5BAiVVJoXnvXZoHMgX8ar2xQk1+t6
|
14
|
+
Wvd0nMF/3tWVPW3mQTDYErRpXx7m+ySwYp72yidk7IlFkFW/OIJIiHLMUnwlu9fv
|
15
|
+
PWlmNLVuubR5eu1/8Qb3hVPlqYFS/2nQRs4bYoO3r0enGY9V7deWtEeUuDlY5Y5C
|
16
|
+
Bf/bSf0Kt6vSt0Y9obu2xQDIwl6OBnIXpuxSSVinh+31ECymolUFUbWEuEqkRKPY
|
17
|
+
6UYjyex6az2dIMnrr9WF1lfT+GTq4rZa4wmymT00sVofceI/TPFoglhkq93rnLix
|
18
|
+
TdUMnrywk3JUpGj1fsOI+PzGReUaJfR+4Gbau5Kab3ZKURQnY6toCQafaSGYJnO8
|
19
|
+
rdpWbhJOTLO82K71W7+Dqw4bzpWyU2PJAiEO5w6mD3G/es+iAPrt64ECAwEAATAN
|
20
|
+
BgkqhkiG9w0BAQUFAAOCAgEAQ2lkVAHv5SjCTeuKl93wSanxLL8zrvyh2DVYQc/b
|
21
|
+
v/PSCL3Afoidlvjc1qVCB93WfIHTPGG/xOI0EVi8W96Zg9D6P8Kjc79Vfs6MM8h/
|
22
|
+
vuHh4pS/PFTzmFd9nRI26iWMZl2DMQnXflSNJbxqWr0AtGZTnT9w/MR+2Kxu74AD
|
23
|
+
E0r3P11WoYpfWVc6SiEBJ9WnMlSoAT+xShIiXAsLuzoXQOMGfg5M3JIsXwQZtRGN
|
24
|
+
n58bq+prHroI1cU96xbmCw0fRgLuJYhdoU3uWE7usSutYaW7LT4T2oGR5x2ZPzy/
|
25
|
+
vr7jX8AbUJDWK3FbZ0//Zpkt9ldF60NJ/l42U6F5frQ+FSCDTX1k32RcG1vRIfM5
|
26
|
+
TZgBgT0D3AJoNPbNaEGWsBrxG3wZGxxvnamPM0S01WmxwL2PNM1UnUKG+y/ALfoc
|
27
|
+
JJeXyuY3HFt3DyYE4odyPOHye/fP1qLl1ZrJIzyAT0pUo38UB8uQ4HZUWD/LljJm
|
28
|
+
V0fUFWKWk6OawwIM4sYc90WezYgDfAT1RUDy0TnvKlG4FC1Oodnnm2rQFu+zDOWH
|
29
|
+
Fj0lBkzVUOlt2nWhLIW/uN3bjM9TsXaw8qUGWhvn4z3FHGHEdnLy3wMzwCSVq1tg
|
30
|
+
QilKaQe+8Y4SePo110Tmkfls6vyEhcN6KpRWdpQSXUXmMY7IxjfNJnKTeGvWd1Y9
|
31
|
+
CaY=
|
32
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,41 @@
|
|
1
|
+
### This file contains system-specific configuration options that the test suite needs.
|
2
|
+
### Please customize it for your system.
|
3
|
+
|
4
|
+
# These are the usernames and group names of normal, non-administrator
|
5
|
+
# users and groups. Preferably, these are user and group accounts that
|
6
|
+
# are normally not used.
|
7
|
+
#
|
8
|
+
# These users and groups MUST be able to access this 'test' directory,
|
9
|
+
# otherwise the tests will fail.
|
10
|
+
|
11
|
+
### Good values for Linux and FreeBSD:
|
12
|
+
normal_user_1: games
|
13
|
+
normal_user_2: daemon
|
14
|
+
# Must not be "nobody".
|
15
|
+
default_user: man
|
16
|
+
# Must not be normal_user_1's primary group.
|
17
|
+
normal_group_1: daemon
|
18
|
+
# Must not be normal_user_2's primary group.
|
19
|
+
normal_group_2: man
|
20
|
+
# Must not be default_user's primary group. Must not be "nobody".
|
21
|
+
default_group: games
|
22
|
+
|
23
|
+
### Good values for OS X. Same restrictions apply.
|
24
|
+
# normal_user_1: _www
|
25
|
+
# normal_user_2: daemon
|
26
|
+
# default_user: _sandbox
|
27
|
+
# normal_group_1: daemon
|
28
|
+
# normal_group_2: _sandbox
|
29
|
+
# default_group: _www
|
30
|
+
|
31
|
+
# A nonexistant username, group name, user ID and group ID.
|
32
|
+
nonexistant_user: xxxxxxxxxxxxxxxxxxx
|
33
|
+
nonexistant_group: xxxxxxxxxxxxxxxxxxx
|
34
|
+
nonexistant_uid: 9999
|
35
|
+
nonexistant_gid: 9999
|
36
|
+
|
37
|
+
|
38
|
+
# If you want to run the Nginx integration tests, then set the following
|
39
|
+
# config option to the full path of the Nginx binary. This Nginx binary *must*
|
40
|
+
# be compiled with Phusion Passenger support!
|
41
|
+
# nginx: /usr/local/sbin/nginx
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#include "TestSupport.h"
|
2
|
+
#include "ApplicationPool/Pool.h"
|
3
|
+
#include "Utils.h"
|
4
|
+
|
5
|
+
using namespace Passenger;
|
6
|
+
|
7
|
+
namespace tut {
|
8
|
+
struct ApplicationPool_PoolTest {
|
9
|
+
ServerInstanceDirPtr serverInstanceDir;
|
10
|
+
ServerInstanceDir::GenerationPtr generation;
|
11
|
+
ApplicationPool::Ptr pool, pool2;
|
12
|
+
|
13
|
+
ApplicationPool_PoolTest() {
|
14
|
+
createServerInstanceDirAndGeneration(serverInstanceDir, generation);
|
15
|
+
pool = ptr(new ApplicationPool::Pool("../helper-scripts/passenger-spawn-server", generation));
|
16
|
+
pool2 = pool;
|
17
|
+
}
|
18
|
+
|
19
|
+
ApplicationPool::Ptr newPoolConnection() {
|
20
|
+
return pool;
|
21
|
+
}
|
22
|
+
|
23
|
+
void reinitializeWithSpawnManager(AbstractSpawnManagerPtr spawnManager) {
|
24
|
+
pool = ptr(new ApplicationPool::Pool(spawnManager));
|
25
|
+
pool2 = pool;
|
26
|
+
}
|
27
|
+
};
|
28
|
+
|
29
|
+
DEFINE_TEST_GROUP(ApplicationPool_PoolTest);
|
30
|
+
|
31
|
+
#define USE_TEMPLATE
|
32
|
+
#include "ApplicationPool_PoolTestCases.cpp"
|
33
|
+
}
|
@@ -0,0 +1,1029 @@
|
|
1
|
+
#include <sys/types.h>
|
2
|
+
#include <sys/stat.h>
|
3
|
+
#include <unistd.h>
|
4
|
+
#include <cstring>
|
5
|
+
#include <cstdlib>
|
6
|
+
#include <cerrno>
|
7
|
+
#include <sys/types.h>
|
8
|
+
#include <signal.h>
|
9
|
+
#include <utime.h>
|
10
|
+
|
11
|
+
/**
|
12
|
+
* This file is used as a template to test the different ApplicationPool::Interface implementations.
|
13
|
+
* It is #included in ApplicationPool_PoolTest.cpp and ApplicationPool_Server_PoolTest.cpp
|
14
|
+
*/
|
15
|
+
#ifdef USE_TEMPLATE
|
16
|
+
static void sendTestRequest(SessionPtr &session, const char *uri = "/foo/new") {
|
17
|
+
string headers;
|
18
|
+
#define ADD_HEADER(name, value) \
|
19
|
+
headers.append(name); \
|
20
|
+
headers.append(1, '\0'); \
|
21
|
+
headers.append(value); \
|
22
|
+
headers.append(1, '\0')
|
23
|
+
ADD_HEADER("HTTP_HOST", "www.test.com");
|
24
|
+
ADD_HEADER("QUERY_STRING", "");
|
25
|
+
ADD_HEADER("REQUEST_URI", uri);
|
26
|
+
ADD_HEADER("REQUEST_METHOD", "GET");
|
27
|
+
ADD_HEADER("REMOTE_ADDR", "localhost");
|
28
|
+
ADD_HEADER("SCRIPT_NAME", "");
|
29
|
+
ADD_HEADER("PATH_INFO", uri);
|
30
|
+
ADD_HEADER("PASSENGER_CONNECT_PASSWORD", session->getConnectPassword());
|
31
|
+
session->sendHeaders(headers);
|
32
|
+
}
|
33
|
+
|
34
|
+
static SessionPtr spawnRackApp(ApplicationPool::Ptr pool, const char *appRoot) {
|
35
|
+
PoolOptions options;
|
36
|
+
options.appRoot = appRoot;
|
37
|
+
options.appType = "rack";
|
38
|
+
return pool->get(options);
|
39
|
+
}
|
40
|
+
|
41
|
+
static SessionPtr spawnWsgiApp(ApplicationPool::Ptr pool, const char *appRoot) {
|
42
|
+
PoolOptions options;
|
43
|
+
options.appRoot = appRoot;
|
44
|
+
options.appType = "wsgi";
|
45
|
+
return pool->get(options);
|
46
|
+
}
|
47
|
+
|
48
|
+
namespace {
|
49
|
+
class ReloadLoggingSpawnManager: public SpawnManager {
|
50
|
+
public:
|
51
|
+
vector<string> reloadLog;
|
52
|
+
|
53
|
+
ReloadLoggingSpawnManager(const string &spawnServerCommand,
|
54
|
+
const ServerInstanceDir::GenerationPtr &generation,
|
55
|
+
const AccountsDatabasePtr &accountsDatabase = AccountsDatabasePtr(),
|
56
|
+
const string &rubyCommand = "ruby")
|
57
|
+
: SpawnManager(spawnServerCommand, generation, accountsDatabase, rubyCommand)
|
58
|
+
{ }
|
59
|
+
|
60
|
+
virtual void reload(const string &appRoot) {
|
61
|
+
reloadLog.push_back(appRoot);
|
62
|
+
SpawnManager::reload(appRoot);
|
63
|
+
}
|
64
|
+
};
|
65
|
+
|
66
|
+
struct SpawnRackAppFunction {
|
67
|
+
ApplicationPool::Ptr pool;
|
68
|
+
bool *done;
|
69
|
+
SessionPtr *session;
|
70
|
+
|
71
|
+
SpawnRackAppFunction() {
|
72
|
+
done = NULL;
|
73
|
+
session = NULL;
|
74
|
+
}
|
75
|
+
|
76
|
+
void operator()() {
|
77
|
+
PoolOptions options;
|
78
|
+
options.appRoot = "stub/rack";
|
79
|
+
options.appType = "rack";
|
80
|
+
options.useGlobalQueue = true;
|
81
|
+
SessionPtr session = pool->get(options);
|
82
|
+
*done = true;
|
83
|
+
if (this->session != NULL) {
|
84
|
+
*this->session = session;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
};
|
88
|
+
}
|
89
|
+
|
90
|
+
TEST_METHOD(1) {
|
91
|
+
// Calling ApplicationPool.get() once should return a valid Session.
|
92
|
+
SessionPtr session(spawnRackApp(pool, "stub/rack"));
|
93
|
+
sendTestRequest(session);
|
94
|
+
session->shutdownWriter();
|
95
|
+
|
96
|
+
int reader = session->getStream();
|
97
|
+
string result(readAll(reader));
|
98
|
+
session->closeStream();
|
99
|
+
ensure(result.find("hello <b>world</b>") != string::npos);
|
100
|
+
}
|
101
|
+
|
102
|
+
TEST_METHOD(2) {
|
103
|
+
// Verify that the pool spawns a new app, and that
|
104
|
+
// after the session is closed, the app is kept around.
|
105
|
+
SessionPtr session(spawnRackApp(pool, "stub/rack"));
|
106
|
+
ensure_equals("Before the session was closed, the app was busy", pool->getActive(), 1u);
|
107
|
+
ensure_equals("Before the session was closed, the app was in the pool", pool->getCount(), 1u);
|
108
|
+
session.reset();
|
109
|
+
ensure_equals("After the session is closed, the app is no longer busy", pool->getActive(), 0u);
|
110
|
+
ensure_equals("After the session is closed, the app is kept around", pool->getCount(), 1u);
|
111
|
+
}
|
112
|
+
|
113
|
+
TEST_METHOD(3) {
|
114
|
+
// If we call get() with an application root, then we close the session,
|
115
|
+
// and then we call get() again with the same app group name,
|
116
|
+
// then the pool should not have spawned more than 1 app in total.
|
117
|
+
SessionPtr session(spawnRackApp(pool, "stub/rack"));
|
118
|
+
session.reset();
|
119
|
+
session = spawnRackApp(pool, "stub/rack");
|
120
|
+
ensure_equals(pool->getCount(), 1u);
|
121
|
+
}
|
122
|
+
|
123
|
+
TEST_METHOD(4) {
|
124
|
+
// If we call get() with an app group name, then we call get() again before closing
|
125
|
+
// the session, then the pool will eventually have spawned 2 apps in total.
|
126
|
+
SessionPtr session(spawnRackApp(pool, "stub/rack"));
|
127
|
+
SessionPtr session2(spawnRackApp(pool2, "stub/rack"));
|
128
|
+
EVENTUALLY(5,
|
129
|
+
result = pool->getCount() == 2u;
|
130
|
+
);
|
131
|
+
}
|
132
|
+
|
133
|
+
TEST_METHOD(5) {
|
134
|
+
// If we call get() twice with different app group names,
|
135
|
+
// then the pool should spawn two different apps.
|
136
|
+
TempDirCopy c1("stub/rack", "rackapp1.tmp");
|
137
|
+
TempDirCopy c2("stub/rack", "rackapp2.tmp");
|
138
|
+
replaceStringInFile("rackapp2.tmp/config.ru", "world", "world 2");
|
139
|
+
SessionPtr session = spawnRackApp(pool, "rackapp1.tmp");
|
140
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp2.tmp");
|
141
|
+
ensure_equals("Before the sessions were closed, both apps were busy", pool->getActive(), 2u);
|
142
|
+
ensure_equals("Before the sessions were closed, both apps were in the pool", pool->getCount(), 2u);
|
143
|
+
|
144
|
+
sendTestRequest(session);
|
145
|
+
string result = readAll(session->getStream());
|
146
|
+
ensure("Session 1 belongs to the correct app", result.find("hello <b>world</b>") != string::npos);
|
147
|
+
session.reset();
|
148
|
+
|
149
|
+
sendTestRequest(session2);
|
150
|
+
result = readAll(session2->getStream());
|
151
|
+
ensure("Session 2 belongs to the correct app", result.find("hello <b>world 2</b>") != string::npos);
|
152
|
+
session2.reset();
|
153
|
+
}
|
154
|
+
|
155
|
+
TEST_METHOD(6) {
|
156
|
+
// If we call get() twice with different app group names,
|
157
|
+
// and we close both sessions, then both 2 apps should still
|
158
|
+
// be in the pool.
|
159
|
+
TempDirCopy c1("stub/rack", "rackapp1.tmp");
|
160
|
+
TempDirCopy c2("stub/rack", "rackapp2.tmp");
|
161
|
+
SessionPtr session(spawnRackApp(pool, "rackapp1.tmp"));
|
162
|
+
SessionPtr session2(spawnRackApp(pool, "rackapp2.tmp"));
|
163
|
+
session.reset();
|
164
|
+
session2.reset();
|
165
|
+
ensure_equals("There are 0 active apps", pool->getActive(), 0u);
|
166
|
+
ensure_equals("There are 2 apps in total", pool->getCount(), 2u);
|
167
|
+
}
|
168
|
+
|
169
|
+
TEST_METHOD(7) {
|
170
|
+
// If we call get() even though the pool is already full
|
171
|
+
// (active == max), and the app group name is already
|
172
|
+
// in the pool, then the pool must wait until there's an
|
173
|
+
// inactive application.
|
174
|
+
pool->setMax(1);
|
175
|
+
// TODO: How do we test this?
|
176
|
+
}
|
177
|
+
|
178
|
+
TEST_METHOD(8) {
|
179
|
+
// If ApplicationPool spawns a new instance,
|
180
|
+
// and we kill it, then the next get() with the
|
181
|
+
// same application root should not throw an exception:
|
182
|
+
// ApplicationPool should spawn a new instance
|
183
|
+
// after detecting that the original one died.
|
184
|
+
SessionPtr session = spawnRackApp(pool, "stub/rack");
|
185
|
+
kill(session->getPid(), SIGKILL);
|
186
|
+
session.reset();
|
187
|
+
usleep(20000); // Give the process some time to exit.
|
188
|
+
spawnRackApp(pool, "stub/rack"); // should not throw
|
189
|
+
}
|
190
|
+
|
191
|
+
struct PoolWaitTestThread {
|
192
|
+
ApplicationPool::Ptr pool;
|
193
|
+
SessionPtr &m_session;
|
194
|
+
bool &m_done;
|
195
|
+
|
196
|
+
PoolWaitTestThread(const ApplicationPool::Ptr &pool,
|
197
|
+
SessionPtr &session,
|
198
|
+
bool &done)
|
199
|
+
: m_session(session), m_done(done) {
|
200
|
+
this->pool = pool;
|
201
|
+
done = false;
|
202
|
+
}
|
203
|
+
|
204
|
+
void operator()() {
|
205
|
+
m_session = spawnWsgiApp(pool, "stub/wsgi");
|
206
|
+
m_done = true;
|
207
|
+
}
|
208
|
+
};
|
209
|
+
|
210
|
+
TEST_METHOD(9) {
|
211
|
+
// If we call get() even though the pool is already full
|
212
|
+
// (active == max), and the app group name is *not* already
|
213
|
+
// in the pool, then the pool will wait until enough sessions
|
214
|
+
// have been closed.
|
215
|
+
|
216
|
+
// Make the pool full.
|
217
|
+
pool->setMax(2);
|
218
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
219
|
+
SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
|
220
|
+
EVENTUALLY(5,
|
221
|
+
result = pool->getCount() == 2u;
|
222
|
+
);
|
223
|
+
session1.reset();
|
224
|
+
session2.reset();
|
225
|
+
EVENTUALLY(5,
|
226
|
+
result = pool->getActive() == 0u;
|
227
|
+
);
|
228
|
+
session1 = spawnRackApp(pool, "stub/rack");
|
229
|
+
session2 = spawnRackApp(pool2, "stub/rack");
|
230
|
+
ensure_equals(pool->getActive(), 2u);
|
231
|
+
|
232
|
+
// Now spawn an app with a different app root.
|
233
|
+
SessionPtr session3;
|
234
|
+
bool done;
|
235
|
+
TempThread thr(PoolWaitTestThread(pool2, session3, done));
|
236
|
+
usleep(500000);
|
237
|
+
ensure("ApplicationPool is still waiting", !done);
|
238
|
+
ensure_equals(pool->getActive(), 2u);
|
239
|
+
ensure_equals(pool->getCount(), 2u);
|
240
|
+
|
241
|
+
// Now release one slot from the pool.
|
242
|
+
session1.reset();
|
243
|
+
|
244
|
+
// Session 3 should eventually be opened.
|
245
|
+
EVENTUALLY(10,
|
246
|
+
result = done;
|
247
|
+
);
|
248
|
+
ensure_equals(pool->getActive(), 2u);
|
249
|
+
ensure_equals(pool->getCount(), 2u);
|
250
|
+
}
|
251
|
+
|
252
|
+
TEST_METHOD(10) {
|
253
|
+
// If we call get(), and:
|
254
|
+
// * the pool is already full, but there are inactive apps
|
255
|
+
// (active < count && count == max)
|
256
|
+
// and
|
257
|
+
// * the app group name for this get() is *not* already in the pool
|
258
|
+
// then the an inactive app should be killed in order to
|
259
|
+
// satisfy this get() command.
|
260
|
+
TempDirCopy c1("stub/rack", "rackapp1.tmp");
|
261
|
+
TempDirCopy c2("stub/rack", "rackapp2.tmp");
|
262
|
+
|
263
|
+
// Make the pool full.
|
264
|
+
pool->setMax(2);
|
265
|
+
SessionPtr session1 = spawnRackApp(pool, "rackapp1.tmp");
|
266
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp1.tmp");
|
267
|
+
EVENTUALLY(5,
|
268
|
+
result = pool->getCount() == 2u;
|
269
|
+
);
|
270
|
+
session1.reset();
|
271
|
+
session2.reset();
|
272
|
+
EVENTUALLY(5,
|
273
|
+
result = pool->getActive() == 0u;
|
274
|
+
);
|
275
|
+
|
276
|
+
// Now spawn a different app.
|
277
|
+
session1 = spawnRackApp(pool, "rackapp2.tmp");
|
278
|
+
ensure_equals(pool->getActive(), 1u);
|
279
|
+
ensure_equals(pool->getCount(), 2u);
|
280
|
+
}
|
281
|
+
|
282
|
+
TEST_METHOD(11) {
|
283
|
+
// A Session should still be usable after the pool has been destroyed.
|
284
|
+
SessionPtr session = spawnRackApp(pool, "stub/rack");
|
285
|
+
pool->clear();
|
286
|
+
pool.reset();
|
287
|
+
pool2.reset();
|
288
|
+
|
289
|
+
sendTestRequest(session);
|
290
|
+
session->shutdownWriter();
|
291
|
+
|
292
|
+
int reader = session->getStream();
|
293
|
+
string result = readAll(reader);
|
294
|
+
session->closeStream();
|
295
|
+
ensure(result.find("hello <b>world</b>") != string::npos);
|
296
|
+
}
|
297
|
+
|
298
|
+
TEST_METHOD(12) {
|
299
|
+
// If tmp/restart.txt didn't exist but has now been created,
|
300
|
+
// then the applications under app_root should be restarted.
|
301
|
+
struct stat buf;
|
302
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
303
|
+
SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
|
304
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
|
305
|
+
session1.reset();
|
306
|
+
session2.reset();
|
307
|
+
EVENTUALLY(5,
|
308
|
+
result = pool->getCount() == 2u;
|
309
|
+
);
|
310
|
+
|
311
|
+
touchFile("rackapp.tmp/tmp/restart.txt");
|
312
|
+
spawnRackApp(pool, "rackapp.tmp");
|
313
|
+
|
314
|
+
ensure_equals("No apps are active", pool->getActive(), 0u);
|
315
|
+
ensure_equals("Both apps are killed, and a new one was spawned",
|
316
|
+
pool->getCount(), 1u);
|
317
|
+
ensure("Restart file still exists",
|
318
|
+
stat("rackapp.tmp/tmp/restart.txt", &buf) == 0);
|
319
|
+
}
|
320
|
+
|
321
|
+
TEST_METHOD(13) {
|
322
|
+
// If tmp/restart.txt was present, and its timestamp changed
|
323
|
+
// since the last check, then the applications under the app group name
|
324
|
+
// should still be restarted. However, a subsequent get()
|
325
|
+
// should not result in a restart.
|
326
|
+
pid_t old_pid;
|
327
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
328
|
+
TempDir d("rackapp.tmp/tmp/restart.txt");
|
329
|
+
SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
|
330
|
+
old_pid = session->getPid();
|
331
|
+
session.reset();
|
332
|
+
EVENTUALLY(5,
|
333
|
+
result = pool->getActive() == 0u;
|
334
|
+
);
|
335
|
+
|
336
|
+
touchFile("rackapp.tmp/tmp/restart.txt", 10);
|
337
|
+
|
338
|
+
session = spawnRackApp(pool, "rackapp.tmp");
|
339
|
+
ensure("The app was restarted", session->getPid() != old_pid);
|
340
|
+
old_pid = session->getPid();
|
341
|
+
session.reset();
|
342
|
+
EVENTUALLY(5,
|
343
|
+
result = pool->getActive() == 0u;
|
344
|
+
);
|
345
|
+
|
346
|
+
session = spawnRackApp(pool, "rackapp.tmp");
|
347
|
+
ensure_equals("The app was not restarted",
|
348
|
+
old_pid, session->getPid());
|
349
|
+
}
|
350
|
+
|
351
|
+
TEST_METHOD(15) {
|
352
|
+
// Test whether restarting with restart.txt really results in code reload.
|
353
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
354
|
+
SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
|
355
|
+
sendTestRequest(session);
|
356
|
+
string result = readAll(session->getStream());
|
357
|
+
ensure(result.find("hello <b>world</b>") != string::npos);
|
358
|
+
session.reset();
|
359
|
+
EVENTUALLY(5,
|
360
|
+
result = pool->getActive() == 0u;
|
361
|
+
);
|
362
|
+
|
363
|
+
touchFile("rackapp.tmp/tmp/restart.txt");
|
364
|
+
replaceStringInFile("rackapp.tmp/config.ru", "world", "world 2");
|
365
|
+
|
366
|
+
session = spawnRackApp(pool, "rackapp.tmp");
|
367
|
+
sendTestRequest(session);
|
368
|
+
result = readAll(session->getStream());
|
369
|
+
ensure("App code has been reloaded", result.find("hello <b>world 2</b>") != string::npos);
|
370
|
+
}
|
371
|
+
|
372
|
+
TEST_METHOD(16) {
|
373
|
+
// If tmp/always_restart.txt is present and is a file,
|
374
|
+
// then the application under app_root should be always restarted.
|
375
|
+
struct stat buf;
|
376
|
+
pid_t old_pid;
|
377
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
378
|
+
SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
|
379
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
|
380
|
+
session1.reset();
|
381
|
+
session2.reset();
|
382
|
+
EVENTUALLY(5,
|
383
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
384
|
+
);
|
385
|
+
|
386
|
+
touchFile("rackapp.tmp/tmp/always_restart.txt");
|
387
|
+
|
388
|
+
// This get() results in a restart.
|
389
|
+
session1 = spawnRackApp(pool, "rackapp.tmp");
|
390
|
+
old_pid = session1->getPid();
|
391
|
+
session1.reset();
|
392
|
+
EVENTUALLY(5,
|
393
|
+
// First restart: no apps are active
|
394
|
+
result = pool->getActive() == 0u;
|
395
|
+
);
|
396
|
+
ensure_equals("First restart: the first 2 apps were killed, and a new one was spawned",
|
397
|
+
pool->getCount(), 1u);
|
398
|
+
ensure("always_restart file has not been deleted",
|
399
|
+
stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
|
400
|
+
|
401
|
+
// This get() results in a restart as well.
|
402
|
+
session1 = spawnRackApp(pool, "rackapp.tmp");
|
403
|
+
ensure(old_pid != session1->getPid());
|
404
|
+
session1.reset();
|
405
|
+
EVENTUALLY(5,
|
406
|
+
// Second restart: no apps are active
|
407
|
+
result = pool->getActive() == 0u;
|
408
|
+
);
|
409
|
+
ensure_equals("Second restart: the last app was killed, and a new one was spawned",
|
410
|
+
pool->getCount(), 1u);
|
411
|
+
ensure("always_restart file has not been deleted",
|
412
|
+
stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
|
413
|
+
}
|
414
|
+
|
415
|
+
TEST_METHOD(17) {
|
416
|
+
// If tmp/always_restart.txt is present and is a directory,
|
417
|
+
// then the application under app_root should be always restarted.
|
418
|
+
struct stat buf;
|
419
|
+
pid_t old_pid;
|
420
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
421
|
+
SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
|
422
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
|
423
|
+
session1.reset();
|
424
|
+
session2.reset();
|
425
|
+
EVENTUALLY(5,
|
426
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
427
|
+
);
|
428
|
+
|
429
|
+
TempDir d("rackapp.tmp/tmp/always_restart.txt");
|
430
|
+
|
431
|
+
// This get() results in a restart.
|
432
|
+
session1 = spawnRackApp(pool, "rackapp.tmp");
|
433
|
+
old_pid = session1->getPid();
|
434
|
+
session1.reset();
|
435
|
+
EVENTUALLY(5,
|
436
|
+
// First restart: no apps are active
|
437
|
+
result = pool->getActive() == 0u;
|
438
|
+
);
|
439
|
+
ensure_equals("First restart: the first 2 apps were killed, and a new one was spawned",
|
440
|
+
pool->getCount(), 1u);
|
441
|
+
ensure("always_restart directory has not been deleted",
|
442
|
+
stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
|
443
|
+
|
444
|
+
// This get() results in a restart as well.
|
445
|
+
session1 = spawnRackApp(pool, "rackapp.tmp");
|
446
|
+
ensure(old_pid != session1->getPid());
|
447
|
+
session1.reset();
|
448
|
+
EVENTUALLY(5,
|
449
|
+
// Second restart: no apps are active
|
450
|
+
result = pool->getActive() == 0u;
|
451
|
+
);
|
452
|
+
ensure_equals("Second restart: the last app was killed, and a new one was spawned",
|
453
|
+
pool->getCount(), 1u);
|
454
|
+
ensure("always_restart directory has not been deleted",
|
455
|
+
stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
|
456
|
+
}
|
457
|
+
|
458
|
+
TEST_METHOD(18) {
|
459
|
+
// Test whether restarting with tmp/always_restart.txt really results in code reload.
|
460
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
461
|
+
SessionPtr session = spawnRackApp(pool, "rackapp.tmp");
|
462
|
+
sendTestRequest(session);
|
463
|
+
string result = readAll(session->getStream());
|
464
|
+
ensure(result.find("hello <b>world</b>") != string::npos);
|
465
|
+
session.reset();
|
466
|
+
|
467
|
+
touchFile("rackapp.tmp/tmp/always_restart.txt");
|
468
|
+
replaceStringInFile("rackapp.tmp/config.ru", "world", "world 2");
|
469
|
+
|
470
|
+
session = spawnRackApp(pool, "rackapp.tmp");
|
471
|
+
sendTestRequest(session);
|
472
|
+
result = readAll(session->getStream());
|
473
|
+
ensure("App code has been reloaded (1)", result.find("hello <b>world 2</b>") != string::npos);
|
474
|
+
session.reset();
|
475
|
+
EVENTUALLY(5,
|
476
|
+
result = pool->getActive() == 0u;
|
477
|
+
);
|
478
|
+
|
479
|
+
replaceStringInFile("rackapp.tmp/config.ru", "world 2", "world 3");
|
480
|
+
session = spawnRackApp(pool, "rackapp.tmp");
|
481
|
+
sendTestRequest(session);
|
482
|
+
result = readAll(session->getStream());
|
483
|
+
ensure("App code has been reloaded (2)", result.find("hello <b>world 3</b>") != string::npos);
|
484
|
+
session.reset();
|
485
|
+
}
|
486
|
+
|
487
|
+
TEST_METHOD(19) {
|
488
|
+
// If tmp/restart.txt and tmp/always_restart.txt are present,
|
489
|
+
// the application under app_root should still be restarted and
|
490
|
+
// both files must be kept.
|
491
|
+
pid_t old_pid, pid;
|
492
|
+
struct stat buf;
|
493
|
+
TempDirCopy c("stub/rack", "rackapp.tmp");
|
494
|
+
SessionPtr session1 = spawnRackApp(pool, "rackapp.tmp");
|
495
|
+
SessionPtr session2 = spawnRackApp(pool2, "rackapp.tmp");
|
496
|
+
session1.reset();
|
497
|
+
session2.reset();
|
498
|
+
EVENTUALLY(5,
|
499
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
500
|
+
);
|
501
|
+
|
502
|
+
touchFile("rackapp.tmp/tmp/restart.txt");
|
503
|
+
touchFile("rackapp.tmp/tmp/always_restart.txt");
|
504
|
+
|
505
|
+
old_pid = spawnRackApp(pool, "rackapp.tmp")->getPid();
|
506
|
+
ensure("always_restart.txt file has not been deleted",
|
507
|
+
stat("rackapp.tmp/tmp/always_restart.txt", &buf) == 0);
|
508
|
+
ensure("restart.txt file has not been deleted",
|
509
|
+
stat("rackapp.tmp/tmp/restart.txt", &buf) == 0);
|
510
|
+
EVENTUALLY(5,
|
511
|
+
result = pool->getActive() == 0u;
|
512
|
+
);
|
513
|
+
|
514
|
+
pid = spawnRackApp(pool, "rackapp.tmp")->getPid();
|
515
|
+
ensure("The app was restarted", pid != old_pid);
|
516
|
+
}
|
517
|
+
|
518
|
+
TEST_METHOD(20) {
|
519
|
+
// It should look for restart.txt in the directory given by
|
520
|
+
// the restartDir option, if available.
|
521
|
+
struct stat buf;
|
522
|
+
char path[1024];
|
523
|
+
PoolOptions options("stub/rack");
|
524
|
+
options.appType = "rack";
|
525
|
+
options.restartDir = string(getcwd(path, sizeof(path))) + "/stub/rack";
|
526
|
+
|
527
|
+
SessionPtr session1 = pool->get(options);
|
528
|
+
SessionPtr session2 = pool2->get(options);
|
529
|
+
session1.reset();
|
530
|
+
session2.reset();
|
531
|
+
EVENTUALLY(5,
|
532
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
533
|
+
);
|
534
|
+
|
535
|
+
DeleteFileEventually f("stub/rack/restart.txt");
|
536
|
+
touchFile("stub/rack/restart.txt");
|
537
|
+
|
538
|
+
pool->get(options);
|
539
|
+
|
540
|
+
ensure_equals("No apps are active", pool->getActive(), 0u);
|
541
|
+
ensure_equals("Both apps are killed, and a new one was spawned",
|
542
|
+
pool->getCount(), 1u);
|
543
|
+
ensure("Restart file still exists",
|
544
|
+
stat("stub/rack/restart.txt", &buf) == 0);
|
545
|
+
}
|
546
|
+
|
547
|
+
TEST_METHOD(21) {
|
548
|
+
// restartDir may also be a directory relative to the
|
549
|
+
// application root.
|
550
|
+
struct stat buf;
|
551
|
+
PoolOptions options("stub/rack");
|
552
|
+
options.appType = "rack";
|
553
|
+
options.restartDir = "public";
|
554
|
+
|
555
|
+
SessionPtr session1 = pool->get(options);
|
556
|
+
SessionPtr session2 = pool2->get(options);
|
557
|
+
session1.reset();
|
558
|
+
session2.reset();
|
559
|
+
EVENTUALLY(5,
|
560
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
561
|
+
);
|
562
|
+
|
563
|
+
DeleteFileEventually f("stub/rack/public/restart.txt");
|
564
|
+
touchFile("stub/rack/public/restart.txt");
|
565
|
+
|
566
|
+
pool->get(options);
|
567
|
+
|
568
|
+
ensure_equals("No apps are active", pool->getActive(), 0u);
|
569
|
+
ensure_equals("Both apps are killed, and a new one was spawned",
|
570
|
+
pool->getCount(), 1u);
|
571
|
+
ensure("Restart file still exists",
|
572
|
+
stat("stub/rack/public/restart.txt", &buf) == 0);
|
573
|
+
}
|
574
|
+
|
575
|
+
TEST_METHOD(22) {
|
576
|
+
// The cleaner thread should clean idle applications.
|
577
|
+
pool->setMaxIdleTime(1);
|
578
|
+
spawnRackApp(pool, "stub/rack");
|
579
|
+
EVENTUALLY(10,
|
580
|
+
result = pool->getCount() == 0u;
|
581
|
+
);
|
582
|
+
|
583
|
+
time_t begin = time(NULL);
|
584
|
+
while (pool->getCount() == 1u && time(NULL) - begin < 10) {
|
585
|
+
usleep(100000);
|
586
|
+
}
|
587
|
+
ensure_equals("App should have been cleaned up", pool->getCount(), 0u);
|
588
|
+
}
|
589
|
+
|
590
|
+
TEST_METHOD(23) {
|
591
|
+
// MaxPerApp is respected.
|
592
|
+
pool->setMax(3);
|
593
|
+
pool->setMaxPerApp(1);
|
594
|
+
|
595
|
+
// We connect to stub/rack while it already has an instance with
|
596
|
+
// 1 request in its queue. Assert that the pool doesn't spawn
|
597
|
+
// another instance.
|
598
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
599
|
+
SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
|
600
|
+
|
601
|
+
// We connect to stub/wsgi. Assert that the pool spawns a new
|
602
|
+
// instance for this app.
|
603
|
+
TempDirCopy c("stub/wsgi", "wsgiapp.tmp");
|
604
|
+
ApplicationPool::Ptr pool3 = newPoolConnection();
|
605
|
+
SessionPtr session3 = spawnWsgiApp(pool3, "wsgiapp.tmp");
|
606
|
+
ensure_equals(pool->getCount(), 2u);
|
607
|
+
}
|
608
|
+
|
609
|
+
TEST_METHOD(24) {
|
610
|
+
// Application instance is shutdown after 'maxRequests' requests.
|
611
|
+
PoolOptions options("stub/rack");
|
612
|
+
int reader;
|
613
|
+
pid_t originalPid;
|
614
|
+
SessionPtr session;
|
615
|
+
|
616
|
+
options.appType = "rack";
|
617
|
+
options.maxRequests = 4;
|
618
|
+
pool->setMax(1);
|
619
|
+
session = pool->get(options);
|
620
|
+
originalPid = session->getPid();
|
621
|
+
session.reset();
|
622
|
+
EVENTUALLY(5,
|
623
|
+
result = pool->getActive() == 0u;
|
624
|
+
);
|
625
|
+
|
626
|
+
for (unsigned int i = 0; i < 4; i++) {
|
627
|
+
session = pool->get(options);
|
628
|
+
sendTestRequest(session);
|
629
|
+
session->shutdownWriter();
|
630
|
+
reader = session->getStream();
|
631
|
+
readAll(reader);
|
632
|
+
// Must explicitly call reset() here because we
|
633
|
+
// want to close the session right now.
|
634
|
+
session.reset();
|
635
|
+
EVENTUALLY(5,
|
636
|
+
result = pool->getActive() == 0u;
|
637
|
+
);
|
638
|
+
}
|
639
|
+
|
640
|
+
session = pool->get(options);
|
641
|
+
ensure(session->getPid() != originalPid);
|
642
|
+
}
|
643
|
+
|
644
|
+
TEST_METHOD(25) {
|
645
|
+
// If global queueing mode is enabled, then get() waits until
|
646
|
+
// there's at least one idle backend process for this application
|
647
|
+
// domain.
|
648
|
+
pool->setMax(1);
|
649
|
+
|
650
|
+
PoolOptions options;
|
651
|
+
options.appRoot = "stub/rack";
|
652
|
+
options.appType = "rack";
|
653
|
+
options.useGlobalQueue = true;
|
654
|
+
SessionPtr session = pool->get(options);
|
655
|
+
|
656
|
+
bool done = false;
|
657
|
+
SpawnRackAppFunction func;
|
658
|
+
func.pool = pool2;
|
659
|
+
func.done = &done;
|
660
|
+
TempThread thr(func);
|
661
|
+
|
662
|
+
// Previous session hasn't been closed yet, so pool should still
|
663
|
+
// be waiting.
|
664
|
+
usleep(100000);
|
665
|
+
ensure("(1)", !done);
|
666
|
+
ensure_equals("(2)", pool->getGlobalQueueSize(), 1u);
|
667
|
+
ensure_equals("(3)", pool->getActive(), 1u);
|
668
|
+
ensure_equals("(4)", pool->getCount(), 1u);
|
669
|
+
|
670
|
+
// Close the previous session. The thread should now finish.
|
671
|
+
session.reset();
|
672
|
+
EVENTUALLY(5,
|
673
|
+
result = done;
|
674
|
+
);
|
675
|
+
}
|
676
|
+
|
677
|
+
TEST_METHOD(26) {
|
678
|
+
// When a previous application group spinned down, and we touched
|
679
|
+
// restart.txt and try to spin up a new process for this domain,
|
680
|
+
// then any ApplicationSpawner/FrameworkSpawner processes should be
|
681
|
+
// killed first.
|
682
|
+
SessionPtr session;
|
683
|
+
TempDirCopy c1("stub/rack", "rackapp1.tmp");
|
684
|
+
TempDirCopy c2("stub/rack", "rackapp2.tmp");
|
685
|
+
shared_ptr<ReloadLoggingSpawnManager> spawnManager(
|
686
|
+
new ReloadLoggingSpawnManager("../helper-scripts/passenger-spawn-server", generation)
|
687
|
+
);
|
688
|
+
reinitializeWithSpawnManager(spawnManager);
|
689
|
+
|
690
|
+
pool->setMax(1);
|
691
|
+
session = spawnRackApp(pool, "rackapp1.tmp");
|
692
|
+
session.reset();
|
693
|
+
session = spawnRackApp(pool, "rackapp2.tmp");
|
694
|
+
ensure_equals("rackapp2.tmp is not reloaded because restart.txt is not touched",
|
695
|
+
spawnManager->reloadLog.size(), 0u);
|
696
|
+
session.reset();
|
697
|
+
EVENTUALLY(5,
|
698
|
+
result = pool->getActive() == 0u;
|
699
|
+
);
|
700
|
+
|
701
|
+
touchFile("rackapp1.tmp/tmp/restart.txt");
|
702
|
+
session = spawnRackApp(pool, "rackapp1.tmp");
|
703
|
+
ensure_equals("rackapp1.tmp is reloaded because restart.txt is touched (1)",
|
704
|
+
spawnManager->reloadLog.size(), 1u);
|
705
|
+
ensure_equals("rackapp1.tmp is reloaded because restart.txt is touched (2)",
|
706
|
+
spawnManager->reloadLog[0], "rackapp1.tmp");
|
707
|
+
}
|
708
|
+
|
709
|
+
TEST_METHOD(27) {
|
710
|
+
// Test inspect()
|
711
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
712
|
+
string str = pool->inspect();
|
713
|
+
ensure("Contains 'max = '", str.find("max ") != string::npos);
|
714
|
+
ensure("Contains PID", str.find("PID: " + toString(session1->getPid())) != string::npos);
|
715
|
+
}
|
716
|
+
|
717
|
+
TEST_METHOD(28) {
|
718
|
+
// Test toXml(true)
|
719
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
720
|
+
string xml = pool->toXml();
|
721
|
+
ensure("Contains <process>", xml.find("<process>") != string::npos);
|
722
|
+
ensure("Contains PID", xml.find("<pid>" + toString(session1->getPid()) + "</pid>") != string::npos);
|
723
|
+
ensure("Contains sensitive information", xml.find("<server_sockets>") != string::npos);
|
724
|
+
}
|
725
|
+
|
726
|
+
TEST_METHOD(29) {
|
727
|
+
// Test toXml(false)
|
728
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
729
|
+
string xml = pool->toXml(false);
|
730
|
+
ensure("Contains <process>", xml.find("<process>") != string::npos);
|
731
|
+
ensure("Contains PID", xml.find("<pid>" + toString(session1->getPid()) + "</pid>") != string::npos);
|
732
|
+
ensure("Does not contain sensitive information", xml.find("<server_sockets>") == string::npos);
|
733
|
+
}
|
734
|
+
|
735
|
+
TEST_METHOD(30) {
|
736
|
+
// Test detach().
|
737
|
+
|
738
|
+
// Create 2 processes, where only the first one is active.
|
739
|
+
SessionPtr session1 = spawnRackApp(pool, "stub/rack");
|
740
|
+
SessionPtr session2 = spawnRackApp(pool2, "stub/rack");
|
741
|
+
session2.reset();
|
742
|
+
EVENTUALLY(5,
|
743
|
+
result = pool->getActive() == 1u && pool->getCount() == 2u;
|
744
|
+
);
|
745
|
+
|
746
|
+
// Make sure session2 refers to a different process than session1.
|
747
|
+
session2 = spawnRackApp(pool2, "stub/rack");
|
748
|
+
string session2dk = session2->getDetachKey();
|
749
|
+
session2.reset();
|
750
|
+
EVENTUALLY(5,
|
751
|
+
result = pool->getActive() == 1u;
|
752
|
+
);
|
753
|
+
|
754
|
+
// First detach works. It was active so the 'active' property
|
755
|
+
// is decremented.
|
756
|
+
ensure("(10)", pool->detach(session1->getDetachKey()));
|
757
|
+
ensure_equals("(11)", pool->getActive(), 0u);
|
758
|
+
ensure_equals("(12)", pool->getCount(), 1u);
|
759
|
+
|
760
|
+
// Second detach with the same identifier doesn't do anything.
|
761
|
+
ensure("(20)", !pool->detach(session1->getDetachKey()));
|
762
|
+
ensure_equals("(21)", pool->getActive(), 0u);
|
763
|
+
ensure_equals("(22)", pool->getCount(), 1u);
|
764
|
+
|
765
|
+
// Detaching an inactive process works too.
|
766
|
+
ensure("(30)", pool->detach(session2dk));
|
767
|
+
ensure_equals("(31)", pool->getActive(), 0u);
|
768
|
+
ensure_equals("(32)", pool->getCount(), 0u);
|
769
|
+
}
|
770
|
+
|
771
|
+
TEST_METHOD(31) {
|
772
|
+
// If the app group does not yet exist, and options.minProcesses > 0,
|
773
|
+
// then get() will spawn 1 process immediately, return its session,
|
774
|
+
// and spawn more processes in the background until options.minProcesses
|
775
|
+
// is satisfied.
|
776
|
+
TempDirCopy c1("stub/rack", "rackapp.tmp");
|
777
|
+
PoolOptions options;
|
778
|
+
options.appRoot = "rackapp.tmp";
|
779
|
+
options.appType = "rack";
|
780
|
+
options.minProcesses = 3;
|
781
|
+
options.spawnMethod = "conservative";
|
782
|
+
|
783
|
+
writeFile("rackapp.tmp/config.ru",
|
784
|
+
"sleep 0.1\n"
|
785
|
+
"run lambda {}\n");
|
786
|
+
|
787
|
+
SessionPtr session1 = pool->get(options);
|
788
|
+
ensure_equals(pool->getActive(), 1u);
|
789
|
+
ensure_equals(pool->getCount(), 1u);
|
790
|
+
|
791
|
+
EVENTUALLY(5,
|
792
|
+
result = pool->getCount() == 3u;
|
793
|
+
);
|
794
|
+
}
|
795
|
+
|
796
|
+
TEST_METHOD(32) {
|
797
|
+
// If the app group already exists, all processes are active,
|
798
|
+
// count < max, options.minProcesses > 0 and global queuing turned off,
|
799
|
+
// then get() will check out an existing process immediately
|
800
|
+
// and spawn new ones in the background until options.minProcesses
|
801
|
+
// is satisfied.
|
802
|
+
TempDirCopy c1("stub/rack", "rackapp.tmp");
|
803
|
+
PoolOptions options;
|
804
|
+
options.appRoot = "rackapp.tmp";
|
805
|
+
options.appType = "rack";
|
806
|
+
options.spawnMethod = "conservative";
|
807
|
+
options.minProcesses = 3;
|
808
|
+
pool->setMax(3);
|
809
|
+
|
810
|
+
// Spawn a single process.
|
811
|
+
SessionPtr session1 = pool->get(options);
|
812
|
+
ensure_equals(pool->getActive(), 1u);
|
813
|
+
ensure_equals(pool->getCount(), 1u);
|
814
|
+
|
815
|
+
writeFile("rackapp.tmp/config.ru",
|
816
|
+
"sleep 0.1\n"
|
817
|
+
"run lambda {}\n");
|
818
|
+
|
819
|
+
// Now call get(); this one will use the previous process
|
820
|
+
// and spawn a new one in the background.
|
821
|
+
SessionPtr session2 = pool2->get(options);
|
822
|
+
ensure_equals(pool->getActive(), 1u);
|
823
|
+
ensure_equals(pool->getCount(), 1u);
|
824
|
+
ensure_equals(session1->getPid(), session2->getPid());
|
825
|
+
|
826
|
+
EVENTUALLY(5,
|
827
|
+
result = pool->getCount() == 3u;
|
828
|
+
);
|
829
|
+
}
|
830
|
+
|
831
|
+
/* If the app group already exists, all processes are active,
|
832
|
+
* count < max, options.minProcesses > 0 and global queuing turned on,
|
833
|
+
* then get() will wait until either
|
834
|
+
* (1) an existing process becomes inactive.
|
835
|
+
* or until
|
836
|
+
* (2) a new process has been spawned.
|
837
|
+
*/
|
838
|
+
|
839
|
+
TEST_METHOD(33) {
|
840
|
+
// Here we test scenario (1).
|
841
|
+
PoolOptions options;
|
842
|
+
options.appRoot = "stub/rack";
|
843
|
+
options.appType = "rack";
|
844
|
+
options.minProcesses = 3;
|
845
|
+
options.useGlobalQueue = true;
|
846
|
+
pool->setMax(3);
|
847
|
+
|
848
|
+
ApplicationPool::Ptr pool3 = newPoolConnection();
|
849
|
+
ApplicationPool::Ptr pool4 = newPoolConnection();
|
850
|
+
|
851
|
+
// Spawn 3 processes.
|
852
|
+
SessionPtr session1 = pool->get(options);
|
853
|
+
SessionPtr session2 = pool2->get(options);
|
854
|
+
session2.reset();
|
855
|
+
EVENTUALLY(5,
|
856
|
+
result = pool->getCount() == 3u;
|
857
|
+
);
|
858
|
+
|
859
|
+
// Make sure all of them are active.
|
860
|
+
session2 = pool2->get(options);
|
861
|
+
SessionPtr session3 = pool3->get(options);
|
862
|
+
ensure_equals(pool->getActive(), 3u);
|
863
|
+
ensure_equals(pool->getCount(), 3u);
|
864
|
+
|
865
|
+
// Now call get() in a thread.
|
866
|
+
SpawnRackAppFunction func;
|
867
|
+
bool done = false;
|
868
|
+
func.pool = pool4;
|
869
|
+
func.done = &done;
|
870
|
+
TempThread thr(func);
|
871
|
+
|
872
|
+
usleep(20000);
|
873
|
+
ensure("Still waiting on global queue", !done);
|
874
|
+
ensure_equals(pool->getGlobalQueueSize(), 1u);
|
875
|
+
|
876
|
+
// Make 1 process available.
|
877
|
+
session1.reset();
|
878
|
+
EVENTUALLY(5,
|
879
|
+
result = done;
|
880
|
+
);
|
881
|
+
}
|
882
|
+
|
883
|
+
TEST_METHOD(34) {
|
884
|
+
// Here we test scenario (2).
|
885
|
+
PoolOptions options;
|
886
|
+
options.appRoot = "stub/rack";
|
887
|
+
options.appType = "rack";
|
888
|
+
options.minProcesses = 3;
|
889
|
+
options.useGlobalQueue = true;
|
890
|
+
pool->setMax(3);
|
891
|
+
|
892
|
+
ApplicationPool::Ptr pool3 = newPoolConnection();
|
893
|
+
ApplicationPool::Ptr pool4 = newPoolConnection();
|
894
|
+
ApplicationPool::Ptr pool5 = newPoolConnection();
|
895
|
+
|
896
|
+
// Spawn 3 processes.
|
897
|
+
SessionPtr session1 = pool->get(options);
|
898
|
+
SessionPtr session2 = pool2->get(options);
|
899
|
+
session2.reset();
|
900
|
+
EVENTUALLY(5,
|
901
|
+
result = pool->getCount() == 3u;
|
902
|
+
);
|
903
|
+
|
904
|
+
// Make sure all of them are active.
|
905
|
+
session2 = pool2->get(options);
|
906
|
+
SessionPtr session3 = pool3->get(options);
|
907
|
+
ensure_equals(pool->getActive(), 3u);
|
908
|
+
ensure_equals(pool->getCount(), 3u);
|
909
|
+
|
910
|
+
// Now call get() in a thread.
|
911
|
+
SpawnRackAppFunction func1;
|
912
|
+
SessionPtr session4;
|
913
|
+
bool done1 = false;
|
914
|
+
func1.pool = pool4;
|
915
|
+
func1.done = &done1;
|
916
|
+
func1.session = &session4;
|
917
|
+
TempThread thr1(func1);
|
918
|
+
|
919
|
+
// And again.
|
920
|
+
SpawnRackAppFunction func2;
|
921
|
+
SessionPtr session5;
|
922
|
+
bool done2 = false;
|
923
|
+
func2.pool = pool5;
|
924
|
+
func2.done = &done2;
|
925
|
+
func2.session = &session5;
|
926
|
+
TempThread thr2(func2);
|
927
|
+
|
928
|
+
// We should now arrive at a state where there are 3 processes, all
|
929
|
+
// busy, and 2 threads waiting on the global queue.
|
930
|
+
usleep(20000);
|
931
|
+
ensure("Still waiting on global queue", !done1 && !done2);
|
932
|
+
ensure_equals(pool->getGlobalQueueSize(), 2u);
|
933
|
+
|
934
|
+
// Increasing the max will cause one of the threads to wake
|
935
|
+
// up, start a spawn action in the background, and go to sleep
|
936
|
+
// again. Eventually the new process will be done spawning,
|
937
|
+
// causing one of the threads to wake up. The other one will
|
938
|
+
// continue to wait.
|
939
|
+
pool->setMax(4);
|
940
|
+
EVENTUALLY(5,
|
941
|
+
result = (done1 && !done2) || (!done1 && done2);
|
942
|
+
);
|
943
|
+
}
|
944
|
+
|
945
|
+
TEST_METHOD(35) {
|
946
|
+
// When spawning an app in the background, if it encountered an error
|
947
|
+
// it will remove the whole app group.
|
948
|
+
TempDirCopy c1("stub/rack", "rackapp.tmp");
|
949
|
+
PoolOptions options;
|
950
|
+
options.appRoot = "rackapp.tmp";
|
951
|
+
options.appType = "rack";
|
952
|
+
options.spawnMethod = "conservative";
|
953
|
+
options.printExceptions = false;
|
954
|
+
|
955
|
+
SessionPtr session1 = pool->get(options);
|
956
|
+
|
957
|
+
writeFile("rackapp.tmp/config.ru",
|
958
|
+
"raise 'foo'\n");
|
959
|
+
pool2->get(options);
|
960
|
+
|
961
|
+
EVENTUALLY(5,
|
962
|
+
result = pool->getCount() == 0u;
|
963
|
+
);
|
964
|
+
}
|
965
|
+
|
966
|
+
TEST_METHOD(36) {
|
967
|
+
// When cleaning, at least options.minProcesses processes should be kept around.
|
968
|
+
pool->setMaxIdleTime(0);
|
969
|
+
ApplicationPool::Ptr pool3 = newPoolConnection();
|
970
|
+
PoolOptions options;
|
971
|
+
options.appRoot = "stub/rack";
|
972
|
+
options.appType = "rack";
|
973
|
+
options.minProcesses = 2;
|
974
|
+
|
975
|
+
// Spawn 2 processes.
|
976
|
+
SessionPtr session1 = pool->get(options);
|
977
|
+
SessionPtr session2 = pool2->get(options);
|
978
|
+
session1.reset();
|
979
|
+
session2.reset();
|
980
|
+
EVENTUALLY(5,
|
981
|
+
result = pool->getActive() == 0u && pool->getCount() == 2u;
|
982
|
+
);
|
983
|
+
|
984
|
+
// Spawn another process, so we get 3.
|
985
|
+
session1 = pool->get(options);
|
986
|
+
session2 = pool2->get(options);
|
987
|
+
SessionPtr session3 = pool3->get(options);
|
988
|
+
session3.reset();
|
989
|
+
EVENTUALLY(5,
|
990
|
+
result = pool->getActive() == 2u && pool->getCount() == 3u;
|
991
|
+
);
|
992
|
+
|
993
|
+
// Now wait until one process is idle cleaned.
|
994
|
+
pool->setMaxIdleTime(1);
|
995
|
+
EVENTUALLY(10,
|
996
|
+
result = pool->getCount() == 2u;
|
997
|
+
);
|
998
|
+
}
|
999
|
+
|
1000
|
+
TEST_METHOD(37) {
|
1001
|
+
// Test whether processes are grouped together by appGroupName.
|
1002
|
+
TempDirCopy c1("stub/rack", "rackapp.tmp");
|
1003
|
+
PoolOptions options1;
|
1004
|
+
options1.appRoot = "rackapp.tmp";
|
1005
|
+
options1.appType = "rack";
|
1006
|
+
options1.appGroupName = "group A";
|
1007
|
+
SessionPtr session1 = pool->get(options1);
|
1008
|
+
|
1009
|
+
TempDirCopy c2("stub/rack", "rackapp2.tmp");
|
1010
|
+
PoolOptions options2;
|
1011
|
+
options2.appRoot = "rackapp2.tmp";
|
1012
|
+
options2.appType = "rack";
|
1013
|
+
options2.appGroupName = "group A";
|
1014
|
+
SessionPtr session2 = pool2->get(options2);
|
1015
|
+
|
1016
|
+
session1.reset();
|
1017
|
+
session2.reset();
|
1018
|
+
EVENTUALLY(5,
|
1019
|
+
result = pool->getCount() == 2u;
|
1020
|
+
);
|
1021
|
+
|
1022
|
+
touchFile("rackapp.tmp/tmp/restart.txt");
|
1023
|
+
session1 = pool->get(options1);
|
1024
|
+
ensure_equals(pool->getCount(), 1u);
|
1025
|
+
}
|
1026
|
+
|
1027
|
+
/*************************************/
|
1028
|
+
|
1029
|
+
#endif /* USE_TEMPLATE */
|