Skip to content

Commit 8451397

Browse files
committed
Fix gzip compression when running on .NET core (#2154)
- Content-Encoding was being added to the wrong header - Stream was being closed pre-maturely Closes #2150
1 parent b7fd1c9 commit 8451397

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

src/Elasticsearch.Net/Connection/HttpConnection-CoreFx.cs

+6-7
Original file line numberDiff line numberDiff line change
@@ -141,29 +141,28 @@ protected virtual HttpRequestMessage CreateRequestMessage(RequestData requestDat
141141
if (data != null)
142142
{
143143
var stream = requestData.MemoryStreamFactory.Create();
144-
144+
requestMessage.Content = new StreamContent(stream);
145145
if (requestData.HttpCompression)
146146
{
147-
using (var zipStream = new GZipStream(stream, CompressionMode.Compress))
148-
data.Write(zipStream, requestData.ConnectionSettings);
149-
150-
requestMessage.Headers.Add("Content-Encoding", "gzip");
147+
requestMessage.Content.Headers.Add("Content-Encoding", "gzip");
151148
requestMessage.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
152149
requestMessage.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
150+
using (var zipStream = new GZipStream(stream, CompressionMode.Compress, true))
151+
data.Write(zipStream, requestData.ConnectionSettings);
153152
}
154153
else
155154
data.Write(stream, requestData.ConnectionSettings);
156-
157155
stream.Position = 0;
158-
requestMessage.Content = new StreamContent(stream);
159156
}
160157
else
161158
{
162159
// Set content in order to set a Content-Type header.
163160
// Content gets diposed so can't be shared instance
164161
requestMessage.Content = new ByteArrayContent(new byte[0]);
165162
}
163+
166164
requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue(requestData.ContentType);
165+
167166
return requestMessage;
168167
}
169168

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using FluentAssertions;
2+
using Nest;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using Tests.Framework;
9+
using Tests.Framework.Integration;
10+
using Tests.Framework.MockData;
11+
using Xunit;
12+
13+
namespace Tests.ClientConcepts.Connection
14+
{
15+
[Collection(TypeOfCluster.ReadOnly)]
16+
public class HttpConnectionTests
17+
{
18+
ReadOnlyCluster _cluster;
19+
20+
public HttpConnectionTests(ReadOnlyCluster cluster, EndpointUsage usage)
21+
{
22+
_cluster = cluster;
23+
}
24+
25+
[I]
26+
public void HttpCompression()
27+
{
28+
var client = _cluster.Client(s => s.EnableHttpCompression());
29+
var response = client.Search<Project>(s => s
30+
.Index("project")
31+
.Query(q => q
32+
.Term("foo", "bar")
33+
)
34+
);
35+
response.IsValid.Should().BeTrue();
36+
}
37+
}
38+
}

src/Tests/Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@
554554
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RequestTimeoutsOverrides.doc.cs" />
555555
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RespectsAllowedStatusCode.doc.cs" />
556556
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RespectsForceNode.doc.cs" />
557+
<Compile Include="ClientConcepts\Connection\HttpConnectionTests.cs" />
557558
<Compile Include="ClientConcepts\HighLevel\Inference\DocumentPaths.doc.cs" />
558559
<Compile Include="ClientConcepts\HighLevel\Inference\FeaturesInference.doc.cs" />
559560
<Compile Include="ClientConcepts\HighLevel\Inference\FieldInference.doc.cs" />

0 commit comments

Comments
 (0)