Skip to content

Commit 4c83a23

Browse files
author
Manikanta Nallagatla
committed
Address comments
1 parent a621e27 commit 4c83a23

File tree

9 files changed

+66
-81
lines changed

9 files changed

+66
-81
lines changed

src/WebJobs.Script.WebHost/ContainerManagement/LinuxContainerInitializationHostedService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ private async Task ApplyStartContextIfPresent(CancellationToken cancellationToke
4848
{
4949
_logger.LogDebug("Applying host context");
5050

51-
var encryptedAssignmentContext = JsonConvert.DeserializeObject<EncryptedHostAssignmentContext>(startContext);
52-
var assignmentContext = _startupContextProvider.SetContext(encryptedAssignmentContext);
51+
var hostAssignmentRequest = JsonConvert.DeserializeObject<HostAssignmentRequest>(startContext);
52+
var assignmentContext = _startupContextProvider.SetContext(hostAssignmentRequest);
5353
await SpecializeMSISideCar(assignmentContext);
5454

5555
try

src/WebJobs.Script.WebHost/Controllers/InstanceController.cs

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,49 +35,29 @@ public InstanceController(IEnvironment environment, IInstanceManager instanceMan
3535
[HttpPost]
3636
[Route("admin/instance/assign")]
3737
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
38-
public async Task<IActionResult> Assign([FromBody] EncryptedHostAssignmentContext encryptedAssignmentContext)
38+
public async Task<IActionResult> Assign([FromBody] HostAssignmentRequest hostAssignmentContext)
3939
{
40-
_logger.LogDebug($"Starting container assignment for host : {Request?.Host}. ContextLength is: {encryptedAssignmentContext.EncryptedContext?.Length}");
41-
42-
var assignmentContext = _startupContextProvider.SetContext(encryptedAssignmentContext);
43-
44-
return await AssignInternal(assignmentContext);
45-
}
46-
47-
[HttpPost]
48-
[Route("admin/instance/assign2")]
49-
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
50-
public async Task<IActionResult> Assign2([FromBody] FunctionsWorkerContainerAssignmentContext workerAssignmentContext)
51-
{
52-
if (workerAssignmentContext?.AssignmentContext == null || workerAssignmentContext.AssignmentContext == null)
40+
if (string.IsNullOrEmpty(hostAssignmentContext.EncryptedContext) &&
41+
hostAssignmentContext.AssignmentContext == null)
5342
{
54-
return BadRequest("Assignment context is missing.");
43+
return BadRequest("Atleast one of Assignment context and EncryptedContext needs to be set.");
44+
}
45+
if (!string.IsNullOrEmpty(hostAssignmentContext.EncryptedContext) &&
46+
!(hostAssignmentContext.AssignmentContext == null))
47+
{
48+
return BadRequest("Only one of Assignment context and EncryptedContext needs to be set.");
49+
}
50+
if (!string.IsNullOrEmpty(hostAssignmentContext.EncryptedContext))
51+
{
52+
_logger.LogDebug($"Starting container assignment for host : {Request?.Host}. ContextLength is {hostAssignmentContext.EncryptedContext.Length}");
53+
}
54+
else
55+
{
56+
_logger.LogDebug($"Starting container assignment for host : {Request?.Host}. Using unencrypted assignment context");
5557
}
5658

57-
_logger.LogDebug($"Starting container assignment for host : {Request?.Host}");
58-
var assignmentContext = _startupContextProvider.SetContext(workerAssignmentContext.AssignmentContext);
59-
60-
return await AssignInternal(assignmentContext);
61-
}
62-
63-
[HttpGet]
64-
[Route("admin/instance/info")]
65-
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
66-
public IActionResult GetInstanceInfo()
67-
{
68-
return Ok(_instanceManager.GetInstanceInfo());
69-
}
70-
71-
[HttpGet]
72-
[Route("admin/instance/http-health")]
73-
public IActionResult GetHttpHealthStatus()
74-
{
75-
// Reaching here implies that http health of the container is ok.
76-
return Ok();
77-
}
59+
var assignmentContext = _startupContextProvider.SetContext(hostAssignmentContext);
7860

79-
private async Task<IActionResult> AssignInternal(HostAssignmentContext assignmentContext)
80-
{
8161
// before starting the assignment we want to perform as much
8262
// up front validation on the context as possible
8363
string error = await _instanceManager.ValidateContext(assignmentContext);
@@ -100,5 +80,21 @@ private async Task<IActionResult> AssignInternal(HostAssignmentContext assignmen
10080
? Accepted()
10181
: StatusCode(StatusCodes.Status409Conflict, "Instance already assigned");
10282
}
83+
84+
[HttpGet]
85+
[Route("admin/instance/info")]
86+
[Authorize(Policy = PolicyNames.AdminAuthLevel)]
87+
public IActionResult GetInstanceInfo()
88+
{
89+
return Ok(_instanceManager.GetInstanceInfo());
90+
}
91+
92+
[HttpGet]
93+
[Route("admin/instance/http-health")]
94+
public IActionResult GetHttpHealthStatus()
95+
{
96+
// Reaching here implies that http health of the container is ok.
97+
return Ok();
98+
}
10399
}
104100
}

src/WebJobs.Script.WebHost/Models/FunctionsWorkerContainerAssignmentContext.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/WebJobs.Script.WebHost/Models/EncryptedHostAssignmentContext.cs renamed to src/WebJobs.Script.WebHost/Models/HostAssignmentRequest.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55

66
namespace Microsoft.Azure.WebJobs.Script.WebHost.Models
77
{
8-
public class EncryptedHostAssignmentContext
8+
public class HostAssignmentRequest
99
{
1010
[JsonProperty("encryptedContext")]
1111
public string EncryptedContext { get; set; }
12+
13+
[JsonProperty("assignmentContext")]
14+
public HostAssignmentContext AssignmentContext { get; set; }
1215
}
1316
}

src/WebJobs.Script.WebHost/StartupContextProvider.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,18 @@ private StartupContext GetStartupContextOrNull()
135135
/// Decrypt and deserialize the specified context, and apply values from it to the
136136
/// startup cache context.
137137
/// </summary>
138-
/// <param name="encryptedContext">The encrypted assignment context.</param>
139-
/// <returns>The decrypted assignment context</returns>
140-
public virtual HostAssignmentContext SetContext(EncryptedHostAssignmentContext encryptedContext)
138+
/// <param name="hostAssignmentRequest">The Host assignment request.</param>
139+
/// <returns>The decrypted assignment context.</returns>
140+
public virtual HostAssignmentContext SetContext(HostAssignmentRequest hostAssignmentRequest)
141141
{
142-
string decryptedContext = EncryptionHelper.Decrypt(encryptedContext.EncryptedContext, environment: _environment);
143-
var hostAssignmentContext = JsonConvert.DeserializeObject<HostAssignmentContext>(decryptedContext);
142+
var hostAssignmentContext = hostAssignmentRequest.AssignmentContext;
144143

145-
return SetContext(hostAssignmentContext);
146-
}
144+
if (!string.IsNullOrEmpty(hostAssignmentRequest.EncryptedContext))
145+
{
146+
string decryptedContext = EncryptionHelper.Decrypt(hostAssignmentRequest.EncryptedContext, environment: _environment);
147+
hostAssignmentContext = JsonConvert.DeserializeObject<HostAssignmentContext>(decryptedContext);
148+
}
147149

148-
public virtual HostAssignmentContext SetContext(HostAssignmentContext hostAssignmentContext)
149-
{
150150
// Don't update StartupContext for warmup requests
151151
if (!hostAssignmentContext.IsWarmupRequest)
152152
{

test/WebJobs.Script.Tests.Integration/Host/StandbyManager/StandbyManagerE2ETests_Linux.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,21 +271,21 @@ private async Task Assign(string encryptionKey)
271271
SiteName = "TestApp",
272272
Environment = environment
273273
};
274-
var encryptedAssignmentContext = CreateEncryptedContext(assignmentContext, encryptionKey);
274+
var encryptedAssignmentContext = CreateHostAssignmentRequest(assignmentContext, encryptionKey);
275275
string json = JsonConvert.SerializeObject(encryptedAssignmentContext);
276276
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
277277
request.Headers.Add(AuthenticationLevelHandler.FunctionsKeyHeaderName, masterKey);
278278
var response = await _httpClient.SendAsync(request);
279279
Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
280280
}
281281

282-
private static EncryptedHostAssignmentContext CreateEncryptedContext(HostAssignmentContext context, string key)
282+
private static HostAssignmentRequest CreateHostAssignmentRequest(HostAssignmentContext context, string key)
283283
{
284284
string json = JsonConvert.SerializeObject(context);
285285
var encryptionKey = Convert.FromBase64String(key);
286286
string encrypted = EncryptionHelper.Encrypt(json, encryptionKey);
287287

288-
return new EncryptedHostAssignmentContext { EncryptedContext = encrypted };
288+
return new HostAssignmentRequest { EncryptedContext = encrypted };
289289
}
290290
}
291291
}

test/WebJobs.Script.Tests.Integration/Management/InstanceControllerTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ public async Task Assign_MSISpecializationFailure_ReturnsError()
8080

8181
var encryptedHostAssignmentValue = EncryptionHelper.Encrypt(JsonConvert.SerializeObject(hostAssignmentContext), TestHelpers.EncryptionKey.ToKeyBytes());
8282

83-
var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext()
83+
var hostAssignmentRequest = new HostAssignmentRequest()
8484
{
8585
EncryptedContext = encryptedHostAssignmentValue
8686
};
8787

8888
environment.SetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey, TestHelpers.EncryptionKey);
8989

90-
IActionResult result = await instanceController.Assign(encryptedHostAssignmentContext);
90+
IActionResult result = await instanceController.Assign(hostAssignmentRequest);
9191

9292
var objectResult = result as ObjectResult;
9393

@@ -156,14 +156,14 @@ public async Task Assignment_Sets_Secrets_Context()
156156

157157
var encryptedHostAssignmentValue = EncryptionHelper.Encrypt(JsonConvert.SerializeObject(hostAssignmentContext), TestHelpers.EncryptionKey.ToKeyBytes());
158158

159-
var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext()
159+
var hostAssignmentRequest = new HostAssignmentRequest()
160160
{
161161
EncryptedContext = encryptedHostAssignmentValue
162162
};
163163

164164
environment.SetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey, TestHelpers.EncryptionKey);
165165

166-
await instanceController.Assign(encryptedHostAssignmentContext);
166+
await instanceController.Assign(hostAssignmentRequest);
167167
Assert.NotNull(startupContextProvider.Context);
168168
}
169169

@@ -209,14 +209,14 @@ public async Task Assignment_Does_Not_Set_Secrets_Context_For_Warmup_Request()
209209

210210
var encryptedHostAssignmentValue = EncryptionHelper.Encrypt(JsonConvert.SerializeObject(hostAssignmentContext), TestHelpers.EncryptionKey.ToKeyBytes());
211211

212-
var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext()
212+
var hostAssignmentRequest = new HostAssignmentRequest()
213213
{
214214
EncryptedContext = encryptedHostAssignmentValue
215215
};
216216

217217
environment.SetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey, TestHelpers.EncryptionKey);
218218

219-
await instanceController.Assign(encryptedHostAssignmentContext);
219+
await instanceController.Assign(hostAssignmentRequest);
220220
Assert.Null(startupContextProvider.Context);
221221
}
222222

@@ -250,14 +250,14 @@ public async Task Assignment_Invokes_InstanceManager_Methods_For_Warmup_Requests
250250
EncryptionHelper.Encrypt(JsonConvert.SerializeObject(hostAssignmentContext),
251251
TestHelpers.EncryptionKey.ToKeyBytes());
252252

253-
var encryptedHostAssignmentContext = new EncryptedHostAssignmentContext()
253+
var hostAssignmentRequest = new HostAssignmentRequest()
254254
{
255255
EncryptedContext = encryptedHostAssignmentValue
256256
};
257257

258258
environment.SetEnvironmentVariable(EnvironmentSettingNames.ContainerEncryptionKey, TestHelpers.EncryptionKey);
259259

260-
await instanceController.Assign(encryptedHostAssignmentContext);
260+
await instanceController.Assign(hostAssignmentRequest);
261261

262262
instanceManager.Verify(i => i.ValidateContext(It.IsAny<HostAssignmentContext>()),
263263
shouldInvokeMethod ? Times.Once() : Times.Never());

test/WebJobs.Script.Tests/ContainerManagment/LinuxContainerInitializationHostedServiceTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public async Task AssignInstanceAsyncIsAwaitedTest()
3737
_mockInstanceManager.Setup(m => m.AssignInstanceAsync(It.IsAny<HostAssignmentContext>())).Returns(tcs.Task);
3838

3939
var assignmentContext = new HostAssignmentContext();
40-
_mockStartupContextProvider.Setup(p => p.SetContext(It.IsAny<EncryptedHostAssignmentContext>())).Returns(assignmentContext);
40+
_mockStartupContextProvider.Setup(p => p.SetContext(It.IsAny<HostAssignmentRequest>())).Returns(assignmentContext);
4141

4242
var service = new TestLinuxContainerInitializationHostedService(GetTestEnvironment(), _mockInstanceManager.Object,
4343
_mockLogger.Object, _mockStartupContextProvider.Object);
@@ -65,9 +65,9 @@ public TestLinuxContainerInitializationHostedService(IEnvironment environment, I
6565

6666
protected override Task<(bool HasStartContext, string StartContext)> TryGetStartContextOrNullAsync(CancellationToken cancellationToken)
6767
{
68-
var encryptedAssignmentContext = new EncryptedHostAssignmentContext { EncryptedContext = "test" };
68+
var hostAssignmentRequest = new HostAssignmentRequest { EncryptedContext = "test" };
6969

70-
return Task.FromResult((true, JsonConvert.SerializeObject(encryptedAssignmentContext)));
70+
return Task.FromResult((true, JsonConvert.SerializeObject(hostAssignmentRequest)));
7171
}
7272

7373
protected override Task SpecializeMSISideCar(HostAssignmentContext assignmentContext)

test/WebJobs.Script.Tests/StartupContextProviderTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public void SetContext_AppliesHostAssignmentContext()
188188
};
189189
string json = JsonConvert.SerializeObject(context);
190190
string encrypted = EncryptionHelper.Encrypt(json, environment: _environment);
191-
var encryptedContext = new EncryptedHostAssignmentContext { EncryptedContext = encrypted };
191+
var encryptedContext = new HostAssignmentRequest { EncryptedContext = encrypted };
192192

193193
var result = _startupContextProvider.SetContext(encryptedContext);
194194
Assert.Equal(context.SiteName, result.SiteName);
@@ -212,9 +212,9 @@ public void Does_Not_SetContext_AppliesHostAssignmentContext_For_Warmup_Request(
212212
};
213213
string json = JsonConvert.SerializeObject(context);
214214
string encrypted = EncryptionHelper.Encrypt(json, environment: _environment);
215-
var encryptedContext = new EncryptedHostAssignmentContext { EncryptedContext = encrypted };
215+
var hostAssignmentRequest = new HostAssignmentRequest { EncryptedContext = encrypted };
216216

217-
var result = _startupContextProvider.SetContext(encryptedContext);
217+
var result = _startupContextProvider.SetContext(hostAssignmentRequest);
218218
Assert.Equal(context.SiteName, result.SiteName);
219219
Assert.Equal(_secrets.Host.Master, result.Secrets.Host.Master);
220220

0 commit comments

Comments
 (0)