Skip to content

Commit ee75316

Browse files
gmarzMpdreamz
authored andcommitted
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 6a64a2e commit ee75316

File tree

4 files changed

+46
-7
lines changed

4 files changed

+46
-7
lines changed

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,29 +144,28 @@ protected virtual HttpRequestMessage CreateRequestMessage(RequestData requestDat
144144
if (data != null)
145145
{
146146
var stream = requestData.MemoryStreamFactory.Create();
147-
147+
requestMessage.Content = new StreamContent(stream);
148148
if (requestData.HttpCompression)
149149
{
150-
using (var zipStream = new GZipStream(stream, CompressionMode.Compress))
151-
data.Write(zipStream, requestData.ConnectionSettings);
152-
153-
requestMessage.Headers.Add("Content-Encoding", "gzip");
150+
requestMessage.Content.Headers.Add("Content-Encoding", "gzip");
154151
requestMessage.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
155152
requestMessage.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
153+
using (var zipStream = new GZipStream(stream, CompressionMode.Compress, true))
154+
data.Write(zipStream, requestData.ConnectionSettings);
156155
}
157156
else
158157
data.Write(stream, requestData.ConnectionSettings);
159-
160158
stream.Position = 0;
161-
requestMessage.Content = new StreamContent(stream);
162159
}
163160
else
164161
{
165162
// Set content in order to set a Content-Type header.
166163
// Content gets diposed so can't be shared instance
167164
requestMessage.Content = new ByteArrayContent(new byte[0]);
168165
}
166+
169167
requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue(requestData.ContentType);
168+
170169
return requestMessage;
171170
}
172171

Lines changed: 38 additions & 0 deletions
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(IntegrationContext.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/Framework/Integration/Process/ElasticsearchNode.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ bool shieldEnabled
135135
$"es.path.repo={this.RepositoryPath}",
136136
$"es.script.inline=on",
137137
$"es.script.indexed=on",
138+
$"es.http.compression=true",
138139
$"es.node.{attr}testingcluster=true",
139140
$"es.shield.enabled=" + (shieldEnabled ? "true" : "false")
140141
};

src/Tests/Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@
541541
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RequestTimeoutsOverrides.doc.cs" />
542542
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RespectsAllowedStatusCode.doc.cs" />
543543
<Compile Include="ClientConcepts\ConnectionPooling\RequestOverrides\RespectsForceNode.doc.cs" />
544+
<Compile Include="ClientConcepts\Connection\HttpConnectionTests.cs" />
544545
<Compile Include="ClientConcepts\HighLevel\Caching\FieldResolverCacheTests.cs" />
545546
<Compile Include="ClientConcepts\HighLevel\Inference\DocumentPaths.doc.cs" />
546547
<Compile Include="ClientConcepts\HighLevel\Inference\FeaturesInference.doc.cs" />

0 commit comments

Comments
 (0)