Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions WebHDFS/WebHDFSClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ public class WebHDFSClient : IDisposable
/// <param name="Credentials">Optional credentials.</param>
/// <param name="Timeout">Optional timeout.</param>
/// <param name="CustomHttpMessageHandler">Optional HttpMessageHandler.</param>
public WebHDFSClient(string BaseAPI, NetworkCredential Credentials = null, TimeSpan? Timeout = null, HttpMessageHandler CustomHttpMessageHandler = null)
/// <param name="ExpectContinue">Expect server will return continue (100) before success</param>
public WebHDFSClient(string BaseAPI, NetworkCredential Credentials = null, TimeSpan? Timeout = null, HttpMessageHandler CustomHttpMessageHandler = null, bool? ExpectContinue = null)
{
_baseAPI = BaseAPI.TrimEnd('/');

Expand All @@ -39,13 +40,15 @@ public WebHDFSClient(string BaseAPI, NetworkCredential Credentials = null, TimeS
AllowAutoRedirect = false,
Credentials = Credentials,
PreAuthenticate = true

};
}

_httpClient = new HttpClient(httpMessageHandler)
{
Timeout = Timeout.GetValueOrDefault(TimeSpan.FromMinutes(5))
};
_httpClient.DefaultRequestHeaders.ExpectContinue = ExpectContinue.GetValueOrDefault();
}

/// <summary>
Expand Down Expand Up @@ -88,12 +91,22 @@ public async Task<bool> WriteStream(
WebHDFSHttpQueryParameter.SetBuffersize(query, buffersize);

string requestPath = _baseAPI + path + '?' + query;

var response = await _httpClient.PutAsync(requestPath, new ByteArrayContent(new byte[] {}));
if(response.StatusCode.Equals(HttpStatusCode.TemporaryRedirect))
{

var response2 = await _httpClient.PutAsync(response.Headers.Location, new StreamContent(stream));
response2.EnsureSuccessStatusCode();
try
{
response2.EnsureSuccessStatusCode();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}

return response2.IsSuccessStatusCode;
}
throw new InvalidOperationException("Should get a 307. Instead we got: " +
Expand Down