%% ranch_conns_sup is a custom supervisor (special process), %% not an OTP supervisor. When "supervisor" is used, the %% module is always loaded before calling system_code_change, %% for both upgrade and downgrade operations. This is so that %% the supervisor's init callback of the upgraded/downgraded %% module gets called. But the custom supervisors in Ranch %% do not have an init callback and therefore can function %% like other special processes: when upgrading, load the %% module then call system_code_change; and when downgrading, %% call system_code_change and then load the module. {"2.0.0", [{<<"2\\.0\\.[0-9]+.*">>, [ {apply, {ranch, stop_all_acceptors, []}}, {load_module, ranch}, {load_module, ranch_acceptor}, {update, ranch_acceptors_sup, supervisor}, {load_module, ranch_app}, %% See comments at the top of the file about ranch_conns_sup. {update, ranch_conns_sup, {advanced, []}}, {update, ranch_conns_sup_sup, supervisor}, {load_module, ranch_crc32c}, {update, ranch_embedded_sup, supervisor}, {update, ranch_listener_sup, supervisor}, {load_module, ranch_protocol}, {load_module, ranch_proxy_header}, {update, ranch_server, {advanced, []}}, {update, ranch_server_proxy, {advanced, []}}, {load_module, ranch_ssl}, {update, ranch_sup, supervisor}, {load_module, ranch_tcp}, {load_module, ranch_transport}, {apply, {ranch, restart_all_acceptors, []}} ]}], [{<<"2\\.0\\.[0-9]+.*">>, [ {apply, {ranch, stop_all_acceptors, []}}, {load_module, ranch}, {load_module, ranch_acceptor}, {update, ranch_acceptors_sup, supervisor}, {load_module, ranch_app}, %% See comments at the top of the file about ranch_conns_sup. {update, ranch_conns_sup, {advanced, []}}, {update, ranch_conns_sup_sup, supervisor}, {load_module, ranch_crc32c}, {update, ranch_embedded_sup, supervisor}, {update, ranch_listener_sup, supervisor}, {load_module, ranch_protocol}, {load_module, ranch_proxy_header}, {update, ranch_server, {advanced, []}}, {update, ranch_server_proxy, {advanced, []}}, {load_module, ranch_ssl}, {update, ranch_sup, supervisor}, {load_module, ranch_tcp}, {load_module, ranch_transport}, {apply, {ranch, restart_all_acceptors, []}} ]}] }.