change share of almost empty class httpclient, to just share of used SocketsHttpHandler, This simpifies handling of timeout, otherwise problematic

This commit is contained in:
UbitUmarov
2023-05-26 20:27:24 +01:00
parent c90858576c
commit e950c502ad
13 changed files with 108 additions and 127 deletions

View File

@@ -42,6 +42,7 @@ using Nwc.XmlRpc;
using log4net;
using OpenSim.Services.Connectors.Simulation;
using System.Net.Http;
namespace OpenSim.Services.Connectors.Hypergrid
{
@@ -94,7 +95,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(info.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(info.ServerURI, hclient);
}
catch (Exception e)
{
@@ -230,7 +232,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(gatekeeper.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(gatekeeper.ServerURI, hclient);
}
catch (Exception e)
{

View File

@@ -41,6 +41,7 @@ using OpenMetaverse.StructuredData;
using log4net;
using Nwc.XmlRpc;
using Nini.Config;
using System.Net.Http;
namespace OpenSim.Services.Connectors.Hypergrid
{
@@ -162,7 +163,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(m_ServerURL, hclient);
}
catch (Exception e)
{
@@ -336,7 +338,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 6000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(m_ServerURL, hclient);
}
catch
{
@@ -408,7 +411,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(m_ServerURL, hclient);
}
catch
{
@@ -558,7 +562,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
response = request.Send(m_ServerURL, hclient);
}
catch (Exception e)
{

View File

@@ -35,6 +35,7 @@ using Nwc.XmlRpc;
using log4net;
using OpenSim.Framework;
using System.Net.Http;
namespace OpenSim.Services.Connectors.InstantMessage
{
@@ -60,8 +61,8 @@ namespace OpenSim.Services.Connectors.InstantMessage
XmlRpcRequest GridReq = new XmlRpcRequest("grid_instant_message", SendParams);
try
{
XmlRpcResponse GridResp = GridReq.Send(url, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
XmlRpcResponse GridResp = GridReq.Send(url, hclient);
Hashtable responseData = (Hashtable)GridResp.Value;

View File

@@ -62,7 +62,7 @@ namespace OpenSim.Services.Connectors
/// <remarks>
/// In this case, -1 is default timeout (100 seconds), not infinite.
/// </remarks>
private int m_requestTimeoutSecs = -1;
private int m_requestTimeout = -1;
private readonly string m_configName = "InventoryService";
private const double CACHE_EXPIRATION_SECONDS = 30.0;
@@ -114,7 +114,7 @@ namespace OpenSim.Services.Connectors
else
m_InventoryURL = serviceURI + "/xinventory";
m_requestTimeoutSecs = config.GetInt("RemoteRequestTimeout", m_requestTimeoutSecs);
m_requestTimeout = 1000 * config.GetInt("RemoteRequestTimeout", -1);
StatsManager.RegisterStat(
new Stat(
@@ -761,10 +761,10 @@ namespace OpenSim.Services.Connectors
int rcvlen = 0;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
CancellationTokenSource cancellationToken = null;
HttpClient client = null;
try
{
HttpClient client = WebUtil.SharedHttpClientWithRedir;
client = WebUtil.GetNewGlobalHttpClient(m_requestTimeout);
request = new(HttpMethod.Post, m_InventoryURL);
@@ -782,9 +782,6 @@ namespace OpenSim.Services.Connectors
request.Headers.ExpectContinue = false;
request.Headers.TransferEncodingChunked = false;
if (m_requestTimeoutSecs > 0)
cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(m_requestTimeoutSecs));
byte[] data = Util.UTF8NBGetbytes(obj);
sendlen = data.Length;
@@ -792,10 +789,7 @@ namespace OpenSim.Services.Connectors
request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
request.Content.Headers.TryAddWithoutValidation("Content-Length", sendlen.ToString());
if (cancellationToken is null)
responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
else
responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
if ((responseMessage.Content.Headers.ContentLength is long contentLength) && contentLength != 0)
@@ -813,7 +807,7 @@ namespace OpenSim.Services.Connectors
{
request?.Dispose();
responseMessage?.Dispose();
cancellationToken?.Dispose();
client?.Dispose();
}
ticks = Util.EnvironmentTickCountSubtract(ticks);

View File

@@ -38,6 +38,7 @@ using OpenSim.Services.Interfaces;
using OpenMetaverse;
using Nwc.XmlRpc;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
using System.Net.Http;
namespace OpenSim.Services.Connectors
{
@@ -92,7 +93,8 @@ namespace OpenSim.Services.Connectors
paramList.Add(hash);
XmlRpcRequest request = new XmlRpcRequest("land_data", paramList);
XmlRpcResponse response = request.Send(info.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
XmlRpcResponse response = request.Send(info.ServerURI, hclient);
if (response.IsFault)
{
m_log.ErrorFormat("[LAND CONNECTOR]: remote call returned an error: {0}", response.FaultString);

View File

@@ -108,10 +108,10 @@ namespace OpenSim.Services.Connectors
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
CancellationTokenSource cancellationToken = null;
HttpClient client = null;
try
{
HttpClient client = WebUtil.SharedHttpClientWithRedir;
client = WebUtil.GetNewGlobalHttpClient(10000);
request = new(HttpMethod.Post, uri);
request.Headers.ExpectContinue = false;
request.Headers.TransferEncodingChunked = false;
@@ -127,10 +127,9 @@ namespace OpenSim.Services.Connectors
request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/json");
request.Content.Headers.TryAddWithoutValidation("Content-Length", buffer.Length.ToString());
cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(10));
//m_log.InfoFormat("[REST COMMS]: Posted HelloNeighbour request to remote sim {0}", uri);
responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead, cancellationToken.Token);
responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead);
responseMessage.EnsureSuccessStatusCode();
//using StreamReader sr = new(responseMessage.Content.ReadAsStream());
@@ -149,7 +148,7 @@ namespace OpenSim.Services.Connectors
{
request?.Dispose();
responseMessage?.Dispose();
cancellationToken?.Dispose();
client?.Dispose();
}
return false;
}