azure-sdk-for-net icon indicating copy to clipboard operation
azure-sdk-for-net copied to clipboard

[BUG] Lease already present after upgrading to Microsoft.Azure.WebJobs.Extensions.Storage 5.0.0-beta.3

Open mauve opened this issue 3 years ago • 20 comments

Describe the bug

2021-06-02T12:43:49.889 [Warning] Error response [a89392d0-8a3c-44ba-b55e-8c56563e74ec] 409 There is already a lease present. (00.0s)Server:Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0x-ms-request-id:5a92e3cb-801e-002d-1eac-57e3e5000000x-ms-client-request-id:a89392d0-8a3c-44ba-b55e-8c56563e74ecx-ms-version:2020-04-08x-ms-error-code:LeaseAlreadyPresentDate:Wed, 02 Jun 2021 12:43:49 GMTContent-Length:221Content-Type:application/xml

Expected behavior

No warning

Actual behavior (include Exception or Stack Trace)

To Reproduce

  1. update to 5.0.0-beta.3

Environment:

  • azure functions v3
  • dotnet core 3.1
  • Microsoft.Azure.WebJobs.Extensions.Storage 5.0.0-beta.3

All project dependencies:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>V3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Azure.Identity" Version="1.4.0" />
    <PackageReference Include="Azure.Messaging.ServiceBus" Version="7.2.0-beta.3" />
    <PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.1.1" />
    <PackageReference Include="Azure.Storage.Blobs" Version="12.9.0-beta.4" />
    <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.19.0" />
    <PackageReference Include="Microsoft.Azure.Devices" Version="1.34.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.4.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage.Blobs" Version="5.0.0-beta.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.0.0-beta.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="4.0.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.27" />
    <PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.27" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.11" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.11" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.12" />
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.17.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

mauve avatar Jun 02 '21 12:06 mauve

Thanks for the feedback! We are routing this to the appropriate team for follow-up. cc @xgithubtriage.

Issue Details

Describe the bug

2021-06-02T12:43:49.889 [Warning] Error response [a89392d0-8a3c-44ba-b55e-8c56563e74ec] 409 There is already a lease present. (00.0s)Server:Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0x-ms-request-id:5a92e3cb-801e-002d-1eac-57e3e5000000x-ms-client-request-id:a89392d0-8a3c-44ba-b55e-8c56563e74ecx-ms-version:2020-04-08x-ms-error-code:LeaseAlreadyPresentDate:Wed, 02 Jun 2021 12:43:49 GMTContent-Length:221Content-Type:application/xml

Expected behavior

No warning

Actual behavior (include Exception or Stack Trace)

To Reproduce

  1. update to 5.0.0-beta.3

Environment:

  • azure functions v3
  • dotnet core 3.1
  • Microsoft.Azure.WebJobs.Extensions.Storage 5.0.0-beta.3

All project dependencies:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>V3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Azure.Identity" Version="1.4.0" />
    <PackageReference Include="Azure.Messaging.ServiceBus" Version="7.2.0-beta.3" />
    <PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.1.1" />
    <PackageReference Include="Azure.Storage.Blobs" Version="12.9.0-beta.4" />
    <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.19.0" />
    <PackageReference Include="Microsoft.Azure.Devices" Version="1.34.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.4.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage.Blobs" Version="5.0.0-beta.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.0.0-beta.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="4.0.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.27" />
    <PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.27" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.11" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.11" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.12" />
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.17.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>
Author: mauve
Assignees: -
Labels:

Client, Service Attention, Storage, customer-reported, needs-team-attention, needs-triage, question

Milestone: -

ghost avatar Jun 02 '21 12:06 ghost

What version of Microsoft.Azure.WebJobs.Extensions.Storage are you upgrading from?

Also what code snippet causes the 409 Lease already present error?

amnguye avatar Jun 07 '21 20:06 amnguye

This is most likely coming from https://github.com/Azure/azure-sdk-for-net/blob/0e7a91c5c18f4b5d1a41f4660d007dd5874b60ba/sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Blobs/src/Listeners/BlobReceiptManager.cs#L125-L144 . We'll look for ways to not report that warning.

kasobol-msft avatar Jun 29 '21 15:06 kasobol-msft

Relabeling as bug

amnguye avatar Aug 05 '21 20:08 amnguye

This is still happening in the 5.0 release.

leniency avatar Nov 05 '21 23:11 leniency

In case it helps,

I have one Consumption Function App with 3 functions: (simplified)

public Task<ActionResult> Post(
      [HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Post))] HttpRequest httpRequest,
      [Blob("%DocumentsUploadContainer%/{rand-guid}", FileAccess.ReadWrite)] BlobClient blobClient,
      [Queue("%DocumentsUploadQueue%")] IAsyncCollector<DocumentMetadata> documentUploadMessages,
      CancellationToken cancellationToken) {...}
public Task ProcessScheduledDocumentUpload(
      [QueueTrigger("%DocumentsUploadQueue%")] DocumentMetadata metadata, string id, string popReceipt, long dequeueCount,
      [Blob("%DocumentsUploadContainer%/{blobName}", FileAccess.ReadWrite)] BlobClient blobClient,
      [Queue("%DocumentsUploadQueue%")] QueueClient queueClient) {...}
public Task CleanUpSessions(
      [TimerTrigger("%OnBaseSessionsMonitorSchedule%")] TimerInfo timer)

This function app has a dedicated storage account to which all functions refer to through the AzureWebJobsStorage App Settings variable.

This warning log is being generated ~70K times a day. This not only impacts the $$$ and the adaptive sampling features of my App Insight component, but since they are warning, they make it pretty hard to review the logs.

mdarefull avatar Nov 10 '21 10:11 mdarefull

This is still happening in the 5.0 release.

Yes, also seeing it

jedjohan avatar Nov 11 '21 07:11 jedjohan

Just updated to the new .NET 6.0 with latest (non-prerelease) libraries and ~4 runtime (in-proc C# library), and this issue still occurs.

If you want to stem the AI log spam, setting Azure.Core to Error in your host.json seems to stop it:

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "default": "Information",
      "Azure.Core": "Error"
    }
  }
}

This unfortunately turns off all of the Azure.Core logs, most particularly ResponseDelay which warns of slow function times.

For in-process function apps at least, there's a name deduplication that happens so that ResponseDelay is reported with category Azure.Core.1 instead of Azure.Core. So you might be able to include that one in your logs by adding "Azure.Core.": "Warning" to your host.json logging configuration. I haven't tried it since I have my own warning log message when a function takes too long.

StephenCleary avatar Nov 17 '21 03:11 StephenCleary

FYI, I am using version 4.0.5 of Microsoft.Azure.WebJobs.Extensions.Storage, and I am seeing the same issue. Between the 7 and 20 lines per minute.

JohanKlijn avatar Nov 23 '21 11:11 JohanKlijn

@jaschrep-msft can you please pick this up.

amishra-dev avatar Dec 01 '21 00:12 amishra-dev

We'd like the fix for this to align with https://github.com/Azure/azure-sdk-for-net/issues/25626 which we hope will be a common solution to this class of problems.

tg-msft avatar Dec 01 '21 20:12 tg-msft

I'm hitting this as well, here in the first week of Jan

shanselman avatar Jan 07 '22 23:01 shanselman

This bug is a spam cannon for my logs

braddwalker avatar Jan 23 '22 17:01 braddwalker

Our log is flooded as well, any news on this?

maQus123 avatar Feb 16 '22 10:02 maQus123

We're also seeing this. Any update? This is coming from our durable functions app, in a container in AKS. .net 6, functions v4

Error response [34d137f5-9af7-4e51-9203-a78120bbb4af] 409 There is already a lease present. (00.0s)
Server:Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
x-ms-error-code:LeaseAlreadyPresent
SourceContext: Azure.Core

Project file

<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
	  <TargetFramework>net6.0</TargetFramework>
	  <LangVersion>latestMajor</LangVersion>
		<AzureFunctionsVersion>v4</AzureFunctionsVersion>
		<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
	</PropertyGroup>
	<PropertyGroup>
		<ServerGarbageCollection>false</ServerGarbageCollection>
	</PropertyGroup>
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
		<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
		<NoWarn>1701;1702;AD0001</NoWarn>
	</PropertyGroup>
	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
		<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
		<NoWarn>1701;1702;AD0001</NoWarn>
	</PropertyGroup>
	<ItemGroup>
		<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.5.1" />
		<PackageReference Include="Azure.Storage.Queues" Version="12.8.0" />
		<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
		<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.6.1" />
		<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.0.0" />
		<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="6.0.1" />
		<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" />
		<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
		<PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
		<PackageReference Include="Serilog.Exceptions" Version="8.0.0" />
		<PackageReference Include="Serilog.Expressions" Version="3.2.1" />
		<PackageReference Include="Serilog.Extensions.WebJobs" Version="0.6.1" />
		<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.0" />
		<PackageReference Include="Serilog.Sinks.AzureServiceBus" Version="1.0.2" />
	</ItemGroup>
	<ItemGroup>
		<None Update="host.json">
			<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
		</None>
		<None Update="local.settings.json">
			<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
			<CopyToPublishDirectory>Never</CopyToPublishDirectory>
		</None>
		<None Update="serilog.settings.json">
			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
		</None>
	</ItemGroup>
</Project>

jim-hart-dev avatar Mar 14 '22 06:03 jim-hart-dev

I'd like to add and raise awareness why these issues should be taken quite seriously by product group.

The impact is two-fold:

  • Noisy logging that is driving up the application insights costs due to low value trace messages. Messages such as "Lease already present", "Skipping ownership lease aquiring for somefunctionapp-control-... ". Yes, your customers are paying for these messages.
  • Some of these behaviors (e.g. blobtrigger scanning change between v3 and v4) cause unnecessary load on storage account which is harder to notice due to infinite cloud scale, until you notice the cost rise due to storage account usage (which then also causes Azure Defender Costs to rise).

I've been hit by this twice now - once for non-durable functions with blob triggers that went on spiral trying to understand if retriggering is necessary and causes both insane blob storage usage growth and trace logging. This happened while migration from v3 to v4 and to .net 6. As mentioned here: "Azure.Core": "Error" helps with less trace logs, but to "fix" the storage usage, we had to move away from blob triggers to eventgrid + servicebus triggering instead. On one of the most used storage account, the problem caused 8 million additional transactions on storage per day for us. Add that we have about 10 environments and more than one storage account per environment - its becomes a noticeable cost and mess.

The second one is the durable function and the "Skipping ownership lease aquiring for somefunctionapp-control-". Its not merely an info message, your storage is being hit here as well (at least mine is). About 1.2 million transactions/day on the most used storage account linked to function app. I've yet to understand what is causing this, since the particular durable function for us is not in active usage - but it started after .net 6 / v4 migration.

melborp avatar Jun 07 '22 19:06 melborp

@kasobol-msft and @jaschrep-msft are you looking at this ? Many customers are facing this.

anirudhgarg avatar Jun 17 '22 05:06 anirudhgarg

@kasobol-msft @jaschrep-msft My customer is complaining of the same symptoms, and they are also being charged unnecessarily for Log Analytics, so the problem needs to be resolved as soon as possible. Will filtering by log level prevent unnecessary charges for Log Analytics?

yoichiozaki avatar Oct 12 '22 09:10 yoichiozaki

The required APIs should be available now in Azure.Core to be able to implement this feature. In order to suppress distributed tracing for a given status code, AddClassifier() should be called on RequestContext prior to passing it to the method in question. An example can be found in the TableServiceClient here.

Please reach out with any remaining questions on implementation.

annelo-msft avatar Jan 10 '23 00:01 annelo-msft

When can we expect this to be fixed?

xmak avatar Feb 11 '23 21:02 xmak

@xmak the PR linked above your comment is the key to fixing this. We plan to get this out in our next release cycle. Once that API is available, the webjobs extension package will need to be updated to use the new API instead of the old one, passing in the appropriate error classification to avoid logging the response.

jaschrep-msft avatar Feb 27 '23 15:02 jaschrep-msft