Skip to content

Commit d2c32ce

Browse files
committed
added explicit IDisposable where it made sense and documented the life time scopes of the various moving parts
1 parent 4871202 commit d2c32ce

File tree

17 files changed

+647
-469
lines changed

17 files changed

+647
-469
lines changed

src/Elasticsearch.Net/Configuration/ConnectionConfiguration.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class ConnectionConfiguration : ConnectionConfiguration<ConnectionConfigu
1919
/// to elasticsearch
2020
/// </summary>
2121
/// <param name="uri">The root of the elasticsearch node we want to connect to. Defaults to http://localhost:9200</param>
22+
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
2223
public ConnectionConfiguration(Uri uri = null)
2324
: this(new SingleNodeConnectionPool(uri ?? new Uri("http://localhost:9200")))
2425
{ }
@@ -48,9 +49,6 @@ public ConnectionConfiguration(IConnectionPool connectionPool, IConnection conne
4849
: base(connectionPool, connection, serializerFactory)
4950
{ }
5051

51-
public void Dispose()
52-
{
53-
}
5452
}
5553

5654
[Browsable(false)]
@@ -134,11 +132,10 @@ private static void DefaultApiCallHandler(IApiCallDetails status) { }
134132
BasicAuthenticationCredentials _basicAuthCredentials;
135133
BasicAuthenticationCredentials IConnectionConfigurationValues.BasicAuthenticationCredentials => _basicAuthCredentials;
136134

137-
protected IElasticsearchSerializer _serializer;
135+
private readonly IElasticsearchSerializer _serializer;
138136
IElasticsearchSerializer IConnectionConfigurationValues.Serializer => _serializer;
139137

140138
private readonly IConnectionPool _connectionPool;
141-
private readonly Func<T, IElasticsearchSerializer> _serializerFactory;
142139
IConnectionPool IConnectionConfigurationValues.ConnectionPool => _connectionPool;
143140

144141
private readonly IConnection _connection;
@@ -151,9 +148,9 @@ protected ConnectionConfiguration(IConnectionPool connectionPool, IConnection co
151148
{
152149
this._connectionPool = connectionPool;
153150
this._connection = connection ?? new HttpConnection();
154-
this._serializerFactory = serializerFactory ?? (c=>this.DefaultSerializer((T)this));
151+
serializerFactory = serializerFactory ?? (c=>this.DefaultSerializer((T)this));
155152
// ReSharper disable once VirtualMemberCallInContructor
156-
this._serializer = this._serializerFactory((T)this);
153+
this._serializer = serializerFactory((T)this);
157154

158155
this._requestTimeout = ConnectionConfiguration.DefaultTimeout;
159156
this._sniffOnConnectionFault = true;
@@ -313,9 +310,12 @@ public T BasicAuthentication(string userName, string password)
313310
/// </summary>
314311
public T EnableHttpPipelining(bool enabled = true) => Assign(a => a._enableHttpPipelining = enabled);
315312

316-
public void Dispose()
313+
void IDisposable.Dispose() => this.DisposeManagedResources();
314+
315+
protected virtual void DisposeManagedResources()
317316
{
318317
this._connectionPool?.Dispose();
318+
this._connection?.Dispose();
319319
}
320320
}
321321
}

src/Elasticsearch.Net/Connection/HttpConnection.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,9 @@ private void HandleException<TReturn>(ResponseBuilder<TReturn> builder, WebExcep
194194
builder.Stream = response.GetResponseStream();
195195
}
196196
}
197+
198+
void IDisposable.Dispose() => this.DisposeManagedResources();
199+
200+
protected virtual void DisposeManagedResources() { }
197201
}
198202
}

src/Elasticsearch.Net/Connection/IConnection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
using System.Threading.Tasks;
1+
using System;
2+
using System.Threading.Tasks;
23

34
namespace Elasticsearch.Net
45
{
5-
public interface IConnection
6+
public interface IConnection : IDisposable
67
{
78
Task<ElasticsearchResponse<TReturn>> RequestAsync<TReturn>(RequestData requestData)
89
where TReturn : class;

src/Elasticsearch.Net/ConnectionPool/SingleNodeConnectionPool.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public SingleNodeConnectionPool(Uri uri, IDateTimeProvider dateTimeProvider = nu
3030

3131
public IEnumerable<Node> CreateView(Action<AuditEvent, Node> audit = null) => this.Nodes;
3232

33-
public void Dispose()
34-
{
35-
}
33+
void IDisposable.Dispose() => this.DisposeManagedResources();
34+
35+
protected virtual void DisposeManagedResources() { }
3636
}
3737
}

src/Elasticsearch.Net/ConnectionPool/SniffingConnectionPool.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ public override IEnumerable<Node> CreateView(Action<AuditEvent, Node> audit = nu
7373
}
7474
}
7575

76-
public override void Dispose()
76+
protected override void DisposeManagedResources()
7777
{
7878
this._readerWriter?.Dispose();
79-
base.Dispose();
79+
base.DisposeManagedResources();
8080
}
8181
}
8282
}

src/Elasticsearch.Net/ConnectionPool/StaticConnectionPool.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ public virtual IEnumerable<Node> CreateView(Action<AuditEvent, Node> audit = nul
9797
}
9898
}
9999

100-
public virtual void Dispose()
101-
{
102-
}
100+
void IDisposable.Dispose() => this.DisposeManagedResources();
101+
102+
protected virtual void DisposeManagedResources() { }
103103
}
104104
}

src/Elasticsearch.Net/ElasticsearchClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ public partial class ElasticsearchClient : IElasticsearchClient
1616
protected ITransport<IConnectionConfigurationValues> Transport { get; set; }
1717

1818
/// <summary>Instantiate a new low level elasticsearch client to http://localhost:9200</summary>
19+
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
1920
public ElasticsearchClient() : this(new Transport<IConnectionConfigurationValues>(new ConnectionConfiguration())) { }
2021

2122
/// <summary>Instantiate a new low level elasticsearch client using the specified settings</summary>
23+
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
2224
public ElasticsearchClient(IConnectionConfigurationValues settings) : this(new Transport<IConnectionConfigurationValues>(settings ?? new ConnectionConfiguration())) { }
2325

2426
/// <summary>
3.34 KB
Binary file not shown.

src/Elasticsearch.Net/Transport/ITransport.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
using System;
12
using System.Threading.Tasks;
23

34
namespace Elasticsearch.Net
45
{
5-
public interface ITransport<out TConnectionSettings> where TConnectionSettings : IConnectionConfigurationValues
6+
public interface ITransport<out TConnectionSettings> : IDisposable
7+
where TConnectionSettings : IConnectionConfigurationValues
68
{
79
TConnectionSettings Settings { get; }
810

0 commit comments

Comments
 (0)