Skip to content

Commit 1902aca

Browse files
Mpdreamzrusscam
authored andcommitted
Allow MemoryStreamFactory to be pluggable (#4202)
(cherry picked from commit 0b23cd7)
1 parent ed78eb0 commit 1902aca

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

src/Auxiliary/Elasticsearch.Net.VirtualizedCluster/FixedPipelineFactory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public class FixedPipelineFactory : IRequestPipelineFactory
55
public FixedPipelineFactory(IConnectionConfigurationValues connectionSettings, IDateTimeProvider dateTimeProvider)
66
{
77
DateTimeProvider = dateTimeProvider;
8-
MemoryStreamFactory = new MemoryStreamFactory();
8+
MemoryStreamFactory = RecyclableMemoryStreamFactory.Default;
99

1010
Settings = connectionSettings;
1111
Pipeline = Create(Settings, DateTimeProvider, MemoryStreamFactory, new SearchRequestParameters());
@@ -16,7 +16,7 @@ public FixedPipelineFactory(IConnectionConfigurationValues connectionSettings, I
1616
public IRequestPipeline Pipeline { get; }
1717

1818
private IDateTimeProvider DateTimeProvider { get; }
19-
private MemoryStreamFactory MemoryStreamFactory { get; }
19+
private IMemoryStreamFactory MemoryStreamFactory { get; }
2020
private IConnectionConfigurationValues Settings { get; }
2121

2222
private Transport<IConnectionConfigurationValues> Transport =>

src/Elasticsearch.Net/Configuration/ConnectionConfiguration.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ public abstract class ConnectionConfiguration<T> : IConnectionConfigurationValue
158158
private bool _sniffOnStartup;
159159
private bool _throwExceptions;
160160
private bool _transferEncodingChunked;
161+
private IMemoryStreamFactory _memoryStreamFactory = RecyclableMemoryStreamFactory.Default;
161162

162163
private string _userAgent = ConnectionConfiguration.DefaultUserAgent;
163164
private Func<HttpMethod, int, bool> _statusCodeToResponseSuccess;
@@ -209,7 +210,7 @@ protected ConnectionConfiguration(IConnectionPool connectionPool, IConnection co
209210
TimeSpan? IConnectionConfigurationValues.MaxDeadTimeout => _maxDeadTimeout;
210211
int? IConnectionConfigurationValues.MaxRetries => _maxRetries;
211212
TimeSpan? IConnectionConfigurationValues.MaxRetryTimeout => _maxRetryTimeout;
212-
IMemoryStreamFactory IConnectionConfigurationValues.MemoryStreamFactory { get; } = RecyclableMemoryStreamFactory.Default;
213+
IMemoryStreamFactory IConnectionConfigurationValues.MemoryStreamFactory => _memoryStreamFactory;
213214

214215
Func<Node, bool> IConnectionConfigurationValues.NodePredicate => _nodePredicate;
215216
Action<IApiCallDetails> IConnectionConfigurationValues.OnRequestCompleted => _completedRequestHandler;
@@ -557,6 +558,11 @@ public T SkipDeserializationForStatusCodes(params int[] statusCodes) =>
557558
/// </summary>
558559
public T TransferEncodingChunked(bool transferEncodingChunked = true) => Assign(transferEncodingChunked, (a, v) => a._transferEncodingChunked = v);
559560

561+
/// <summary>
562+
/// The memory stream factory to use, defaults to <see cref="RecyclableMemoryStreamFactory.Default"/>
563+
/// </summary>
564+
public T MemoryStreamFactory(IMemoryStreamFactory memoryStreamFactory) => Assign(memoryStreamFactory, (a, v) => a._memoryStreamFactory = v);
565+
560566
protected virtual void DisposeManagedResources()
561567
{
562568
_connectionPool?.Dispose();

src/Elasticsearch.Net/Providers/MemoryStreamFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Elasticsearch.Net
44
{
5+
// TODO we use this in some places but its no longer clear to me why need to circumvent RecyclableMemoryStream in some cases
56
/// <summary>
67
/// A factory for creating memory streams using instances of <see cref="MemoryStream" />
78
/// </summary>

src/Elasticsearch.Net/Serialization/ElasticsearchSerializerExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static byte[] SerializeToBytes<T>(
2727
SerializationFormatting formatting = SerializationFormatting.None
2828
)
2929
{
30-
memoryStreamFactory = memoryStreamFactory ?? RecyclableMemoryStreamFactory.Default;
30+
memoryStreamFactory ??= RecyclableMemoryStreamFactory.Default;
3131
using (var ms = memoryStreamFactory.Create())
3232
{
3333
serializer.Serialize(data, ms, formatting);
@@ -58,7 +58,7 @@ public static string SerializeToString<T>(
5858
SerializationFormatting formatting = SerializationFormatting.None
5959
)
6060
{
61-
memoryStreamFactory = memoryStreamFactory ?? RecyclableMemoryStreamFactory.Default;
61+
memoryStreamFactory ??= RecyclableMemoryStreamFactory.Default;
6262
using (var ms = memoryStreamFactory.Create())
6363
{
6464
serializer.Serialize(data, ms, formatting);

0 commit comments

Comments
 (0)