mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 10:15:27 +08:00 
			
		
		
		
	fixed issu where if service dropped out then leastconnection would not pick it up again (#195)
This commit is contained in:
		@@ -47,6 +47,53 @@ namespace Ocelot.UnitTests.LoadBalancer
 | 
			
		||||
            Task.WaitAll(tasks);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_handle_service_returning_to_available()
 | 
			
		||||
        {
 | 
			
		||||
            var serviceName = "products";
 | 
			
		||||
 | 
			
		||||
            var availableServices = new List<Service>
 | 
			
		||||
            {
 | 
			
		||||
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
 | 
			
		||||
                new Service(serviceName, new HostAndPort("127.0.0.2", 80), string.Empty, string.Empty, new string[0]),
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            _leastConnection = new LeastConnection(() => Task.FromResult(availableServices), serviceName);
 | 
			
		||||
 | 
			
		||||
            var hostAndPortOne = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortOne.Data.DownstreamHost.ShouldBe("127.0.0.1");
 | 
			
		||||
            var hostAndPortTwo = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortTwo.Data.DownstreamHost.ShouldBe("127.0.0.2");
 | 
			
		||||
            _leastConnection.Release(hostAndPortOne.Data);
 | 
			
		||||
            _leastConnection.Release(hostAndPortTwo.Data);
 | 
			
		||||
 | 
			
		||||
            availableServices = new List<Service>
 | 
			
		||||
            {
 | 
			
		||||
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            hostAndPortOne = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortOne.Data.DownstreamHost.ShouldBe("127.0.0.1");
 | 
			
		||||
            hostAndPortTwo = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortTwo.Data.DownstreamHost.ShouldBe("127.0.0.1");
 | 
			
		||||
            _leastConnection.Release(hostAndPortOne.Data);
 | 
			
		||||
            _leastConnection.Release(hostAndPortTwo.Data);
 | 
			
		||||
 | 
			
		||||
            availableServices = new List<Service>
 | 
			
		||||
            {
 | 
			
		||||
                new Service(serviceName, new HostAndPort("127.0.0.1", 80), string.Empty, string.Empty, new string[0]),
 | 
			
		||||
                new Service(serviceName, new HostAndPort("127.0.0.2", 80), string.Empty, string.Empty, new string[0]),
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            hostAndPortOne = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortOne.Data.DownstreamHost.ShouldBe("127.0.0.1");
 | 
			
		||||
            hostAndPortTwo = _leastConnection.Lease().Result;
 | 
			
		||||
            hostAndPortTwo.Data.DownstreamHost.ShouldBe("127.0.0.2");
 | 
			
		||||
            _leastConnection.Release(hostAndPortOne.Data);
 | 
			
		||||
            _leastConnection.Release(hostAndPortTwo.Data);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task LeaseDelayAndRelease()
 | 
			
		||||
        {
 | 
			
		||||
            var hostAndPort = await _leastConnection.Lease();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user