Skip to content

Commit 7cb40d6

Browse files
authored
Add support for JAVA_OPTS (#3678)
1 parent 7b5e8e0 commit 7cb40d6

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

src/WebJobs.Script/Rpc/Configuration/WorkerConfigFactory.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,14 @@ internal void AddProvider(string workerDir)
134134
descriptionProfiles = GetWorkerDescriptionProfiles(workerConfig);
135135
if (ScriptSettingsManager.Instance.IsAppServiceEnvironment)
136136
{
137-
//Overwrite default Description with AppServiceEnv profile
137+
// Overwrite default Description with AppServiceEnv profile
138+
// TODO:pgopa delete after ANT78
138139
workerDescription = GetWorkerDescriptionFromProfiles(LanguageWorkerConstants.WorkerDescriptionAppServiceEnvProfileName, descriptionProfiles, workerDescription);
139140
}
141+
140142
GetDefaultExecutablePathFromAppSettings(workerDescription, languageSection);
141143
AddArgumentsFromAppSettings(workerDescription, languageSection);
144+
142145
if (File.Exists(workerDescription.GetWorkerPath()))
143146
{
144147
_logger.LogDebug($"Will load worker provider for language: {workerDescription.Language}");
@@ -195,8 +198,18 @@ private static void GetDefaultExecutablePathFromAppSettings(WorkerDescription wo
195198
workerDescription.DefaultExecutablePath = defaultExecutablePath.Value != null ? defaultExecutablePath.Value : workerDescription.DefaultExecutablePath;
196199
}
197200

198-
private static void AddArgumentsFromAppSettings(WorkerDescription workerDescription, IConfigurationSection languageSection)
201+
internal static void AddArgumentsFromAppSettings(WorkerDescription workerDescription, IConfigurationSection languageSection)
199202
{
203+
if (workerDescription.Language.Equals(LanguageWorkerConstants.JavaLanguageWorkerName))
204+
{
205+
// For Java either provide arguments via JAVA_OPTS or languageWorkers:java:arguments. Both cannot be supported
206+
string javaOpts = ScriptSettingsManager.Instance.GetSetting("JAVA_OPTS");
207+
if (!string.IsNullOrEmpty(javaOpts))
208+
{
209+
workerDescription.Arguments.Add(javaOpts);
210+
return;
211+
}
212+
}
200213
var argumentsSection = languageSection.GetSection($"{LanguageWorkerConstants.WorkerDescriptionArguments}");
201214
if (argumentsSection.Value != null)
202215
{

test/WebJobs.Script.Tests/Rpc/WorkerConfigFactoryTests.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7+
using Microsoft.Azure.WebJobs.Script.Abstractions;
78
using Microsoft.Azure.WebJobs.Script.Config;
89
using Microsoft.Azure.WebJobs.Script.Rpc;
910
using Microsoft.Extensions.Configuration;
@@ -146,5 +147,41 @@ public void JavaPath_JavaHome_NotSet()
146147
Assert.Equal("java", javaPath);
147148
}
148149
}
150+
151+
[Theory]
152+
[InlineData("-Djava.net.preferIPv4Stack = true", "-Djava.net.preferIPv4Stack = true")]
153+
[InlineData("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "")]
154+
public void AddArgumentsFromAppSettings_JavaOpts(string expectedArgument, string javaOpts)
155+
{
156+
WorkerDescription workerDescription = new WorkerDescription()
157+
{
158+
Arguments = new List<string>() { "-jar" },
159+
DefaultExecutablePath = "java",
160+
DefaultWorkerPath = "javaworker.jar",
161+
Extensions = new List<string>() { ".jar" },
162+
Language = "java"
163+
};
164+
var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
165+
.AddInMemoryCollection(new Dictionary<string, string>
166+
{
167+
["languageWorker"] = "test",
168+
["languageWorkers:java:arguments"] = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
169+
});
170+
var config = configBuilder.Build();
171+
var scriptSettingsManager = new ScriptSettingsManager(config);
172+
var testLogger = new TestLogger("test");
173+
var configFactory = new WorkerConfigFactory(config, testLogger);
174+
var languageSection = config.GetSection("languageWorkers:java");
175+
var testEnvVariables = new Dictionary<string, string>
176+
{
177+
{ "JAVA_OPTS", javaOpts }
178+
};
179+
using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
180+
{
181+
WorkerConfigFactory.AddArgumentsFromAppSettings(workerDescription, languageSection);
182+
Assert.Equal(2, workerDescription.Arguments.Count);
183+
Assert.Equal(expectedArgument, workerDescription.Arguments[1]);
184+
}
185+
}
149186
}
150187
}

0 commit comments

Comments
 (0)