Skip to content

Commit 3f75444

Browse files
committed
mark INodeSessionCallback obsolete
1 parent 02c39ae commit 3f75444

File tree

19 files changed

+153
-18
lines changed

19 files changed

+153
-18
lines changed

src/Smdn.Net.MuninNode/Smdn.Net.MuninNode.DependencyInjection/MuninNodeBuilder.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class MuninNodeBuilder : IMuninNodeBuilder {
2323
#pragma warning restore CS0618
2424
private readonly List<Func<IServiceProvider, IPlugin>> pluginFactories = new(capacity: 4);
2525
private Func<IServiceProvider, IPluginProvider>? buildPluginProvider;
26-
private Func<IServiceProvider, INodeSessionCallback>? buildSessionCallback;
26+
[Obsolete] private Func<IServiceProvider, INodeSessionCallback>? buildSessionCallback;
2727
private Func<IServiceProvider, IMuninNodeListenerFactory>? buildListenerFactory;
2828

2929
/// <summary>
@@ -64,6 +64,7 @@ Func<IServiceProvider, IPluginProvider> buildPluginProvider
6464
this.buildPluginProvider = buildPluginProvider;
6565
}
6666

67+
[Obsolete]
6768
internal void SetSessionCallbackFactory(
6869
Func<IServiceProvider, INodeSessionCallback> buildSessionCallback
6970
)
@@ -100,7 +101,9 @@ public IMuninNode Build(IServiceProvider serviceProvider)
100101
pluginProvider: buildPluginProvider is null
101102
? new PluginProvider(
102103
plugins: pluginFactories.Select(factory => factory(serviceProvider)).ToList(),
104+
#pragma warning disable CS0612
103105
sessionCallback: buildSessionCallback?.Invoke(serviceProvider)
106+
#pragma warning restore CS0612
104107
)
105108
: buildPluginProvider.Invoke(serviceProvider),
106109
listenerFactory: buildListenerFactory?.Invoke(serviceProvider),
@@ -110,15 +113,22 @@ public IMuninNode Build(IServiceProvider serviceProvider)
110113

111114
private sealed class PluginProvider : IPluginProvider {
112115
public IReadOnlyCollection<IPlugin> Plugins { get; }
116+
117+
[Obsolete]
113118
public INodeSessionCallback? SessionCallback { get; }
114119

115120
public PluginProvider(
116121
IReadOnlyCollection<IPlugin> plugins,
122+
#pragma warning disable CS0618
117123
INodeSessionCallback? sessionCallback
124+
#pragma warning restore CS0618
118125
)
119126
{
120127
Plugins = plugins ?? throw new ArgumentNullException(nameof(plugins));
128+
129+
#pragma warning disable CS0612
121130
SessionCallback = sessionCallback;
131+
#pragma warning restore CS0612
122132
}
123133
}
124134

src/Smdn.Net.MuninNode/Smdn.Net.MuninNode.DependencyInjection/MuninNodeBuilderExtensions.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ Func<IServiceProvider, IPluginProvider> buildPluginProvider
106106
/// </remarks>
107107
public static TMuninNodeBuilder UseSessionCallback<TMuninNodeBuilder>(
108108
this TMuninNodeBuilder builder,
109+
#pragma warning disable CS0618
109110
INodeSessionCallback sessionCallback
111+
#pragma warning restore CS0618
110112
)
111113
where TMuninNodeBuilder : MuninNodeBuilder
112114
#pragma warning restore CS0419
@@ -135,12 +137,15 @@ public static TMuninNodeBuilder UseSessionCallback<TMuninNodeBuilder>(
135137
#pragma warning restore CS0419
136138
=> UseSessionCallback(
137139
builder: builder,
140+
#pragma warning disable CS0612
138141
buildSessionCallback: _ => new SessionCallbackFuncWrapper(
139142
reportSessionStartedAsyncFunc,
140143
reportSessionClosedAsyncFunc
141144
)
145+
#pragma warning restore CS0612
142146
);
143147

148+
[Obsolete]
144149
private sealed class SessionCallbackFuncWrapper(
145150
Func<string, CancellationToken, ValueTask>? reportSessionStartedAsyncFunc,
146151
Func<string, CancellationToken, ValueTask>? reportSessionClosedAsyncFunc
@@ -162,7 +167,9 @@ public ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken ca
162167
/// </remarks>
163168
public static TMuninNodeBuilder UseSessionCallback<TMuninNodeBuilder>(
164169
this TMuninNodeBuilder builder,
170+
#pragma warning disable CS0618
165171
Func<IServiceProvider, INodeSessionCallback> buildSessionCallback
172+
#pragma warning restore CS0618
166173
)
167174
where TMuninNodeBuilder : MuninNodeBuilder
168175
#pragma warning restore CS0419
@@ -172,7 +179,9 @@ Func<IServiceProvider, INodeSessionCallback> buildSessionCallback
172179
if (buildSessionCallback is null)
173180
throw new ArgumentNullException(nameof(buildSessionCallback));
174181

182+
#pragma warning disable CS0612
175183
builder.SetSessionCallbackFactory(buildSessionCallback);
184+
#pragma warning restore CS0612
176185

177186
return builder;
178187
}

src/Smdn.Net.MuninNode/Smdn.Net.MuninNode/LocalNode.Create.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ partial class LocalNode {
2020
#pragma warning restore IDE0040
2121
private class ReadOnlyCollectionPluginProvider : IPluginProvider {
2222
public IReadOnlyCollection<IPlugin> Plugins { get; }
23+
24+
[Obsolete]
2325
public INodeSessionCallback? SessionCallback => null;
2426

2527
public ReadOnlyCollectionPluginProvider(IReadOnlyCollection<IPlugin> plugins)

src/Smdn.Net.MuninNode/Smdn.Net.MuninNode/NodeBase.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,13 +562,14 @@ CancellationToken cancellationToken
562562
LogSessionStarted(Logger, null);
563563

564564
try {
565-
// TODO: rename INodeSessionCallback to ITransactionCallback
565+
#pragma warning disable CS0612,CS0618
566566
if (PluginProvider.SessionCallback is INodeSessionCallback pluginProviderSessionCallback)
567567
await pluginProviderSessionCallback.ReportSessionStartedAsync(sessionId, cancellationToken).ConfigureAwait(false);
568568

569569
foreach (var pluginSessionCallback in EnumerateSessionCallbackForPlugins(PluginProvider)) {
570570
await pluginSessionCallback.ReportSessionStartedAsync(sessionId, cancellationToken).ConfigureAwait(false);
571571
}
572+
#pragma warning restore CS0612,CS0618
572573

573574
// https://docs.microsoft.com/ja-jp/dotnet/standard/io/pipelines
574575
var pipe = new Pipe();
@@ -582,17 +583,22 @@ await Task.WhenAll(
582583
LogSessionClosed(Logger, null);
583584
}
584585
finally {
586+
#pragma warning disable CS0612,CS0618
585587
foreach (var pluginSessionCallback in EnumerateSessionCallbackForPlugins(PluginProvider)) {
586588
await pluginSessionCallback.ReportSessionClosedAsync(sessionId, cancellationToken).ConfigureAwait(false);
587589
}
588590

589591
if (PluginProvider.SessionCallback is INodeSessionCallback pluginProviderSessionCallback)
590592
await pluginProviderSessionCallback.ReportSessionClosedAsync(sessionId, cancellationToken).ConfigureAwait(false);
593+
#pragma warning restore CS0612,CS0618
591594

592595
await protocolHandler.HandleTransactionEndAsync(client, cancellationToken).ConfigureAwait(false);
593596
}
594597

598+
[Obsolete]
599+
#pragma warning disable CS0618
595600
static IEnumerable<INodeSessionCallback> EnumerateSessionCallbackForPlugins(IPluginProvider pluginProvider)
601+
#pragma warning restore CS0618
596602
{
597603
foreach (var plugin in pluginProvider.EnumeratePlugins(flattenMultigraphPlugins: true)) {
598604
if (plugin.SessionCallback is INodeSessionCallback pluginSessionCallback)

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/AggregatePluginProvider.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,19 @@ namespace Smdn.Net.MuninPlugin;
1717
#pragma warning disable IDE0055
1818
public sealed class AggregatePluginProvider :
1919
ReadOnlyCollection<IPluginProvider>,
20+
#pragma warning disable CS0618
2021
INodeSessionCallback,
21-
IPluginProvider
22+
#pragma warning restore CS0618
23+
IPluginProvider,
24+
ITransactionCallback
2225
{
2326
#pragma warning restore IDE0055
2427
/*
2528
* IPluginProvider
2629
*/
2730
public IReadOnlyCollection<IPlugin> Plugins { get; }
2831

32+
[Obsolete]
2933
INodeSessionCallback? IPluginProvider.SessionCallback => this;
3034

3135
/*
@@ -37,6 +41,7 @@ public AggregatePluginProvider(IList<IPluginProvider> pluginProviders)
3741
Plugins = Items.SelectMany(static provider => provider.Plugins).ToList();
3842
}
3943

44+
#pragma warning disable CS0618
4045
/*
4146
* INodeSessionCallback
4247
*/
@@ -59,4 +64,28 @@ async ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId,
5964
await sessionCallback.ReportSessionClosedAsync(sessionId, cancellationToken).ConfigureAwait(false);
6065
}
6166
}
67+
#pragma warning restore CS0618
68+
69+
/*
70+
* ITransactionCallback
71+
*/
72+
async ValueTask ITransactionCallback.StartTransactionAsync(CancellationToken cancellationToken)
73+
{
74+
foreach (var provider in Items) {
75+
cancellationToken.ThrowIfCancellationRequested();
76+
77+
if (provider is ITransactionCallback transactionCallback)
78+
await transactionCallback.StartTransactionAsync(cancellationToken).ConfigureAwait(false);
79+
}
80+
}
81+
82+
async ValueTask ITransactionCallback.EndTransactionAsync(CancellationToken cancellationToken)
83+
{
84+
foreach (var provider in Items) {
85+
cancellationToken.ThrowIfCancellationRequested();
86+
87+
if (provider is ITransactionCallback transactionCallback)
88+
await transactionCallback.EndTransactionAsync(cancellationToken).ConfigureAwait(false);
89+
}
90+
}
6291
}

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/INodeSessionCallback.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22
// SPDX-License-Identifier: MIT
33

4+
using System;
45
using System.Threading;
56
using System.Threading.Tasks;
67

@@ -9,6 +10,7 @@ namespace Smdn.Net.MuninPlugin;
910
/// <summary>
1011
/// Defines the callbacks when a request session from the <c>munin-update</c> starts or ends.
1112
/// </summary>
13+
[Obsolete(message: ObsoleteMessage.TypeReference)]
1214
public interface INodeSessionCallback {
1315
/// <summary>
1416
/// Implements a callback to be called when <c>munin-update</c> starts a session.
@@ -25,4 +27,15 @@ public interface INodeSessionCallback {
2527
/// <param name="sessionId">A unique ID that <see cref="MuninNode.NodeBase"/> associates with the session.</param>
2628
/// <param name="cancellationToken">The <see cref="CancellationToken" /> to monitor for cancellation requests.</param>
2729
ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken);
30+
31+
internal static class ObsoleteMessage {
32+
public const string TypeReference =
33+
$"{nameof(INodeSessionCallback)} is deprecated and will be removed in the next major version release. " +
34+
$"Use ${nameof(ITransactionCallback)} interface instead.";
35+
36+
public const string SessionCallbackProperty =
37+
$"{nameof(INodeSessionCallback)} is deprecated and will be removed in the next major version release. " +
38+
$"Instead of setting an object that implements ${nameof(INodeSessionCallback)} to the property, " +
39+
$"implement the ${nameof(ITransactionCallback)} interface to the type itself.";
40+
}
2841
}

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/IPlugin.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22
// SPDX-License-Identifier: MIT
33

4+
using System;
5+
46
namespace Smdn.Net.MuninPlugin;
57

68
/// <summary>
@@ -25,5 +27,8 @@ public interface IPlugin {
2527
/// <remarks>Callbacks of this interface can be used to initiate bulk collection of field values.</remarks>
2628
/// <seealso cref="INodeSessionCallback"/>
2729
/// <seealso cref="MuninNode.NodeBase"/>
30+
#pragma warning disable CS0618
31+
[Obsolete(message: INodeSessionCallback.ObsoleteMessage.SessionCallbackProperty)]
32+
#pragma warning restore CS0618
2833
INodeSessionCallback? SessionCallback { get; }
2934
}

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/IPluginProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22
// SPDX-License-Identifier: MIT
33

4+
using System;
45
using System.Collections.Generic;
56

67
namespace Smdn.Net.MuninPlugin;
@@ -21,5 +22,8 @@ public interface IPluginProvider {
2122
/// <summary>Gets a <see cref="INodeSessionCallback"/>, which defines the callbacks when a request session from the <c>munin-update</c> starts or ends, such as fetching data or getting configurations.</summary>
2223
/// <seealso cref="INodeSessionCallback"/>
2324
/// <seealso cref="MuninNode.NodeBase"/>
25+
#pragma warning disable CS0618
26+
[Obsolete(message: INodeSessionCallback.ObsoleteMessage.SessionCallbackProperty)]
27+
#pragma warning restore CS0618
2428
INodeSessionCallback? SessionCallback { get; }
2529
}

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/MultigraphPlugin.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class MultigraphPlugin : IMultigraphPlugin {
1919
public IPluginGraphAttributes GraphAttributes => throw new NotSupportedException();
2020

2121
/// <inheritdoc cref="IPlugin.SessionCallback"/>
22+
#pragma warning disable CS0618
23+
[Obsolete(message: INodeSessionCallback.ObsoleteMessage.SessionCallbackProperty)]
24+
#pragma warning restore CS0618
2225
public INodeSessionCallback? SessionCallback => throw new NotSupportedException();
2326

2427
public MultigraphPlugin(string name, IReadOnlyCollection<IPlugin> plugins)

src/Smdn.Net.MuninNode/Smdn.Net.MuninPlugin/Plugin.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,16 @@
88

99
namespace Smdn.Net.MuninPlugin;
1010

11-
public class Plugin : IPlugin, IPluginDataSource, INodeSessionCallback {
11+
#pragma warning disable IDE0055
12+
public class Plugin :
13+
IPlugin,
14+
IPluginDataSource,
15+
#pragma warning disable CS0618
16+
INodeSessionCallback,
17+
#pragma warning restore CS0618
18+
ITransactionCallback
19+
{
20+
#pragma warning restore IDE0055
1221
public string Name { get; }
1322

1423
public PluginGraphAttributes GraphAttributes { get; }
@@ -21,6 +30,9 @@ public class Plugin : IPlugin, IPluginDataSource, INodeSessionCallback {
2130

2231
IReadOnlyCollection<IPluginField> IPluginDataSource.Fields => Fields;
2332

33+
#pragma warning disable CS0618
34+
[Obsolete(message: INodeSessionCallback.ObsoleteMessage.SessionCallbackProperty)]
35+
#pragma warning restore CS0618
2436
INodeSessionCallback? IPlugin.SessionCallback => this;
2537
#pragma warning restore CA1033
2638

@@ -37,15 +49,31 @@ IReadOnlyCollection<IPluginField> fields
3749
Fields = fields ?? throw new ArgumentNullException(nameof(fields));
3850
}
3951

52+
[Obsolete]
4053
ValueTask INodeSessionCallback.ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken)
4154
=> ReportSessionStartedAsync(sessionId, cancellationToken);
4255

56+
[Obsolete($"This method will be removed in the next major version release. Override {nameof(StartTransactionAsync)} instead.")]
4357
protected virtual ValueTask ReportSessionStartedAsync(string sessionId, CancellationToken cancellationToken)
4458
=> default; // do nothing in this class
4559

60+
[Obsolete]
4661
ValueTask INodeSessionCallback.ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken)
4762
=> ReportSessionClosedAsync(sessionId, cancellationToken);
4863

64+
[Obsolete($"This method will be removed in the next major version release. Override {nameof(EndTransactionAsync)} instead.")]
4965
protected virtual ValueTask ReportSessionClosedAsync(string sessionId, CancellationToken cancellationToken)
5066
=> default; // do nothing in this class
67+
68+
ValueTask ITransactionCallback.StartTransactionAsync(CancellationToken cancellationToken)
69+
=> StartTransactionAsync(cancellationToken);
70+
71+
protected virtual ValueTask StartTransactionAsync(CancellationToken cancellationToken)
72+
=> default; // do nothing in this class
73+
74+
ValueTask ITransactionCallback.EndTransactionAsync(CancellationToken cancellationToken)
75+
=> EndTransactionAsync(cancellationToken);
76+
77+
protected virtual ValueTask EndTransactionAsync(CancellationToken cancellationToken)
78+
=> default; // do nothing in this class
5179
}

0 commit comments

Comments
 (0)