-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
IBinding.cs
167 lines (151 loc) · 5.96 KB
/
IBinding.cs
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/* Copyright 2013-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver.Core.Servers;
namespace MongoDB.Driver.Core.Bindings
{
/// <summary>
/// Represents a read or write binding associated with a session.
/// </summary>
/// <seealso cref="System.IDisposable" />
public interface IBinding : IDisposable
{
/// <summary>
/// Gets the session.
/// </summary>
/// <value>
/// The session.
/// </value>
ICoreSessionHandle Session { get; }
}
/// <summary>
/// Represents a binding that determines which channel source gets used for read operations.
/// </summary>
public interface IReadBinding : IBinding
{
/// <summary>
/// Gets the read preference.
/// </summary>
/// <value>
/// The read preference.
/// </value>
ReadPreference ReadPreference { get; }
/// <summary>
/// Gets a channel source for read operations.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
IChannelSourceHandle GetReadChannelSource(CancellationToken cancellationToken);
/// <summary>
/// Gets a channel source for read operations.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
Task<IChannelSourceHandle> GetReadChannelSourceAsync(CancellationToken cancellationToken);
}
/// <summary>
/// Represents a binding that determines which channel source gets used for write operations.
/// </summary>
public interface IWriteBinding : IBinding
{
/// <summary>
/// Gets a channel source for write operations.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
IChannelSourceHandle GetWriteChannelSource(CancellationToken cancellationToken);
/// <summary>
/// Gets a channel source for write operations that may use a secondary.
/// </summary>
/// <param name="mayUseSecondary">The may use secondary criteria.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
IChannelSourceHandle GetWriteChannelSource(IMayUseSecondaryCriteria mayUseSecondary, CancellationToken cancellationToken);
/// <summary>
/// Gets a channel source for write operations.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
Task<IChannelSourceHandle> GetWriteChannelSourceAsync(CancellationToken cancellationToken);
/// <summary>
/// Gets a channel source for write operations that may use a secondary.
/// </summary>
/// <param name="mayUseSecondary">The may use secondary criteria.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A channel source.</returns>
Task<IChannelSourceHandle> GetWriteChannelSourceAsync(IMayUseSecondaryCriteria mayUseSecondary, CancellationToken cancellationToken);
}
/// <summary>
/// Represents a binding that can be used for both read and write operations.
/// </summary>
public interface IReadWriteBinding : IReadBinding, IWriteBinding
{
}
/// <summary>
/// Represents a handle to a read binding.
/// </summary>
public interface IReadBindingHandle : IReadBinding
{
/// <summary>
/// Returns a new handle to the underlying read binding.
/// </summary>
/// <returns>A read binding handle.</returns>
IReadBindingHandle Fork();
}
/// <summary>
/// Represents a handle to a write binding.
/// </summary>
public interface IWriteBindingHandle : IWriteBinding
{
/// <summary>
/// Returns a new handle to the underlying write binding.
/// </summary>
/// <returns>A write binding handle.</returns>
IWriteBindingHandle Fork();
}
/// <summary>
/// Represents a handle to a read-write binding.
/// </summary>
public interface IReadWriteBindingHandle : IReadWriteBinding, IReadBindingHandle, IWriteBindingHandle
{
/// <summary>
/// Returns a new handle to the underlying read-write binding.
/// </summary>
/// <returns>A read-write binding handle.</returns>
new IReadWriteBindingHandle Fork();
}
/// <summary>
/// Represents the criteria for using a secondary for operations that may use a secondary.
/// </summary>
public interface IMayUseSecondaryCriteria
{
/// <summary>
/// The effective read preference (initially the same as ReadPreference but possibly altered by the server selector).
/// </summary>
ReadPreference EffectiveReadPreference { get; set; }
/// <summary>
/// The read preference.
/// </summary>
ReadPreference ReadPreference { get; }
/// <summary>
/// Whether a particular secondary can be used.
/// </summary>
/// <param name="server">The server.</param>
/// <returns>True if the server can be used.</returns>
bool CanUseSecondary(ServerDescription server);
}
}