This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit eedd4dd2592bdd7e39ff8a1f7823bbfaa2484077
Author: Shad Storhaug <[email protected]>
AuthorDate: Fri Nov 5 09:54:03 2021 +0700

    Lucene.Net.Replicator.Http.HttpClientBase: Updated to include 4.8.1 changes
---
 src/Lucene.Net.Replicator/Http/HttpClientBase.cs | 72 +++++++++++++++---------
 1 file changed, 44 insertions(+), 28 deletions(-)

diff --git a/src/Lucene.Net.Replicator/Http/HttpClientBase.cs 
b/src/Lucene.Net.Replicator/Http/HttpClientBase.cs
index 0af893e..aea0c97 100644
--- a/src/Lucene.Net.Replicator/Http/HttpClientBase.cs
+++ b/src/Lucene.Net.Replicator/Http/HttpClientBase.cs
@@ -1,4 +1,6 @@
-using Lucene.Net.Support;
+using Lucene.Net.Diagnostics;
+using Lucene.Net.Support;
+using Lucene.Net.Util;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using System;
@@ -6,6 +8,7 @@ using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Runtime.ExceptionServices;
 using System.Text;
 
 namespace Lucene.Net.Replicator.Http
@@ -161,13 +164,20 @@ namespace Lucene.Net.Replicator.Http
                 //           and have these Sync methods with their caveats.
                 input = 
response.Content.ReadAsStreamAsync().ConfigureAwait(false).GetAwaiter().GetResult();
             }
-            catch (Exception)
+            catch (Exception t) when (t.IsThrowable())
             {
                 // the response stream is not an exception - could be an error 
in servlet.init().
-                response.EnsureSuccessStatusCode();
-                //Note: This is unreachable, but the compiler and resharper 
cant see that EnsureSuccessStatusCode always
-                //      throws an exception in this scenario. So it complains 
later on in the method.
-                throw; // LUCENENET: CA2200: Rethrow to preserve stack details 
(https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2200-rethrow-to-preserve-stack-details)
+                // LUCENENET: Check status code to see if we had an HTTP error
+                try
+                {
+                    response.EnsureSuccessStatusCode();
+                }
+                catch (HttpRequestException e)
+                {
+                    throw RuntimeException.Create(e);
+                }
+
+                throw RuntimeException.Create("Unknown error: ", t);
             }
 
             Exception exception;
@@ -177,22 +187,17 @@ namespace Lucene.Net.Replicator.Http
                 JsonSerializer serializer = 
JsonSerializer.Create(ReplicationService.JSON_SERIALIZER_SETTINGS);
                 exception = (Exception)serializer.Deserialize(new 
JsonTextReader(reader));
             }
-            catch (Exception e)
+            catch (Exception th) when (th.IsThrowable())
             {
                 //not likely
-                throw new HttpRequestException(string.Format("Failed to read 
exception object: {0} {1}", response.StatusCode, response.ReasonPhrase), e);
+                throw RuntimeException.Create(string.Format("Failed to read 
exception object: {0} {1}", response.StatusCode, response.ReasonPhrase), th);
             }
             finally
             {
                 input.Dispose();
             }
 
-            if (exception is IOException)
-            {
-                //NOTE: Preserve server stacktrace, but there are probably 
better options.
-                throw new IOException(exception.Message, exception);
-            }
-            throw new HttpRequestException(string.Format("unknown exception: 
{0} {1}", response.StatusCode, response.ReasonPhrase), exception);
+            Util.IOUtils.ReThrow(exception);
         }
 
         /// <summary>
@@ -281,28 +286,39 @@ namespace Lucene.Net.Replicator.Http
         /// </summary>
         protected virtual T DoAction<T>(HttpResponseMessage response, bool 
consume, Func<T> call)
         {
-            Exception error = new NotImplementedException();
+            Exception th = null;
             try
             {
                 return call();
             }
-            catch (IOException e)
-            {
-                error = e;
-            }
-            catch (Exception e)
+            catch (Exception t) when (t.IsThrowable())
             {
-                error = new IOException(e.Message, e);
+                th = t;
             }
             finally
             {
-                //JAVA: Had a TryCatch here and then used a EntityUtils class 
to consume the response,
-                //JAVA: Unsure of what that was trying to achieve it was left 
out.
-                //JAVA: This also means that right now this overload does 
nothing more than support the signature given by the Java ver.
-                //JAVA: Overall from a .NET perspective, this method is overly 
suspicious.
-                VerifyStatus(response);
+                try
+                {
+                    VerifyStatus(response);
+                }
+                finally
+                {
+                    if (consume)
+                    {
+                        try
+                        {
+                            
response.Content.ReadAsStreamAsync().ConfigureAwait(false).GetAwaiter().GetResult()?.Dispose();
+                        }
+                        finally
+                        {
+                            // ignoring on purpose
+                        }
+                    }
+                }
             }
-            throw error; // should not get here
+            if (Debugging.AssertsEnabled) Debugging.Assert(th != null); // 
extra safety - if we get here, it means the Func<T> failed
+            Util.IOUtils.ReThrow(th);
+            return default; // silly, if we're here, IOUtils.reThrow always 
throws an exception 
         }
 
         /// <summary>
@@ -311,7 +327,7 @@ namespace Lucene.Net.Replicator.Http
         /// </summary>
         protected virtual void Dispose(bool disposing)
         {
-            if (disposing)
+            if (disposing && !isDisposed)
             {
                 httpc.Dispose();
             }

Reply via email to