Skip to content

Commit df964cd

Browse files
committed
Exec commands
A recent change to the execution commands had an unintended side- effect. By placing the memory calculator command in a separate process, connected via an &&, the process tree within a container changed. This change was mostly harmless except for the fact that only the root process (which was no longer the container process) is signaled for termination. This change updates all of the container release commands to prepend themselves with the bash command exec. This should cause the process tree to match its earlier behavior of making the container the root process.
1 parent eb6e892 commit df964cd

16 files changed

Lines changed: 36 additions & 29 deletions

lib/java_buildpack/container/dist_zip_like.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def release
4444
@droplet.environment_variables.as_env_vars,
4545
@droplet.java_home.as_env_var,
4646
@droplet.java_opts.as_env_var,
47+
'exec',
4748
qualify_path(start_script(root), @droplet.root)
4849
].flatten.compact.join(' ')
4950
end

lib/java_buildpack/container/groovy.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def release
5656
@droplet.environment_variables.as_env_vars,
5757
@droplet.java_home.as_env_var,
5858
@droplet.java_opts.as_env_var,
59+
'exec',
5960
qualify_path(@droplet.sandbox + 'bin/groovy', @droplet.root),
6061
@droplet.additional_libraries.as_classpath,
6162
relative_main_groovy,

lib/java_buildpack/container/java_main.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def release_text
6161
'&&',
6262
@droplet.environment_variables.as_env_vars,
6363
'eval',
64+
'exec',
6465
"#{qualify_path @droplet.java_home.root, @droplet.root}/bin/java",
6566
'$JAVA_OPTS',
6667
@droplet.additional_libraries.as_classpath,

lib/java_buildpack/container/spring_boot_cli.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def release
5151
@droplet.environment_variables.as_env_vars,
5252
@droplet.java_home.as_env_var,
5353
@droplet.java_opts.as_env_var,
54+
'exec',
5455
qualify_path(@droplet.sandbox + 'bin/spring', @droplet.root),
5556
'run',
5657
@droplet.additional_libraries.as_classpath,

lib/java_buildpack/container/tomcat.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def command
4141
@droplet.environment_variables.as_env_vars,
4242
@droplet.java_home.as_env_var,
4343
@droplet.java_opts.as_env_var,
44+
'exec',
4445
"$PWD/#{(@droplet.sandbox + 'bin/catalina.sh').relative_path_from(@droplet.root)}",
4546
'run'
4647
].flatten.compact.join(' ')

lib/java_buildpack/util/play/base.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def release
5656
[
5757
@droplet.environment_variables.as_env_vars,
5858
@droplet.java_home.as_env_var,
59+
'exec',
5960
qualify_path(start_script, @droplet.root),
6061
java_opts
6162
].flatten.compact.join(' ')

spec/java_buildpack/container/dist_zip_like_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
app_fixture: 'container_dist_zip' do
5353

5454
expect(component.release).to eq("test-var-2 test-var-1 #{java_home.as_env_var} " \
55-
'JAVA_OPTS="test-opt-2 test-opt-1" $PWD/bin/application')
55+
'JAVA_OPTS="test-opt-2 test-opt-1" exec $PWD/bin/application')
5656
end
5757

5858
end

spec/java_buildpack/container/groovy_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
it 'returns command',
9292
app_fixture: 'container_groovy_main_method' do
9393

94-
expect(component.release).to eq("#{env_vars_str} #{java_home.as_env_var} JAVA_OPTS=#{java_opts_str} " \
94+
expect(component.release).to eq("#{env_vars_str} #{java_home.as_env_var} JAVA_OPTS=#{java_opts_str} exec " \
9595
'$PWD/.java-buildpack/groovy/bin/groovy -cp $PWD/.additional_libs/test-jar-1.jar:' \
9696
'$PWD/.additional_libs/test-jar-2.jar Application.groovy Alpha.groovy ' \
9797
'directory/Beta.groovy invalid.groovy')
@@ -100,7 +100,7 @@
100100
it 'returns command with included JARs',
101101
app_fixture: 'container_groovy_with_jars' do
102102

103-
expect(component.release).to eq("#{env_vars_str} #{java_home.as_env_var} JAVA_OPTS=#{java_opts_str} " \
103+
expect(component.release).to eq("#{env_vars_str} #{java_home.as_env_var} JAVA_OPTS=#{java_opts_str} exec " \
104104
'$PWD/.java-buildpack/groovy/bin/groovy -cp $PWD/.additional_libs/test-jar-1.jar:' \
105105
'$PWD/.additional_libs/test-jar-2.jar:$PWD/Alpha.jar:$PWD/directory/Beta.jar ' \
106106
'Application.groovy invalid.groovy')

spec/java_buildpack/container/java_main_spec.rb

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
it 'returns command' do
6161

6262
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 ' \
63-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
63+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
6464
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/' \
6565
'.additional_libs/test-jar-2.jar test-java-main-class')
6666
end
@@ -70,7 +70,7 @@
7070
app_fixture: 'container_main' do
7171

7272
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 ' \
73-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
73+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
7474
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/' \
7575
'.additional_libs/test-jar-2.jar:$PWD/alpha.jar:$PWD/bravo.jar:$PWD/' \
7676
'charlie.jar test-main-class')
@@ -82,7 +82,7 @@
8282
it 'returns command line arguments when they are specified' do
8383

8484
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 ' \
85-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
85+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
8686
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
8787
'test-jar-2.jar test-java-main-class some arguments')
8888
end
@@ -92,27 +92,27 @@
9292
app_fixture: 'container_main_spring_boot_jar_launcher' do
9393

9494
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
95-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS -cp $PWD" \
96-
'/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/test-jar-2.jar' \
97-
' org.springframework.boot.loader.JarLauncher')
95+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
96+
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
97+
'test-jar-2.jar org.springframework.boot.loader.JarLauncher')
9898
end
9999

100100
it 'releases Spring boot applications with a WarLauncher in the MANIFEST.MF by specifying a port',
101101
app_fixture: 'container_main_spring_boot_war_launcher' do
102102

103103
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
104-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS -cp $PWD" \
105-
'/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/test-jar-2.jar' \
106-
' org.springframework.boot.loader.WarLauncher')
104+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
105+
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
106+
'test-jar-2.jar org.springframework.boot.loader.WarLauncher')
107107
end
108108

109109
it 'releases Spring boot applications with a PropertiesLauncher in the MANIFEST.MF by specifying a port',
110110
app_fixture: 'container_main_spring_boot_properties_launcher' do
111111

112112
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
113-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS -cp $PWD" \
114-
'/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/test-jar-2.jar' \
115-
' org.springframework.boot.loader.PropertiesLauncher')
113+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
114+
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
115+
'test-jar-2.jar org.springframework.boot.loader.PropertiesLauncher')
116116
end
117117

118118
context do
@@ -121,8 +121,8 @@
121121
it 'releases Spring boot applications with a JarLauncher in the configuration by specifying a port' do
122122

123123
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
124-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS -cp " \
125-
'$PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
124+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
125+
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
126126
'test-jar-2.jar org.springframework.boot.loader.JarLauncher')
127127
end
128128
end
@@ -133,8 +133,8 @@
133133
it 'releases Spring boot applications with a WarLauncher in the configuration by specifying a port' do
134134

135135
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
136-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS -cp " \
137-
'$PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
136+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
137+
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs/' \
138138
'test-jar-2.jar org.springframework.boot.loader.WarLauncher')
139139
end
140140
end
@@ -145,7 +145,7 @@
145145
it 'releases Spring boot applications with a PropertiesLauncher in the configuration by specifying a port' do
146146

147147
expect(component.release).to eq('JAVA_OPTS="test-opt-2 test-opt-1" && test-var-2 test-var-1 SERVER_PORT=$PORT ' \
148-
"eval #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
148+
"eval exec #{qualify_path java_home.root, droplet.root}/bin/java $JAVA_OPTS " \
149149
'-cp $PWD/.:$PWD/.additional_libs/test-jar-1.jar:$PWD/.additional_libs' \
150150
'/test-jar-2.jar org.springframework.boot.loader.' \
151151
'PropertiesLauncher')

spec/java_buildpack/container/ratpack_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
app_fixture: 'container_ratpack_staged' do
7171

7272
expect(component.release).to eq("test-var-2 test-var-1 #{java_home.as_env_var} JAVA_OPTS=\"test-opt-2 " \
73-
'test-opt-1" $PWD/bin/application')
73+
'test-opt-1" exec $PWD/bin/application')
7474
end
7575

7676
end

0 commit comments

Comments
 (0)