Software / code / prosody
Comparison
net/server_select.lua @ 7095:3e1dac35af87
server_select: Retry accepting clients from full servers after 10s (matches libevent behaviour)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 22 Jan 2016 01:59:25 +0100 |
| parent | 7094:e8f202856fc0 |
| child | 7096:95e4c81291cc |
comparison
equal
deleted
inserted
replaced
| 7094:e8f202856fc0 | 7095:3e1dac35af87 |
|---|---|
| 101 local _readtraffic | 101 local _readtraffic |
| 102 | 102 |
| 103 local _selecttimeout | 103 local _selecttimeout |
| 104 local _sleeptime | 104 local _sleeptime |
| 105 local _tcpbacklog | 105 local _tcpbacklog |
| 106 local _accepretry | |
| 106 | 107 |
| 107 local _starttime | 108 local _starttime |
| 108 local _currenttime | 109 local _currenttime |
| 109 | 110 |
| 110 local _maxsendlen | 111 local _maxsendlen |
| 141 _readtraffic = 0 | 142 _readtraffic = 0 |
| 142 | 143 |
| 143 _selecttimeout = 1 -- timeout of socket.select | 144 _selecttimeout = 1 -- timeout of socket.select |
| 144 _sleeptime = 0 -- time to wait at the end of every loop | 145 _sleeptime = 0 -- time to wait at the end of every loop |
| 145 _tcpbacklog = 128 -- some kind of hint to the OS | 146 _tcpbacklog = 128 -- some kind of hint to the OS |
| 147 _accepretry = 10 -- seconds to wait until the next attempt of a full server to accept | |
| 146 | 148 |
| 147 _maxsendlen = 51000 * 1024 -- max len of send buffer | 149 _maxsendlen = 51000 * 1024 -- max len of send buffer |
| 148 _maxreadlen = 25000 * 1024 -- max len of read buffer | 150 _maxreadlen = 25000 * 1024 -- max len of read buffer |
| 149 | 151 |
| 150 _checkinterval = 1200000 -- interval in secs to check idle clients | 152 _checkinterval = 1200000 -- interval in secs to check idle clients |
| 796 send_timeout = _sendtimeout; | 798 send_timeout = _sendtimeout; |
| 797 read_timeout = _readtimeout; | 799 read_timeout = _readtimeout; |
| 798 max_connections = _maxselectlen; | 800 max_connections = _maxselectlen; |
| 799 max_ssl_handshake_roundtrips = _maxsslhandshake; | 801 max_ssl_handshake_roundtrips = _maxsslhandshake; |
| 800 highest_allowed_fd = _maxfd; | 802 highest_allowed_fd = _maxfd; |
| 803 accept_retry_interval = _accepretry; | |
| 801 } | 804 } |
| 802 end | 805 end |
| 803 | 806 |
| 804 changesettings = function( new ) | 807 changesettings = function( new ) |
| 805 if type( new ) ~= "table" then | 808 if type( new ) ~= "table" then |
| 811 _maxreadlen = tonumber( new.max_receive_buffer_size ) or _maxreadlen | 814 _maxreadlen = tonumber( new.max_receive_buffer_size ) or _maxreadlen |
| 812 _checkinterval = tonumber( new.select_idle_check_interval ) or _checkinterval | 815 _checkinterval = tonumber( new.select_idle_check_interval ) or _checkinterval |
| 813 _tcpbacklog = tonumber( new.tcp_backlog ) or _tcpbacklog | 816 _tcpbacklog = tonumber( new.tcp_backlog ) or _tcpbacklog |
| 814 _sendtimeout = tonumber( new.send_timeout ) or _sendtimeout | 817 _sendtimeout = tonumber( new.send_timeout ) or _sendtimeout |
| 815 _readtimeout = tonumber( new.read_timeout ) or _readtimeout | 818 _readtimeout = tonumber( new.read_timeout ) or _readtimeout |
| 819 _accepretry = tonumber( new.accept_retry_interval ) or _accepretry | |
| 816 _maxselectlen = new.max_connections or _maxselectlen | 820 _maxselectlen = new.max_connections or _maxselectlen |
| 817 _maxsslhandshake = new.max_ssl_handshake_roundtrips or _maxsslhandshake | 821 _maxsslhandshake = new.max_ssl_handshake_roundtrips or _maxsslhandshake |
| 818 _maxfd = new.highest_allowed_fd or _maxfd | 822 _maxfd = new.highest_allowed_fd or _maxfd |
| 819 return true | 823 return true |
| 820 end | 824 end |
| 897 if t then next_timer_time = math_min(next_timer_time, t); end | 901 if t then next_timer_time = math_min(next_timer_time, t); end |
| 898 end | 902 end |
| 899 _timer = _currenttime | 903 _timer = _currenttime |
| 900 else | 904 else |
| 901 next_timer_time = next_timer_time - (_currenttime - _timer); | 905 next_timer_time = next_timer_time - (_currenttime - _timer); |
| 906 end | |
| 907 | |
| 908 for server, paused_time in pairs( _fullservers ) do | |
| 909 if _currenttime - paused_time > _accepretry then | |
| 910 _fullservers[ server ] = nil; | |
| 911 server.resume(); | |
| 912 end | |
| 902 end | 913 end |
| 903 | 914 |
| 904 -- wait some time (0 by default) | 915 -- wait some time (0 by default) |
| 905 socket_sleep( _sleeptime ) | 916 socket_sleep( _sleeptime ) |
| 906 until quitting; | 917 until quitting; |