mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	removed some code we dont need as not expecting any errors so should just throw an exception to the global handler
This commit is contained in:
		@@ -41,13 +41,13 @@ namespace Ocelot.Errors.Middleware
 | 
			
		||||
 | 
			
		||||
                var message = CreateMessage(context, e);
 | 
			
		||||
                _logger.LogError(message, e);
 | 
			
		||||
                await SetInternalServerErrorOnResponse(context);
 | 
			
		||||
                SetInternalServerErrorOnResponse(context);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _logger.LogDebug("ocelot pipeline finished");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task SetInternalServerErrorOnResponse(HttpContext context)
 | 
			
		||||
        private void SetInternalServerErrorOnResponse(HttpContext context)
 | 
			
		||||
        {
 | 
			
		||||
            context.Response.OnStarting(x =>
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,6 @@ namespace Ocelot.LoadBalancer.LoadBalancers
 | 
			
		||||
    public interface ILoadBalancer
 | 
			
		||||
    {
 | 
			
		||||
        Task<Response<HostAndPort>> Lease();
 | 
			
		||||
        Response Release(HostAndPort hostAndPort);
 | 
			
		||||
        void Release(HostAndPort hostAndPort);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -53,7 +53,7 @@ namespace Ocelot.LoadBalancer.LoadBalancers
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Response Release(HostAndPort hostAndPort)
 | 
			
		||||
        public void Release(HostAndPort hostAndPort)
 | 
			
		||||
        {
 | 
			
		||||
            lock(_syncLock)
 | 
			
		||||
            {
 | 
			
		||||
@@ -69,8 +69,6 @@ namespace Ocelot.LoadBalancer.LoadBalancers
 | 
			
		||||
                    _leases.Add(replacementLease);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return new OkResponse();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Lease AddConnection(Lease lease)
 | 
			
		||||
 
 | 
			
		||||
@@ -17,13 +17,12 @@ namespace Ocelot.LoadBalancer.LoadBalancers
 | 
			
		||||
 | 
			
		||||
        public async Task<Response<HostAndPort>> Lease()
 | 
			
		||||
        {
 | 
			
		||||
            var service = _services.FirstOrDefault();
 | 
			
		||||
            var service = await Task.FromResult(_services.FirstOrDefault());
 | 
			
		||||
            return new OkResponse<HostAndPort>(service.HostAndPort);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Response Release(HostAndPort hostAndPort)
 | 
			
		||||
        public void Release(HostAndPort hostAndPort)
 | 
			
		||||
        {
 | 
			
		||||
            return new OkResponse();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,14 +22,13 @@ namespace Ocelot.LoadBalancer.LoadBalancers
 | 
			
		||||
                _last = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var next = _services[_last];
 | 
			
		||||
            var next = await Task.FromResult(_services[_last]);
 | 
			
		||||
            _last++;
 | 
			
		||||
            return new OkResponse<HostAndPort>(next.HostAndPort);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Response Release(HostAndPort hostAndPort)
 | 
			
		||||
        public void Release(HostAndPort hostAndPort)
 | 
			
		||||
        {
 | 
			
		||||
            return new OkResponse();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -31,14 +31,14 @@ namespace Ocelot.LoadBalancer.Middleware
 | 
			
		||||
        {
 | 
			
		||||
            _logger.LogDebug("started calling load balancing middleware");
 | 
			
		||||
 | 
			
		||||
            var getLoadBalancer = _loadBalancerHouse.Get(DownstreamRoute.ReRoute.LoadBalancerKey);
 | 
			
		||||
            if(getLoadBalancer.IsError)
 | 
			
		||||
            var loadBalancer = _loadBalancerHouse.Get(DownstreamRoute.ReRoute.LoadBalancerKey);
 | 
			
		||||
            if(loadBalancer.IsError)
 | 
			
		||||
            {
 | 
			
		||||
                SetPipelineError(getLoadBalancer.Errors);
 | 
			
		||||
                SetPipelineError(loadBalancer.Errors);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var hostAndPort = await getLoadBalancer.Data.Lease();
 | 
			
		||||
            var hostAndPort = await loadBalancer.Data.Lease();
 | 
			
		||||
            if(hostAndPort.IsError)
 | 
			
		||||
            { 
 | 
			
		||||
                SetPipelineError(hostAndPort.Errors);
 | 
			
		||||
@@ -53,11 +53,12 @@ namespace Ocelot.LoadBalancer.Middleware
 | 
			
		||||
            {
 | 
			
		||||
                await _next.Invoke(context);
 | 
			
		||||
 | 
			
		||||
                getLoadBalancer.Data.Release(hostAndPort.Data);
 | 
			
		||||
                loadBalancer.Data.Release(hostAndPort.Data);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
                getLoadBalancer.Data.Release(hostAndPort.Data);
 | 
			
		||||
                loadBalancer.Data.Release(hostAndPort.Data);
 | 
			
		||||
                 
 | 
			
		||||
                 _logger.LogDebug("error calling next middleware, exception will be thrown to global handler");
 | 
			
		||||
                throw;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ namespace Ocelot.Responder
 | 
			
		||||
            _removeOutputHeaders = removeOutputHeaders;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Response> SetResponseOnHttpContext(HttpContext context, HttpResponseMessage response)
 | 
			
		||||
        public async Task SetResponseOnHttpContext(HttpContext context, HttpResponseMessage response)
 | 
			
		||||
        {
 | 
			
		||||
            _removeOutputHeaders.Remove(response.Headers);
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,6 @@ namespace Ocelot.Responder
 | 
			
		||||
            {
 | 
			
		||||
                await stream.CopyToAsync(context.Response.Body);
 | 
			
		||||
            }
 | 
			
		||||
            return new OkResponse();       
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void AddHeaderIfDoesntExist(HttpContext context, KeyValuePair<string, IEnumerable<string>> httpResponseHeader)
 | 
			
		||||
@@ -67,14 +66,13 @@ namespace Ocelot.Responder
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Response> SetErrorResponseOnContext(HttpContext context, int statusCode)
 | 
			
		||||
        public void SetErrorResponseOnContext(HttpContext context, int statusCode)
 | 
			
		||||
        {
 | 
			
		||||
            context.Response.OnStarting(x =>
 | 
			
		||||
            {
 | 
			
		||||
                context.Response.StatusCode = statusCode;
 | 
			
		||||
                return Task.CompletedTask;
 | 
			
		||||
            }, context);
 | 
			
		||||
            return new OkResponse();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
using System.Net.Http;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Microsoft.AspNetCore.Http;
 | 
			
		||||
using Ocelot.Responses;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.Responder
 | 
			
		||||
{
 | 
			
		||||
    public interface IHttpResponder
 | 
			
		||||
    {
 | 
			
		||||
        Task<Response> SetResponseOnHttpContext(HttpContext context, HttpResponseMessage response);
 | 
			
		||||
        Task<Response> SetErrorResponseOnContext(HttpContext context, int statusCode);
 | 
			
		||||
        Task SetResponseOnHttpContext(HttpContext context, HttpResponseMessage response);
 | 
			
		||||
        void SetErrorResponseOnContext(HttpContext context, int statusCode);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,34 +46,27 @@ namespace Ocelot.Responder.Middleware
 | 
			
		||||
 | 
			
		||||
                _logger.LogDebug("received errors setting error response");
 | 
			
		||||
 | 
			
		||||
                await SetErrorResponse(context, errors);
 | 
			
		||||
                SetErrorResponse(context, errors);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogDebug("no pipeline error, setting response");
 | 
			
		||||
 | 
			
		||||
                var setResponse = await _responder.SetResponseOnHttpContext(context, HttpResponseMessage);
 | 
			
		||||
 | 
			
		||||
                if (setResponse.IsError)
 | 
			
		||||
                {
 | 
			
		||||
                    _logger.LogDebug("error setting response, returning error to client");
 | 
			
		||||
 | 
			
		||||
                    await SetErrorResponse(context, setResponse.Errors);
 | 
			
		||||
                }
 | 
			
		||||
                await _responder.SetResponseOnHttpContext(context, HttpResponseMessage);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task SetErrorResponse(HttpContext context, List<Error> errors)
 | 
			
		||||
        private void SetErrorResponse(HttpContext context, List<Error> errors)
 | 
			
		||||
        {
 | 
			
		||||
            var statusCode = _codeMapper.Map(errors);
 | 
			
		||||
 | 
			
		||||
            if (!statusCode.IsError)
 | 
			
		||||
            {
 | 
			
		||||
                await _responder.SetErrorResponseOnContext(context, statusCode.Data);
 | 
			
		||||
                _responder.SetErrorResponseOnContext(context, statusCode.Data);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                await _responder.SetErrorResponseOnContext(context, 500);
 | 
			
		||||
                _responder.SetErrorResponseOnContext(context, 500);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ namespace Ocelot.ServiceDiscovery
 | 
			
		||||
 | 
			
		||||
        public async Task<List<Service>> Get()
 | 
			
		||||
        {
 | 
			
		||||
            return _services;
 | 
			
		||||
            return await Task.FromResult(_services);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user