-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathSqlDurabilityOptions.cs
More file actions
83 lines (68 loc) · 3.22 KB
/
SqlDurabilityOptions.cs
File metadata and controls
83 lines (68 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
namespace DurableTask.SqlServer.AzureFunctions
{
using System;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
class SqlDurabilityOptions
{
[JsonProperty("connectionStringName")]
public string ConnectionStringName { get; set; } = "SQLDB_Connection";
[JsonProperty("taskHubName")]
public string TaskHubName { get; set; } = SqlOrchestrationServiceSettings.DefaultTaskHubName;
[JsonProperty("taskEventLockTimeout")]
public TimeSpan TaskEventLockTimeout { get; set; } = TimeSpan.FromMinutes(2);
[JsonProperty("taskEventBatchSize")]
public int TaskEventBatchSize { get; set; } = 10;
[JsonProperty("createDatabaseIfNotExists")]
public bool CreateDatabaseIfNotExists { get; set; }
[JsonProperty("schemaName")]
public string? SchemaName { get; set; }
internal ILoggerFactory LoggerFactory { get; set; } = NullLoggerFactory.Instance;
internal SqlOrchestrationServiceSettings GetOrchestrationServiceSettings(
DurableTaskOptions extensionOptions,
IConnectionInfoResolver connectionStringResolver)
{
if (connectionStringResolver == null)
{
throw new ArgumentNullException(nameof(connectionStringResolver));
}
IConfigurationSection connectionStringSection = connectionStringResolver.Resolve(this.ConnectionStringName);
if (connectionStringSection == null || string.IsNullOrEmpty(connectionStringSection.Value))
{
throw new InvalidOperationException(
$"No SQL connection string configuration was found for the app setting or environment variable named '{this.ConnectionStringName}'.");
}
// Validate the connection string
try
{
new SqlConnectionStringBuilder(connectionStringSection.Value);
}
catch (ArgumentException e)
{
throw new ArgumentException("The provided connection string is invalid.", e);
}
var settings = new SqlOrchestrationServiceSettings(connectionStringSection.Value, this.TaskHubName, this.SchemaName)
{
CreateDatabaseIfNotExists = this.CreateDatabaseIfNotExists,
LoggerFactory = this.LoggerFactory,
WorkItemBatchSize = this.TaskEventBatchSize,
WorkItemLockTimeout = this.TaskEventLockTimeout,
};
if (extensionOptions.MaxConcurrentActivityFunctions.HasValue)
{
settings.MaxConcurrentActivities = extensionOptions.MaxConcurrentActivityFunctions.Value;
}
if (extensionOptions.MaxConcurrentOrchestratorFunctions.HasValue)
{
settings.MaxActiveOrchestrations = extensionOptions.MaxConcurrentOrchestratorFunctions.Value;
}
return settings;
}
}
}