erlang has a code_change function in the otp that allows the gen_server to update its current state and start using new code. No connections need be broken with clients, no long running processes need be stopped. Just updated in place.
It's not just a routing change.
https://www.erlang.org/docs/24/man/gen_server