in Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/Trigger/CosmosDBMongoTriggerListener.cs [174:210]
private async Task ProcessChangeAsync(ChangeStreamDocument<BsonDocument> change)
{
try
{
lock (_metricsLock)
{
_currentMetrics.PendingEventsCount++;
CosmosDBMongoMetricsStore.AddMetrics(_reference.functionId, _reference.databaseName, _reference.collectionName, _currentMetrics);
}
try
{
var triggerData = new TriggeredFunctionData
{
TriggerValue = change
};
var result = await this._executor.TryExecuteAsync(triggerData, this._cancellationTokenSource.Token);
if (!result.Succeeded)
{
_logger.LogWarning($"Function execution failed for document {change.DocumentKey}: {result.Exception}");
}
}
finally
{
lock (_metricsLock)
{
_currentMetrics.PendingEventsCount--;
CosmosDBMongoMetricsStore.AddMetrics(_reference.functionId, _reference.databaseName, _reference.collectionName, _currentMetrics);
}
}
}
catch (Exception ex)
{
_logger.LogError(Events.OnError, $"Error processing change. Exception: {ex.Message}");
throw;
}
}