passenger 4.0.42 → 4.0.43
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/CHANGELOG +13 -0
- data/CONTRIBUTING.md +2 -19
- data/build/agents.rb +4 -1
- data/build/cxx_tests.rb +7 -2
- data/build/debian.rb +1 -1
- data/debian.template/control.template +0 -2
- data/doc/CodingTipsAndPitfalls.md +56 -0
- data/doc/Users guide Apache.idmap.txt +16 -14
- data/doc/Users guide Nginx.idmap.txt +8 -6
- data/doc/Users guide Standalone.idmap.txt +3 -1
- data/doc/Users guide Standalone.txt +1 -1
- data/doc/users_guide_snippets/environment_variables.txt +1 -0
- data/doc/users_guide_snippets/installation.txt +5 -5
- data/doc/users_guide_snippets/support_information.txt +42 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +42 -0
- data/ext/common/ApplicationPool2/Common.h +1 -0
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -7
- data/ext/common/ApplicationPool2/DummySpawner.h +1 -1
- data/ext/common/ApplicationPool2/Group.h +4 -2
- data/ext/common/ApplicationPool2/Options.h +9 -7
- data/ext/common/ApplicationPool2/Pool.h +83 -40
- data/ext/common/ApplicationPool2/Process.h +2 -6
- data/ext/common/ApplicationPool2/README.md +0 -40
- data/ext/common/ApplicationPool2/SmartSpawner.h +2 -9
- data/ext/common/ApplicationPool2/Spawner.h +1 -4
- data/ext/common/ApplicationPool2/SpawnerFactory.h +6 -9
- data/ext/common/ApplicationPool2/SuperGroup.h +3 -3
- data/ext/common/Constants.h +1 -1
- data/ext/common/UnionStation/Connection.h +227 -0
- data/ext/common/UnionStation/Core.h +497 -0
- data/ext/common/UnionStation/ScopeLog.h +172 -0
- data/ext/common/UnionStation/Transaction.h +276 -0
- data/ext/common/Utils.cpp +83 -8
- data/ext/common/Utils.h +25 -4
- data/ext/common/Utils/AnsiColorConstants.h +1 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +6 -170
- data/ext/common/Utils/SpeedMeter.h +258 -0
- data/ext/common/Utils/StrIntUtils.cpp +6 -0
- data/ext/common/Utils/StringScanning.h +277 -0
- data/ext/common/Utils/SystemMetricsCollector.h +1460 -0
- data/ext/common/agents/Base.cpp +8 -8
- data/ext/common/agents/HelperAgent/Main.cpp +12 -6
- data/ext/common/agents/HelperAgent/RequestHandler.h +15 -16
- data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +199 -0
- data/ext/common/agents/LoggingAgent/LoggingServer.h +2 -1
- data/ext/common/agents/SpawnPreparer.cpp +20 -32
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/config/list_instances_command.rb +118 -0
- data/lib/phusion_passenger/config/main.rb +22 -4
- data/lib/phusion_passenger/config/system_metrics_command.rb +37 -0
- data/lib/phusion_passenger/config/utils.rb +1 -1
- data/lib/phusion_passenger/loader_shared_helpers.rb +8 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +1 -1
- data/resources/templates/error_layout.html.template +3 -3
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -5
- data/test/cxx/ApplicationPool2/PoolTest.cpp +1 -3
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -7
- data/test/cxx/RequestHandlerTest.cpp +9 -3
- data/test/cxx/UnionStationTest.cpp +61 -64
- metadata +13 -4
- metadata.gz.asc +7 -7
- data/ext/common/UnionStation.h +0 -968
- data/helper-scripts/system-memory-stats.py +0 -207
data/lib/phusion_passenger.rb
CHANGED
@@ -30,7 +30,7 @@ module PhusionPassenger
|
|
30
30
|
|
31
31
|
PACKAGE_NAME = 'passenger'
|
32
32
|
# Run 'rake ext/common/Constants.h' after changing this number.
|
33
|
-
VERSION_STRING = '4.0.
|
33
|
+
VERSION_STRING = '4.0.43'
|
34
34
|
|
35
35
|
PREFERRED_NGINX_VERSION = '1.6.0'
|
36
36
|
NGINX_SHA256_CHECKSUM = '943ad757a1c3e8b3df2d5c4ddacc508861922e36fa10ea6f8e3a348fc9abfc1a'
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# Phusion Passenger - https://www.phusionpassenger.com/
|
2
|
+
# Copyright (c) 2014 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
|
24
|
+
require 'optparse'
|
25
|
+
PhusionPassenger.require_passenger_lib 'constants'
|
26
|
+
PhusionPassenger.require_passenger_lib 'admin_tools/server_instance'
|
27
|
+
PhusionPassenger.require_passenger_lib 'config/command'
|
28
|
+
PhusionPassenger.require_passenger_lib 'config/utils'
|
29
|
+
PhusionPassenger.require_passenger_lib 'utils/json'
|
30
|
+
|
31
|
+
module PhusionPassenger
|
32
|
+
module Config
|
33
|
+
|
34
|
+
class ListInstancesCommand < Command
|
35
|
+
include PhusionPassenger::Config::Utils
|
36
|
+
|
37
|
+
def run
|
38
|
+
parse_options
|
39
|
+
server_instances = AdminTools::ServerInstance.list
|
40
|
+
if @options[:json]
|
41
|
+
print_json(server_instances)
|
42
|
+
elsif server_instances.empty?
|
43
|
+
print_no_instances_running
|
44
|
+
else
|
45
|
+
print_instances(server_instances)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def self.create_option_parser(options)
|
51
|
+
OptionParser.new do |opts|
|
52
|
+
nl = "\n" + ' ' * 37
|
53
|
+
opts.banner = "Usage: passenger-config list-instances [OPTIONS] <PID>\n"
|
54
|
+
opts.separator ""
|
55
|
+
opts.separator " List all running #{PROGRAM_NAME} instances."
|
56
|
+
opts.separator ""
|
57
|
+
|
58
|
+
opts.on("--json", "Print output in JSON format") do
|
59
|
+
options[:json] = true
|
60
|
+
end
|
61
|
+
opts.on("-q", "--quiet", "Don't print anything if there are no #{PROGRAM_NAME} instances running") do
|
62
|
+
options[:quiet] = true
|
63
|
+
end
|
64
|
+
opts.on("-h", "--help", "Show this help") do
|
65
|
+
options[:help] = true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def help
|
71
|
+
puts @parser
|
72
|
+
end
|
73
|
+
|
74
|
+
def parse_options
|
75
|
+
super
|
76
|
+
if !@argv.empty?
|
77
|
+
help
|
78
|
+
abort
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def print_no_instances_running
|
83
|
+
if !@options[:quiet]
|
84
|
+
puts "There are no #{PROGRAM_NAME} instances running."
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def print_json(server_instances)
|
89
|
+
result = []
|
90
|
+
server_instances.each do |instance|
|
91
|
+
begin
|
92
|
+
description = instance.web_server_description
|
93
|
+
rescue Errno::EACCES, Errno::ENOENT
|
94
|
+
description = nil
|
95
|
+
end
|
96
|
+
result << {
|
97
|
+
:pid => instance.pid,
|
98
|
+
:description => description
|
99
|
+
}
|
100
|
+
end
|
101
|
+
puts PhusionPassenger::Utils::JSON.generate(result)
|
102
|
+
end
|
103
|
+
|
104
|
+
def print_instances(server_instances)
|
105
|
+
printf "%-8s %s\n", "PID", "Description"
|
106
|
+
server_instances.each do |instance|
|
107
|
+
begin
|
108
|
+
description = instance.web_server_description
|
109
|
+
rescue Errno::EACCES, Errno::ENOENT
|
110
|
+
description = nil
|
111
|
+
end
|
112
|
+
printf "%-8s %s\n", instance.pid, description
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end # module Config
|
118
|
+
end # module PhusionPassenger
|
@@ -30,8 +30,10 @@ module Config
|
|
30
30
|
KNOWN_COMMANDS = [
|
31
31
|
["detach-process", "DetachProcessCommand"],
|
32
32
|
["restart-app", "RestartAppCommand"],
|
33
|
+
["list-instances", "ListInstancesCommand"],
|
33
34
|
["build-native-support", "BuildNativeSupportCommand"],
|
34
35
|
["validate-install", "ValidateInstallCommand"],
|
36
|
+
["system-metrics", "SystemMetricsCommand"],
|
35
37
|
["about", "AboutCommand"]
|
36
38
|
]
|
37
39
|
|
@@ -56,6 +58,8 @@ module Config
|
|
56
58
|
command_class, new_argv = lookup_command_class_by_argv(argv)
|
57
59
|
if help_requested?(argv)
|
58
60
|
help
|
61
|
+
elsif help_all_requested?(argv)
|
62
|
+
help(true)
|
59
63
|
elsif command_class
|
60
64
|
command = command_class.new(new_argv)
|
61
65
|
command.run
|
@@ -65,7 +69,7 @@ module Config
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
def self.help
|
72
|
+
def self.help(all = false)
|
69
73
|
puts "Usage: passenger-config <COMMAND> [options]"
|
70
74
|
puts "Tool for controlling or configurating a #{PROGRAM_NAME} instance or installation."
|
71
75
|
puts
|
@@ -74,14 +78,24 @@ module Config
|
|
74
78
|
puts " restart-app Restart an application"
|
75
79
|
puts
|
76
80
|
puts "Informational commands:"
|
77
|
-
puts " validate-install Validate this
|
78
|
-
puts "
|
81
|
+
puts " validate-install Validate this #{PROGRAM_NAME} installation"
|
82
|
+
puts " list-instances List running #{PROGRAM_NAME} instances"
|
83
|
+
puts " about Show information about #{PROGRAM_NAME}"
|
79
84
|
puts
|
80
85
|
puts "Miscellaneous commands:"
|
81
86
|
puts " build-native-support Ensure that the native_support library for the current"
|
82
87
|
puts " Ruby interpeter is built"
|
88
|
+
if all
|
89
|
+
puts " system-metrics Display system metrics"
|
90
|
+
end
|
83
91
|
puts
|
84
|
-
puts "
|
92
|
+
puts "Run 'passenger-config <COMMAND> --help' for more information about each"
|
93
|
+
puts "command."
|
94
|
+
if !all
|
95
|
+
puts
|
96
|
+
puts "There are also some advanced commands not shown in this help message. Run"
|
97
|
+
puts "'passenger-config --help-all' to learn more about them."
|
98
|
+
end
|
85
99
|
end
|
86
100
|
|
87
101
|
private
|
@@ -89,6 +103,10 @@ private
|
|
89
103
|
return argv.size == 1 && (argv[0] == "--help" || argv[0] == "-h" || argv[0] == "help")
|
90
104
|
end
|
91
105
|
|
106
|
+
def self.help_all_requested?(argv)
|
107
|
+
return argv.size == 1 && (argv[0] == "--help-all" || argv[0] == "help-all")
|
108
|
+
end
|
109
|
+
|
92
110
|
def self.lookup_command_class_by_argv(argv)
|
93
111
|
return nil if argv.empty?
|
94
112
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Phusion Passenger - https://www.phusionpassenger.com/
|
2
|
+
# Copyright (c) 2014 Phusion
|
3
|
+
#
|
4
|
+
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
|
24
|
+
PhusionPassenger.require_passenger_lib 'config/command'
|
25
|
+
|
26
|
+
module PhusionPassenger
|
27
|
+
module Config
|
28
|
+
|
29
|
+
class SystemMetricsCommand < Command
|
30
|
+
def run
|
31
|
+
exec("#{PhusionPassenger.agents_dir}/PassengerHelperAgent",
|
32
|
+
"system-metrics", *@argv)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end # module Config
|
37
|
+
end # module PhusionPassenger
|
@@ -50,7 +50,7 @@ module Utils
|
|
50
50
|
else
|
51
51
|
server_instances = AdminTools::ServerInstance.list
|
52
52
|
if server_instances.empty?
|
53
|
-
abort "*** ERROR:
|
53
|
+
abort "*** ERROR: #{PROGRAM_NAME} doesn't seem to be running."
|
54
54
|
elsif server_instances.size == 1
|
55
55
|
@server_instance = server_instances.first
|
56
56
|
else
|
@@ -40,7 +40,7 @@ module LoaderSharedHelpers
|
|
40
40
|
dump_ruby_environment
|
41
41
|
check_rvm_using_wrapper_script(options)
|
42
42
|
return sanitize_spawn_options(options)
|
43
|
-
|
43
|
+
end
|
44
44
|
|
45
45
|
def check_rvm_using_wrapper_script(options)
|
46
46
|
ruby = options["ruby"]
|
@@ -92,7 +92,7 @@ module LoaderSharedHelpers
|
|
92
92
|
def dump_all_information
|
93
93
|
dump_ruby_environment
|
94
94
|
dump_envvars
|
95
|
-
|
95
|
+
dump_system_metrics
|
96
96
|
end
|
97
97
|
|
98
98
|
def dump_ruby_environment
|
@@ -155,10 +155,13 @@ module LoaderSharedHelpers
|
|
155
155
|
# Don't care.
|
156
156
|
end
|
157
157
|
|
158
|
-
def
|
158
|
+
def dump_system_metrics
|
159
159
|
if dir = ENV['PASSENGER_DEBUG_DIR']
|
160
|
-
|
161
|
-
|
160
|
+
contents = `"#{PhusionPassenger.bin_dir}/passenger-config" system-metrics`
|
161
|
+
if $? && $?.exitstatus == 0
|
162
|
+
File.open("#{dir}/system_metrics", "wb") do |f|
|
163
|
+
f.write(contents)
|
164
|
+
end
|
162
165
|
end
|
163
166
|
end
|
164
167
|
rescue SystemCallError
|
@@ -268,7 +268,7 @@ public
|
|
268
268
|
"-c '#{filename}' -o '#{filename}.o'",
|
269
269
|
flags)
|
270
270
|
result = run_compiler(description, command, filename, source, true)
|
271
|
-
return result[:result] && result[:output] !~ /unknown warning option/i
|
271
|
+
return result && result[:result] && result[:output] !~ /unknown warning option/i
|
272
272
|
end
|
273
273
|
end
|
274
274
|
|
@@ -48,9 +48,9 @@
|
|
48
48
|
<dd><pre>{{ENVVARS|default=Unknown}}</pre></dd>
|
49
49
|
<dt>Ulimits</dt>
|
50
50
|
<dd><pre>{{ULIMIT|default=Unknown}}</pre></dd>
|
51
|
-
{{if
|
52
|
-
<dt>System
|
53
|
-
<dd><pre>{{
|
51
|
+
{{if SYSTEM_METRICS}}
|
52
|
+
<dt>System metrics</dt>
|
53
|
+
<dd><pre>{{SYSTEM_METRICS|default=Unknown}}</pre></dd>
|
54
54
|
{{/if}}
|
55
55
|
{{if RUBY_INFO}}
|
56
56
|
<dt>General Ruby interpreter information</dt>
|
@@ -10,7 +10,6 @@ namespace tut {
|
|
10
10
|
struct ApplicationPool2_DirectSpawnerTest {
|
11
11
|
ServerInstanceDirPtr serverInstanceDir;
|
12
12
|
ServerInstanceDir::GenerationPtr generation;
|
13
|
-
BackgroundEventLoop bg;
|
14
13
|
ProcessPtr process;
|
15
14
|
PipeWatcher::DataCallback gatherOutput;
|
16
15
|
string gatheredOutput;
|
@@ -18,7 +17,6 @@ namespace tut {
|
|
18
17
|
|
19
18
|
ApplicationPool2_DirectSpawnerTest() {
|
20
19
|
createServerInstanceDirAndGeneration(serverInstanceDir, generation);
|
21
|
-
bg.start();
|
22
20
|
PipeWatcher::onData = PipeWatcher::DataCallback();
|
23
21
|
gatherOutput = boost::bind(&ApplicationPool2_DirectSpawnerTest::_gatherOutput, this, _1, _2);
|
24
22
|
setLogLevel(LVL_ERROR); // TODO: change to LVL_WARN
|
@@ -33,7 +31,7 @@ namespace tut {
|
|
33
31
|
}
|
34
32
|
|
35
33
|
boost::shared_ptr<DirectSpawner> createSpawner(const Options &options) {
|
36
|
-
return boost::make_shared<DirectSpawner>(
|
34
|
+
return boost::make_shared<DirectSpawner>(
|
37
35
|
*resourceLocator, generation);
|
38
36
|
}
|
39
37
|
|
@@ -64,7 +62,7 @@ namespace tut {
|
|
64
62
|
options.startupFile = ".";
|
65
63
|
options.startTimeout = 300;
|
66
64
|
|
67
|
-
DirectSpawner spawner(
|
65
|
+
DirectSpawner spawner(*resourceLocator, generation);
|
68
66
|
|
69
67
|
try {
|
70
68
|
process = spawner.spawn(options);
|
@@ -86,7 +84,7 @@ namespace tut {
|
|
86
84
|
options.startCommand = "perl\t" "-e\t" "print STDERR \"hello world\\n\"";
|
87
85
|
options.startupFile = ".";
|
88
86
|
|
89
|
-
DirectSpawner spawner(
|
87
|
+
DirectSpawner spawner(*resourceLocator, generation);
|
90
88
|
|
91
89
|
try {
|
92
90
|
process = spawner.spawn(options);
|
@@ -17,7 +17,6 @@ namespace tut {
|
|
17
17
|
struct ApplicationPool2_PoolTest {
|
18
18
|
ServerInstanceDirPtr serverInstanceDir;
|
19
19
|
ServerInstanceDir::GenerationPtr generation;
|
20
|
-
BackgroundEventLoop bg;
|
21
20
|
SpawnerConfigPtr spawnerConfig;
|
22
21
|
SpawnerFactoryPtr spawnerFactory;
|
23
22
|
PoolPtr pool;
|
@@ -35,11 +34,10 @@ namespace tut {
|
|
35
34
|
createServerInstanceDirAndGeneration(serverInstanceDir, generation);
|
36
35
|
retainSessions = false;
|
37
36
|
spawnerConfig = boost::make_shared<SpawnerConfig>();
|
38
|
-
spawnerFactory = boost::make_shared<SpawnerFactory>(
|
37
|
+
spawnerFactory = boost::make_shared<SpawnerFactory>(*resourceLocator,
|
39
38
|
generation, spawnerConfig);
|
40
39
|
pool = boost::make_shared<Pool>(spawnerFactory);
|
41
40
|
pool->initialize();
|
42
|
-
bg.start();
|
43
41
|
callback = boost::bind(&ApplicationPool2_PoolTest::_callback, this, _1, _2);
|
44
42
|
setLogLevel(LVL_ERROR); // TODO: change to LVL_WARN
|
45
43
|
setPrintAppOutputAsDebuggingMessages(true);
|
@@ -48,7 +48,7 @@ namespace tut {
|
|
48
48
|
|
49
49
|
TEST_METHOD(1) {
|
50
50
|
// Test initial state.
|
51
|
-
ProcessPtr process = boost::make_shared<Process>(
|
51
|
+
ProcessPtr process = boost::make_shared<Process>(
|
52
52
|
123, "", "", adminSocket[0],
|
53
53
|
errorPipe[0], sockets, 0, 0);
|
54
54
|
process->dummy = true;
|
@@ -59,7 +59,7 @@ namespace tut {
|
|
59
59
|
|
60
60
|
TEST_METHOD(2) {
|
61
61
|
// Test opening and closing sessions.
|
62
|
-
ProcessPtr process = boost::make_shared<Process>(
|
62
|
+
ProcessPtr process = boost::make_shared<Process>(
|
63
63
|
123, "", "", adminSocket[0],
|
64
64
|
errorPipe[0], sockets, 0, 0);
|
65
65
|
process->dummy = true;
|
@@ -76,7 +76,7 @@ namespace tut {
|
|
76
76
|
TEST_METHOD(3) {
|
77
77
|
// newSession() checks out the socket with the smallest busyness number
|
78
78
|
// and sessionClosed() restores the session busyness statistics.
|
79
|
-
ProcessPtr process = boost::make_shared<Process>(
|
79
|
+
ProcessPtr process = boost::make_shared<Process>(
|
80
80
|
123, "", "", adminSocket[0],
|
81
81
|
errorPipe[0], sockets, 0, 0);
|
82
82
|
process->dummy = true;
|
@@ -121,7 +121,7 @@ namespace tut {
|
|
121
121
|
|
122
122
|
TEST_METHOD(4) {
|
123
123
|
// If all sockets are at their full capacity then newSession() will fail.
|
124
|
-
ProcessPtr process = boost::make_shared<Process>(
|
124
|
+
ProcessPtr process = boost::make_shared<Process>(
|
125
125
|
123, "", "", adminSocket[0],
|
126
126
|
errorPipe[0], sockets, 0, 0);
|
127
127
|
process->dummy = true;
|
@@ -15,7 +15,6 @@ namespace tut {
|
|
15
15
|
struct ApplicationPool2_SmartSpawnerTest {
|
16
16
|
ServerInstanceDirPtr serverInstanceDir;
|
17
17
|
ServerInstanceDir::GenerationPtr generation;
|
18
|
-
BackgroundEventLoop bg;
|
19
18
|
ProcessPtr process;
|
20
19
|
PipeWatcher::DataCallback gatherOutput;
|
21
20
|
string gatheredOutput;
|
@@ -23,7 +22,6 @@ namespace tut {
|
|
23
22
|
|
24
23
|
ApplicationPool2_SmartSpawnerTest() {
|
25
24
|
createServerInstanceDirAndGeneration(serverInstanceDir, generation);
|
26
|
-
bg.start();
|
27
25
|
PipeWatcher::onData = PipeWatcher::DataCallback();
|
28
26
|
gatherOutput = boost::bind(&ApplicationPool2_SmartSpawnerTest::_gatherOutput, this, _1, _2);
|
29
27
|
setLogLevel(LVL_ERROR); // TODO: should be LVL_WARN
|
@@ -48,7 +46,7 @@ namespace tut {
|
|
48
46
|
command.push_back("exit-immediately");
|
49
47
|
}
|
50
48
|
|
51
|
-
return boost::make_shared<SmartSpawner>(
|
49
|
+
return boost::make_shared<SmartSpawner>(
|
52
50
|
*resourceLocator,
|
53
51
|
generation,
|
54
52
|
command,
|
@@ -125,7 +123,7 @@ namespace tut {
|
|
125
123
|
preloaderCommand.push_back("bash");
|
126
124
|
preloaderCommand.push_back("-c");
|
127
125
|
preloaderCommand.push_back("echo hello world >&2; sleep 60");
|
128
|
-
SmartSpawner spawner(
|
126
|
+
SmartSpawner spawner(
|
129
127
|
*resourceLocator,
|
130
128
|
generation,
|
131
129
|
preloaderCommand,
|
@@ -155,7 +153,7 @@ namespace tut {
|
|
155
153
|
preloaderCommand.push_back("bash");
|
156
154
|
preloaderCommand.push_back("-c");
|
157
155
|
preloaderCommand.push_back("echo hello world >&2");
|
158
|
-
SmartSpawner spawner(
|
156
|
+
SmartSpawner spawner(
|
159
157
|
*resourceLocator,
|
160
158
|
generation,
|
161
159
|
preloaderCommand,
|
@@ -185,7 +183,7 @@ namespace tut {
|
|
185
183
|
preloaderCommand.push_back("bash");
|
186
184
|
preloaderCommand.push_back("-c");
|
187
185
|
preloaderCommand.push_back("echo hello world >&2");
|
188
|
-
SmartSpawner spawner(
|
186
|
+
SmartSpawner spawner(
|
189
187
|
*resourceLocator,
|
190
188
|
generation,
|
191
189
|
preloaderCommand,
|
@@ -212,7 +210,7 @@ namespace tut {
|
|
212
210
|
vector<string> preloaderCommand;
|
213
211
|
preloaderCommand.push_back("ruby");
|
214
212
|
preloaderCommand.push_back(resourceLocator->getHelperScriptsDir() + "/rack-preloader.rb");
|
215
|
-
SmartSpawner spawner(
|
213
|
+
SmartSpawner spawner(
|
216
214
|
*resourceLocator,
|
217
215
|
generation,
|
218
216
|
preloaderCommand,
|