Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix sync trigger error when AzureWebjobsStorage is not set in ManagedApp Environment #10767

Open
wants to merge 13 commits into
base: dev
Choose a base branch
from
3 changes: 2 additions & 1 deletion release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
<!-- Please add your release notes in the following format:
- My change description (#PR)
-->
- Update Java Worker Version to [2.18.1](https://github.com/Azure/azure-functions-java-worker/releases/tag/2.18.1)
- Update Java Worker Version to [2.18.1](https://github.com/Azure/azure-functions-java-worker/releases/tag/2.18.1)
- Allow sync trigger to happen in managed environment when `AzureWebJobsStorage` is not set (#10767)
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public async Task<SyncTriggersResult> TrySyncTriggersAsync(bool isBackgroundSync
PrepareSyncTriggers();

var hashBlobClient = await GetHashBlobAsync();
if (isBackgroundSync && hashBlobClient == null && !_environment.IsKubernetesManagedHosting())
if (isBackgroundSync && hashBlobClient == null && !_environment.IsAnyKubernetesEnvironment())
{
// short circuit before doing any work in background sync
// cases where we need to check/update hash but don't have
Expand All @@ -135,7 +135,7 @@ public async Task<SyncTriggersResult> TrySyncTriggersAsync(bool isBackgroundSync

bool shouldSyncTriggers = true;
string newHash = null;
if (isBackgroundSync && !_environment.IsKubernetesManagedHosting())
if (isBackgroundSync && hashBlobClient != null)
{
newHash = await CheckHashAsync(hashBlobClient, payload.Content);
shouldSyncTriggers = newHash != null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,57 @@ public async Task TrySyncTriggers_LocalEnvironment_ReturnsFalse()
}
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public async Task TrySyncTriggers_ManagedAppEnv_WithNo_AzureWebJobsStorage_ReturnsTrue(bool cacheEnabled)
{
_mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteArmCacheEnabled)).Returns(cacheEnabled ? "1" : "0");

using (var env = new TestScopedEnvironmentVariable(_vars))
{
_mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.ManagedEnvironment)).Returns("true");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("FUNCTIONS_API_SERVER")).Returns("https://appname.azurewebsites.net");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("CONTAINER_APP_NAME")).Returns("appname");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("CONTAINER_APP_NAMESPACE")).Returns("appns");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("CONTAINER_APP_REVISION")).Returns("appname--r1");
var result = await _functionsSyncManager.TrySyncTriggersAsync(isBackgroundSync: true);
Assert.True(result.Success);
if (cacheEnabled)
{
VerifyResultWithCacheOn(durableVersion: "V1");
}
else
{
VerifyResultWithCacheOff(durableVersion: "V1");
}
}
}

[Theory]
[InlineData(false)]
public async Task TrySyncTriggers_KubernetesManagedEnv_WithNo_AzureWebJobsStorage_ReturnsTrue(bool cacheEnabled)
{
_mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteArmCacheEnabled)).Returns(cacheEnabled ? "1" : "0");

using (var env = new TestScopedEnvironmentVariable(_vars))
{
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("FUNCTIONS_API_SERVER")).Returns("https://appname.azurewebsites.net");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("KUBERNETES_SERVICE_HOST")).Returns("kubhost");
_mockEnvironment.Setup(p => p.GetEnvironmentVariable("POD_NAMESPACE")).Returns("podns");
var result = await _functionsSyncManager.TrySyncTriggersAsync(isBackgroundSync: true);
Assert.True(result.Success);
if (cacheEnabled)
{
VerifyResultWithCacheOn(durableVersion: "V1");
}
else
{
VerifyResultWithCacheOff(durableVersion: "V1");
}
}
}

[Fact]
public void ArmCacheEnabled_VerifyDefault()
{
Expand Down Expand Up @@ -1159,4 +1210,4 @@ public void Reset()
}
}
}
}
}