Skip to content

Commit 62edd6f

Browse files
committed
fix: 優化鎖定邏輯,統一更新方法的鎖定鍵使用
1 parent b48b5da commit 62edd6f

File tree

9 files changed

+56
-46
lines changed

9 files changed

+56
-46
lines changed

src/Netcorext.Auth.Authentication/Workers/Runners/BlockedIpRunner.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4040
{
4141
_logger.LogDebug("{Message}", nameof(BlockedIpRunner));
4242

43-
_subscriber?.Dispose();
43+
await UpdateBlockedIpAsync(null, cancellationToken);
4444

45+
_subscriber?.Dispose();
4546
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_BLOCKED_IP_CHANGE_EVENT], Handler);
4647

47-
await UpdateBlockedIpAsync(null, cancellationToken);
48-
4948
return;
5049

5150
void Handler(string s, object o)
@@ -56,9 +55,11 @@ void Handler(string s, object o)
5655

5756
private async Task UpdateBlockedIpAsync(string? ids, CancellationToken cancellationToken = default)
5857
{
58+
var lockerKey = ids.IsEmpty() ? nameof(UpdateBlockedIpAsync) : nameof(UpdateBlockedIpAsync) + "/" + ids;
59+
5960
try
6061
{
61-
await _locker.WaitAsync(nameof(UpdateBlockedIpAsync));
62+
await _locker.WaitAsync(lockerKey);
6263

6364
_logger.LogInformation(nameof(UpdateBlockedIpAsync));
6465

@@ -98,7 +99,7 @@ private async Task UpdateBlockedIpAsync(string? ids, CancellationToken cancellat
9899
}
99100
finally
100101
{
101-
_locker.Release(nameof(UpdateBlockedIpAsync));
102+
_locker.Release(lockerKey);
102103
}
103104
}
104105

src/Netcorext.Auth.Authentication/Workers/Runners/ClientRunner.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,15 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4040
{
4141
_logger.LogDebug("{Message}", nameof(ClientRunner));
4242

43-
_subscriber?.Dispose();
43+
await UpdateClientAsync(null, cancellationToken);
44+
await BlockClientAsync(null, cancellationToken);
4445

46+
_subscriber?.Dispose();
4547
_subscriber = _redis.Subscribe(new[]
4648
{
4749
_config.Queues[ConfigSettings.QUEUES_CLIENT_CHANGE_EVENT]
4850
}, Handler);
4951

50-
await UpdateClientAsync(null, cancellationToken);
51-
await BlockClientAsync(null, cancellationToken);
52-
5352
return;
5453

5554
void Handler(string s, object o)
@@ -60,9 +59,11 @@ void Handler(string s, object o)
6059

6160
private async Task UpdateClientAsync(string? ids, CancellationToken cancellationToken = default)
6261
{
62+
var lockerKey = ids.IsEmpty() ? nameof(UpdateClientAsync) : nameof(UpdateClientAsync) + "/" + ids;
63+
6364
try
6465
{
65-
await _locker.WaitAsync(nameof(UpdateClientAsync));
66+
await _locker.WaitAsync(lockerKey);
6667

6768
_logger.LogInformation(nameof(UpdateClientAsync));
6869

@@ -103,15 +104,17 @@ private async Task UpdateClientAsync(string? ids, CancellationToken cancellation
103104
}
104105
finally
105106
{
106-
_locker.Release(nameof(BlockClientAsync));
107+
_locker.Release(lockerKey);
107108
}
108109
}
109110

110111
private async Task BlockClientAsync(string? ids, CancellationToken cancellationToken = default)
111112
{
113+
var lockerKey = ids.IsEmpty() ? nameof(BlockClientAsync) : nameof(BlockClientAsync) + "/" + ids;
114+
112115
try
113116
{
114-
await _locker.WaitAsync(nameof(BlockClientAsync));
117+
await _locker.WaitAsync(lockerKey);
115118

116119
_logger.LogInformation(nameof(BlockClientAsync));
117120

@@ -151,7 +154,7 @@ private async Task BlockClientAsync(string? ids, CancellationToken cancellationT
151154
}
152155
finally
153156
{
154-
_locker.Release(nameof(BlockClientAsync));
157+
_locker.Release(lockerKey);
155158
}
156159
}
157160

src/Netcorext.Auth.Authentication/Workers/Runners/MaintainRunner.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,11 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
3939
{
4040
_logger.LogDebug("{Message}", nameof(MaintainRunner));
4141

42-
_subscriber?.Dispose();
42+
await UpdateMaintainAsync(null, cancellationToken);
4343

44+
_subscriber?.Dispose();
4445
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_MAINTAIN_CHANGE_EVENT], Handler);
4546

46-
await UpdateMaintainAsync(null, cancellationToken);
47-
4847
return;
4948

5049
void Handler(string s, object o)
@@ -53,11 +52,13 @@ void Handler(string s, object o)
5352
}
5453
}
5554

56-
private async Task UpdateMaintainAsync(string? data, CancellationToken cancellationToken = default)
55+
private async Task UpdateMaintainAsync(string? ids, CancellationToken cancellationToken = default)
5756
{
57+
var lockerKey = ids.IsEmpty() ? nameof(UpdateMaintainAsync) : nameof(UpdateMaintainAsync) + "/" + ids;
58+
5859
try
5960
{
60-
await _locker.WaitAsync(nameof(UpdateMaintainAsync));
61+
await _locker.WaitAsync(lockerKey);
6162

6263
_logger.LogInformation(nameof(UpdateMaintainAsync));
6364

@@ -75,7 +76,7 @@ private async Task UpdateMaintainAsync(string? data, CancellationToken cancellat
7576
}
7677
finally
7778
{
78-
_locker.Release(nameof(UpdateMaintainAsync));
79+
_locker.Release(lockerKey);
7980
}
8081
}
8182

src/Netcorext.Auth.Authentication/Workers/Runners/PermissionRunner.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4040
{
4141
_logger.LogDebug("{Message}", nameof(RoleRunner));
4242

43-
_subscriber?.Dispose();
43+
await UpdatePermissionAsync(null, cancellationToken);
4444

45+
_subscriber?.Dispose();
4546
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_PERMISSION_CHANGE_EVENT], Handler);
4647

47-
await UpdatePermissionAsync(null, cancellationToken);
48-
4948
return;
5049

5150
void Handler(string s, object o)
@@ -56,9 +55,11 @@ void Handler(string s, object o)
5655

5756
private async Task UpdatePermissionAsync(string? ids, CancellationToken cancellationToken = default)
5857
{
58+
var lockerKey = ids.IsEmpty() ? nameof(UpdatePermissionAsync) : nameof(UpdatePermissionAsync) + "/" + ids;
59+
5960
try
6061
{
61-
await _locker.WaitAsync(nameof(UpdatePermissionAsync));
62+
await _locker.WaitAsync(lockerKey);
6263

6364
_logger.LogInformation(nameof(UpdatePermissionAsync));
6465

@@ -106,7 +107,7 @@ private async Task UpdatePermissionAsync(string? ids, CancellationToken cancella
106107
}
107108
finally
108109
{
109-
_locker.Release(nameof(UpdatePermissionAsync));
110+
_locker.Release(lockerKey);
110111
}
111112
}
112113

src/Netcorext.Auth.Authentication/Workers/Runners/RoleRunner.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4040
{
4141
_logger.LogDebug("{Message}", nameof(RoleRunner));
4242

43-
_subscriber?.Dispose();
43+
await UpdateRoleAsync(null, cancellationToken);
4444

45+
_subscriber?.Dispose();
4546
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_ROLE_CHANGE_EVENT], Handler);
4647

47-
await UpdateRoleAsync(null, cancellationToken);
48-
4948
return;
5049

5150
void Handler(string s, object o)
@@ -56,9 +55,11 @@ void Handler(string s, object o)
5655

5756
private async Task UpdateRoleAsync(string? ids, CancellationToken cancellationToken = default)
5857
{
58+
var lockerKey = ids.IsEmpty() ? nameof(UpdateRoleAsync) : nameof(UpdateRoleAsync) + "/" + ids;
59+
5960
try
6061
{
61-
await _locker.WaitAsync(nameof(UpdateRoleAsync));
62+
await _locker.WaitAsync(lockerKey);
6263

6364
_logger.LogInformation(nameof(UpdateRoleAsync));
6465

@@ -132,7 +133,7 @@ private async Task UpdateRoleAsync(string? ids, CancellationToken cancellationTo
132133
}
133134
finally
134135
{
135-
_locker.Release(nameof(UpdateRoleAsync));
136+
_locker.Release(lockerKey);
136137
}
137138
}
138139

src/Netcorext.Auth.Authentication/Workers/Runners/RouteRunner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void Handler(string s, object o)
6060

6161
private async Task UpdateRouteAsync(string? ids, CancellationToken cancellationToken = default)
6262
{
63-
var lockerKey = ids.IsEmpty() ? nameof(UpdateRouteAsync) : nameof(UpdateRouteAsync) + "/" + string.Join('-', ids);
63+
var lockerKey = ids.IsEmpty() ? nameof(UpdateRouteAsync) : nameof(UpdateRouteAsync) + "/" + ids;
6464

6565
try
6666
{

src/Netcorext.Auth.Authentication/Workers/Runners/TokenRunner.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ public Task InvokeAsync(AuthWorker worker, CancellationToken cancellationToken =
3434
_logger.LogDebug("{Message}", nameof(TokenRunner));
3535

3636
_subscriber?.Dispose();
37-
3837
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_TOKEN_REVOKE_EVENT], Handler);
3938

4039
return Task.CompletedTask;
@@ -45,17 +44,19 @@ void Handler(string s, object o)
4544
}
4645
}
4746

48-
private async Task UpdateTokenAsync(string? data, CancellationToken cancellationToken = default)
47+
private async Task UpdateTokenAsync(string? ids, CancellationToken cancellationToken = default)
4948
{
50-
if (string.IsNullOrWhiteSpace(data)) return;
49+
if (string.IsNullOrWhiteSpace(ids)) return;
50+
51+
var lockerKey = ids.IsEmpty() ? nameof(UpdateTokenAsync) : nameof(UpdateTokenAsync) + "/" + ids;
5152

5253
try
5354
{
54-
await _locker.WaitAsync(nameof(UpdateTokenAsync));
55+
await _locker.WaitAsync(lockerKey);
5556

5657
_logger.LogInformation(nameof(UpdateTokenAsync));
5758

58-
var tokens = _serializer.Deserialize<string[]>(data);
59+
var tokens = _serializer.Deserialize<string[]>(ids);
5960

6061
if (tokens.IsEmpty()) return;
6162

@@ -70,7 +71,7 @@ private async Task UpdateTokenAsync(string? data, CancellationToken cancellation
7071
}
7172
finally
7273
{
73-
_locker.Release(nameof(UpdateTokenAsync));
74+
_locker.Release(lockerKey);
7475
}
7576
}
7677

src/Netcorext.Auth.Authentication/Workers/Runners/UserRunner.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,15 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4141
{
4242
_logger.LogDebug("{Message}", nameof(UserRunner));
4343

44-
_subscriber?.Dispose();
44+
await UpdateUserAsync(null, cancellationToken);
45+
await BlockUserAsync(null, cancellationToken);
4546

47+
_subscriber?.Dispose();
4648
_subscriber = _redis.Subscribe(new[]
4749
{
4850
_config.Queues[ConfigSettings.QUEUES_USER_CHANGE_EVENT]
4951
}, Handler);
5052

51-
await UpdateUserAsync(null, cancellationToken);
52-
await BlockUserAsync(null, cancellationToken);
53-
5453
return;
5554

5655
void Handler(string s, object o)
@@ -61,9 +60,11 @@ void Handler(string s, object o)
6160

6261
private async Task UpdateUserAsync(string? ids, CancellationToken cancellationToken = default)
6362
{
63+
var lockerKey = ids.IsEmpty() ? nameof(UpdateUserAsync) : nameof(UpdateUserAsync) + "/" + ids;
64+
6465
try
6566
{
66-
await _locker.WaitAsync(nameof(UpdateUserAsync));
67+
await _locker.WaitAsync(lockerKey);
6768

6869
_logger.LogInformation(nameof(UpdateUserAsync));
6970

@@ -106,15 +107,17 @@ private async Task UpdateUserAsync(string? ids, CancellationToken cancellationTo
106107
}
107108
finally
108109
{
109-
_locker.Release(nameof(UpdateUserAsync));
110+
_locker.Release(lockerKey);
110111
}
111112
}
112113

113114
private async Task BlockUserAsync(string? ids, CancellationToken cancellationToken = default)
114115
{
116+
var lockerKey = ids.IsEmpty() ? nameof(BlockUserAsync) : nameof(BlockUserAsync) + "/" + ids;
117+
115118
try
116119
{
117-
await _locker.WaitAsync(nameof(BlockUserAsync));
120+
await _locker.WaitAsync(lockerKey);
118121

119122
_logger.LogInformation(nameof(BlockUserAsync));
120123

@@ -151,7 +154,7 @@ private async Task BlockUserAsync(string? ids, CancellationToken cancellationTok
151154
}
152155
finally
153156
{
154-
_locker.Release(nameof(BlockUserAsync));
157+
_locker.Release(lockerKey);
155158
}
156159
}
157160

src/Netcorext.Auth.Gateway/Workers/Runners/RouteRunner.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public async Task InvokeAsync(AuthWorker worker, CancellationToken cancellationT
4848
await UpdateRouteAsync(null, cancellationToken);
4949

5050
_subscriber?.Dispose();
51-
5251
_subscriber = _redis.Subscribe(_config.Queues[ConfigSettings.QUEUES_ROUTE_CHANGE_EVENT], Handler);
5352

5453
return;
@@ -61,7 +60,7 @@ void Handler(string s, object o)
6160

6261
private async Task UpdateRouteAsync(string? ids, CancellationToken cancellationToken = default)
6362
{
64-
var lockerKey = ids.IsEmpty() ? nameof(UpdateRouteAsync) : nameof(UpdateRouteAsync) + "/" + string.Join('-', ids);
63+
var lockerKey = ids.IsEmpty() ? nameof(UpdateRouteAsync) : nameof(UpdateRouteAsync) + "/" + ids;
6564

6665
try
6766
{

0 commit comments

Comments
 (0)