aboutsummaryrefslogtreecommitdiffstats
path: root/lib/inets/src/http_server/httpd_esi.erl
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2016-03-15 12:10:58 +0100
committerAnders Svensson <[email protected]>2016-03-16 08:00:34 +0100
commit9a878743009952849984fd663ffb60261b9d2965 (patch)
tree9ab29cc4e75258827a6a1bb91c9528981f2f5851 /lib/inets/src/http_server/httpd_esi.erl
parent6d4001de141a00b3bf37b8f7b24c5bde2b4f4015 (diff)
downloadotp-9a878743009952849984fd663ffb60261b9d2965.tar.gz
otp-9a878743009952849984fd663ffb60261b9d2965.tar.bz2
otp-9a878743009952849984fd663ffb60261b9d2965.zip
Make peer failover more efficient
Failover caused the entire request table to be scanned in search of entries with the transport process in question. With many entries (possibly as a result of the leak fixed in commit 6c9cbd96), this can lead to the service process hanging in ets:select_trap/1, with memory growth when many request processes write concurrently. Now write entries keyed on the transport pid, so that finding request processes at failover is a lookup rather than a select scanning the entire table. There is no upgrade handling in that new code doesn't consider that old code didn't write entries on the transport pid. Thus, a request whose table entries were written in old code will timeout rather than failover in new code. That is, there is a small window for failover to be missed (since request processes are short-lived), but it requires that it take place during the upgrade. As a minor aside, don't ignore failovers when sending binaries (which isn't officially supported), let prepare_retransmit callbacks deal with modifying the binary as required.
Diffstat (limited to 'lib/inets/src/http_server/httpd_esi.erl')
0 files changed, 0 insertions, 0 deletions