Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the reason for host lock lease acquired by instance id in Azure function?

I'm running a project which has Azure function, but it's not running my azure function. I have put the breakpoint, its also not hitting the breakpoint. Also, the output is not clear so that I can debug my code. Is there any way to debug the code to find the root cause of the issue?

Output:

[3/20/2018 9:39:31 AM] Reading host configuration file 'C:\Users\myname\Source\MyProject\aspnet-core\src\Nec.MyProject.Processors\bin\Debug\netstandard2.0\host.json' [3/20/2018 9:39:31 AM] Host configuration file read: [3/20/2018 9:39:31 AM] { [3/20/2018 9:39:31 AM] "queues": { [3/20/2018 9:39:31 AM] "maxPollingInterval": 1000, [3/20/2018 9:39:31 AM]
"visibilityTimeout": "00:00:00", [3/20/2018 9:39:31 AM]
"batchSize": 1, [3/20/2018 9:39:31 AM] "maxDequeueCount": 5 [3/20/2018 9:39:31 AM] } [3/20/2018 9:39:31 AM] } [3/20/2018 9:39:48 AM] Generating 15 job function(s) [3/20/2018 9:39:48 AM] Starting Host (HostId=windowsmyname-655615619, Version=2.0.11415.0, ProcessId=6320, Debug=False, ConsecutiveErrors=0, StartupCount=1, FunctionsExtensionVersion=) [3/20/2018 9:39:49 AM] Found the following functions: [3/20/2018 9:39:49 AM] MyCompany.MyProject.Processors.BackOfficeFilesGeneratorJobs.RunTestGeneratorAsync [3/20/2018 9:39:49 AM] [3/20/2018 9:39:49 AM] Job host started Listening on http://localhost:7071/ Hit CTRL-C to exit... [3/20/2018 9:39:50 AM] Host lock lease acquired by instance ID '000000000000000000000000C78D3496'.

Azure Function:

[FunctionName("GenerateTestOfficeMasterDataFiles")]
public static async Task RunTestGeneratorAsync(
    [QueueTrigger("%MasterDataFiles:Supplier:QueueName%", Connection = "ConnectionStrings:BlobStorageAccount")] BackOfficeFileGeneratorMessage<string> message,
    ExecutionContext context,
    TraceWriter log)

Note: It was working fine when it was BackOfficeFileGeneratorMessage instead of BackOfficeFileGeneratorMessage<string>.

Update:

public class BackOfficeFileGeneratorMessage<TEntityKey>
{
    public BackOfficeFileGeneratorMessage()
    {
        Items = new MasterDataFileOperationItem <TEntityKey>[0];
    }
    public bool UseStaging { get; set; }
    public string StoreNo { get; set; }
    public bool RefreshAll { get; set; }
    public IEnumerable<MasterDataFileOperationItem <TEntityKey>> Items { get; set; }
}
like image 664
vivek nuna Avatar asked Mar 20 '18 12:03

vivek nuna


2 Answers

Functions runtime acquires lease on the storage account attached to the function app using an unique Id that is specific to your function App. This is an internal implementation detail.

Deserializing to a generic type should work as long as the queue trigger data matches the POCO. For e.g, here is generic type

public class GenericInput<T>
{
    public T OrderId { get; set; }

    public T CustomerName { get; set; }
}

and the function

 public static void ProcessQueueMessage([QueueTrigger("queuea")] GenericInput<string> message, TextWriter log)
    {
        log.WriteLine(message);
    }

Sample queue data

{
  "OrderId" : 1,
  "CustomerName" : "john" 
}

you would get serialization errors if queue data cannot be serialized to the expected GenericType. For e.g following function would fail trying to process the bad queue input: function:

public static void ProcessQueueMessage([QueueTrigger("queuea")] GenericInput<int> message, TextWriter log)
    {
        log.WriteLine(message);
    }

bad input:

{
 "OrderId" : 1,
 "CustomerName" : "cannot covert string to number" 
}
like image 182
Pragna Gopa Avatar answered Nov 07 '22 06:11

Pragna Gopa


just add the next key:value to the hosts.json:

"singleton": {
    "listenerLockPeriod": "00:00:15" 
  }
like image 39
Hesham Yassin Avatar answered Nov 07 '22 04:11

Hesham Yassin