From c88b717a4d762dedc9e12cde149ac7f30ceff073 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Tue, 25 Feb 2020 10:32:16 +0330 Subject: [PATCH 1/7] Change ConcurrenyMIddleware service extensions method --- src/Middleware/ConcurrencyLimiter/sample/Startup.cs | 2 +- .../QueuePolicies/QueuePolicyServiceCollectionExtensions.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs index bd4bf2ec58a8..3149657d4443 100644 --- a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs +++ b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs @@ -15,7 +15,7 @@ public class Startup { public void ConfigureServices(IServiceCollection services) { - services.AddStackPolicy(options => + services.AddConcurrencyLimiterStackPolicy(options => { options.MaxConcurrentRequests = 2; options.RequestQueueLimit = 25; diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs index 09b9aeb48ff5..d6c3546bb4bc 100644 --- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs @@ -18,7 +18,7 @@ public static class QueuePolicyServiceCollectionExtensions /// Set the options used by the queue. /// Mandatory, since must be provided. /// - public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure) + public static IServiceCollection AddConcurrencyLimiterQueuePolicy(this IServiceCollection services, Action configure) { services.Configure(configure); services.AddSingleton(); @@ -32,7 +32,7 @@ public static IServiceCollection AddQueuePolicy(this IServiceCollection services /// Set the options used by the queue. /// Mandatory, since must be provided. /// - public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure) + public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action configure) { services.Configure(configure); services.AddSingleton(); From fa20a8c3f09da24832a85fa87a68ca881ae0942f Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 28 Feb 2020 14:35:36 +0330 Subject: [PATCH 2/7] Create ConcurrencyLimiterBuilder --- .../ConcurrencyLimiter/sample/Startup.cs | 6 +-- .../src/ConcurrencyLimiterBuilder.cs | 24 ++++++++++ .../ConcurrencyLimiterBuilderExtensions.cs | 46 +++++++++++++++++++ ...cyMiddlewareServiceCollectionExtensions.cs | 37 +++++++++++++++ .../QueuePolicyServiceCollectionExtensions.cs | 6 ++- 5 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs create mode 100644 src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs create mode 100644 src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs diff --git a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs index 3149657d4443..82c7966ce479 100644 --- a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs +++ b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs @@ -15,11 +15,11 @@ public class Startup { public void ConfigureServices(IServiceCollection services) { - services.AddConcurrencyLimiterStackPolicy(options => + services.AddConcurrencyLimiter(options => { - options.MaxConcurrentRequests = 2; + options.MaxConcurrentRequests = 2; options.RequestQueueLimit = 25; - }); + }).AddStackPolicy(); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs new file mode 100644 index 000000000000..8eebc777bb31 --- /dev/null +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilder.cs @@ -0,0 +1,24 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information + +using System; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.ConcurrencyLimiter +{ + public class ConcurrencyLimiterBuilder + { + public ConcurrencyLimiterBuilder(IServiceCollection services) + { + Services = services ?? throw new ArgumentNullException(nameof(services)); + } + + /// + /// Gets the services are attached to. + /// + /// + /// The services are attached to. + /// + public IServiceCollection Services { get; } + } +} diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs new file mode 100644 index 000000000000..da96984bab5a --- /dev/null +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs @@ -0,0 +1,46 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information + +using System; +using Microsoft.AspNetCore.ConcurrencyLimiter; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class ConcurrencyLimiterBuilderExtensions + { + /// + /// Tells to use a FIFO queue as its queueing strategy. + /// + /// + /// + public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder) + { + builder.Services.AddSingleton(); + return builder; + } + + /// + /// Tells to use a LIFO stack as its queueing strategy. + /// + /// + /// + public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder) + { + builder.Services.AddSingleton(); + return builder; + } + + /// + /// Tells to use a LIFO stack as its queueing strategy. + /// + /// The to add services to. + /// Set the options used by the queue. + /// Mandatory, since must be provided. + /// + public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action configure) + { + services.Configure(configure); + return services; + } + } +} diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs new file mode 100644 index 000000000000..fce81fc0828c --- /dev/null +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs @@ -0,0 +1,37 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using Microsoft.AspNetCore.ConcurrencyLimiter; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class ConcurrencyMiddlewareServiceCollectionExtensions + { + /// + /// + /// + /// The to add services to. + /// Set the options used by the queue. + /// + public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action configure) + { + services.Configure(configure); + + return new ConcurrencyLimiterBuilder(services); + } + + /// + /// + /// + /// The to add services to. + /// Set the options used by the queue. + /// + public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action configure) + { + services.AddOptions().Configure(configure); + + return new ConcurrencyLimiterBuilder(services); + } + } +} diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs index d6c3546bb4bc..003e29dcbe76 100644 --- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs @@ -18,7 +18,8 @@ public static class QueuePolicyServiceCollectionExtensions /// Set the options used by the queue. /// Mandatory, since must be provided. /// - public static IServiceCollection AddConcurrencyLimiterQueuePolicy(this IServiceCollection services, Action configure) + [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddQueuePolicy() instead")] + public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure) { services.Configure(configure); services.AddSingleton(); @@ -32,7 +33,8 @@ public static IServiceCollection AddConcurrencyLimiterQueuePolicy(this IServiceC /// Set the options used by the queue. /// Mandatory, since must be provided. /// - public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action configure) + [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddStackPolicy() instead")] + public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure) { services.Configure(configure); services.AddSingleton(); From 73746fbe4b47da608bb9b23eea1709e7e3af6826 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 28 Feb 2020 14:38:50 +0330 Subject: [PATCH 3/7] Cleanup --- .../src/ConcurrencyLimiterBuilderExtensions.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs index da96984bab5a..9709516e7f92 100644 --- a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs @@ -29,18 +29,5 @@ public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBu builder.Services.AddSingleton(); return builder; } - - /// - /// Tells to use a LIFO stack as its queueing strategy. - /// - /// The to add services to. - /// Set the options used by the queue. - /// Mandatory, since must be provided. - /// - public static IServiceCollection AddConcurrencyLimiterStackPolicy(this IServiceCollection services, Action configure) - { - services.Configure(configure); - return services; - } } } From ae39548ae84046fd2a90f935138c2611a3a8ba92 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Fri, 28 Feb 2020 16:12:26 +0330 Subject: [PATCH 4/7] Use new Apis in oboletes method --- .../QueuePolicyServiceCollectionExtensions.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs index 003e29dcbe76..eae872a78430 100644 --- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs @@ -21,8 +21,9 @@ public static class QueuePolicyServiceCollectionExtensions [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddQueuePolicy() instead")] public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure) { - services.Configure(configure); - services.AddSingleton(); + services.AddConcurrencyLimiter(configure) + .AddQueuePolicy(); + return services; } @@ -36,8 +37,9 @@ public static IServiceCollection AddQueuePolicy(this IServiceCollection services [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddStackPolicy() instead")] public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure) { - services.Configure(configure); - services.AddSingleton(); + services.AddConcurrencyLimiter(configure) + .AddStackPolicy(); + return services; } } From 7f103ad06d81d3e2af5bc4b54926b2fcfc15af5f Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Sun, 8 Mar 2020 13:29:45 +0330 Subject: [PATCH 5/7] Move options to queue extension methods --- .../ConcurrencyLimiter/sample/Startup.cs | 4 +- .../ConcurrencyLimiterBuilderExtensions.cs | 38 ++++++++++++++++++- ...cyMiddlewareServiceCollectionExtensions.cs | 18 +-------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs index 82c7966ce479..d275c7b28354 100644 --- a/src/Middleware/ConcurrencyLimiter/sample/Startup.cs +++ b/src/Middleware/ConcurrencyLimiter/sample/Startup.cs @@ -15,11 +15,11 @@ public class Startup { public void ConfigureServices(IServiceCollection services) { - services.AddConcurrencyLimiter(options => + services.AddConcurrencyLimiter().AddStackPolicy(options => { options.MaxConcurrentRequests = 2; options.RequestQueueLimit = 25; - }).AddStackPolicy(); + }); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs index 9709516e7f92..2bcad30d7191 100644 --- a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyLimiterBuilderExtensions.cs @@ -12,9 +12,26 @@ public static class ConcurrencyLimiterBuilderExtensions /// Tells to use a FIFO queue as its queueing strategy. /// /// + /// Set the options used by the queue. /// - public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder) + public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder, Action configure) { + builder.Services.AddOptions().Configure(configure); + + builder.Services.AddSingleton(); + return builder; + } + + /// + /// Tells to use a FIFO queue as its queueing strategy. + /// + /// + /// Set the options used by the queue. + /// + public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBuilder builder, Action configure) + { + builder.Services.AddOptions().Configure(configure); + builder.Services.AddSingleton(); return builder; } @@ -23,9 +40,26 @@ public static ConcurrencyLimiterBuilder AddQueuePolicy(this ConcurrencyLimiterBu /// Tells to use a LIFO stack as its queueing strategy. /// /// + /// Set the options used by the queue. /// - public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder) + public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder, Action configure) { + builder.Services.AddOptions().Configure(configure); + + builder.Services.AddSingleton(); + return builder; + } + + /// + /// Tells to use a LIFO stack as its queueing strategy. + /// + /// + /// Set the options used by the queue. + /// + public static ConcurrencyLimiterBuilder AddStackPolicy(this ConcurrencyLimiterBuilder builder, Action configure) + { + builder.Services.AddOptions().Configure(configure); + builder.Services.AddSingleton(); return builder; } diff --git a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs index fce81fc0828c..c4c10163308f 100644 --- a/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/ConcurrencyMiddlewareServiceCollectionExtensions.cs @@ -12,25 +12,9 @@ public static class ConcurrencyMiddlewareServiceCollectionExtensions /// /// /// The to add services to. - /// Set the options used by the queue. /// - public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action configure) + public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services) { - services.Configure(configure); - - return new ConcurrencyLimiterBuilder(services); - } - - /// - /// - /// - /// The to add services to. - /// Set the options used by the queue. - /// - public static ConcurrencyLimiterBuilder AddConcurrencyLimiter(this IServiceCollection services, Action configure) - { - services.AddOptions().Configure(configure); - return new ConcurrencyLimiterBuilder(services); } } From 49bdc605aa70d663516e9d8aad0e18f3fb0cae62 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Sun, 8 Mar 2020 13:41:45 +0330 Subject: [PATCH 6/7] Move options to queue extension methods --- .../QueuePolicyServiceCollectionExtensions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs index eae872a78430..24c3e518f513 100644 --- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs @@ -21,8 +21,8 @@ public static class QueuePolicyServiceCollectionExtensions [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddQueuePolicy() instead")] public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure) { - services.AddConcurrencyLimiter(configure) - .AddQueuePolicy(); + services.AddConcurrencyLimiter() + .AddQueuePolicy(configure); return services; } @@ -37,8 +37,8 @@ public static IServiceCollection AddQueuePolicy(this IServiceCollection services [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddStackPolicy() instead")] public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure) { - services.AddConcurrencyLimiter(configure) - .AddStackPolicy(); + services.AddConcurrencyLimiter() + .AddStackPolicy(configure); return services; } From 8448046b9cb20ccd3c425688110d7ac29ba5b791 Mon Sep 17 00:00:00 2001 From: Kahbazi Date: Sun, 8 Mar 2020 13:46:50 +0330 Subject: [PATCH 7/7] Move options to queue extension methods --- .../QueuePolicies/QueuePolicyServiceCollectionExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs index 24c3e518f513..aefd513231d9 100644 --- a/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs +++ b/src/Middleware/ConcurrencyLimiter/src/QueuePolicies/QueuePolicyServiceCollectionExtensions.cs @@ -18,7 +18,7 @@ public static class QueuePolicyServiceCollectionExtensions /// Set the options used by the queue. /// Mandatory, since must be provided. /// - [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddQueuePolicy() instead")] + [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter().AddQueuePolicy(configure) instead")] public static IServiceCollection AddQueuePolicy(this IServiceCollection services, Action configure) { services.AddConcurrencyLimiter() @@ -34,7 +34,7 @@ public static IServiceCollection AddQueuePolicy(this IServiceCollection services /// Set the options used by the queue. /// Mandatory, since must be provided. /// - [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter(configure).AddStackPolicy() instead")] + [Obsolete("This is obsolete and will be removed in a future version. Use AddConcurrencyLimiter().AddStackPolicy(configure) instead")] public static IServiceCollection AddStackPolicy(this IServiceCollection services, Action configure) { services.AddConcurrencyLimiter()