Forum OpenACS Q&A: Re: Issue with reachable method in 5.10.1 dynamic clustering setup

Our configuration is using the default ports of 443 and 80 for https and http. Debugging the code I found that the method current_server_locations is utilizing this helper method util::join_location which is dropping the port from the location

Here is some logging I added to the current_server_locations method to debug

[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: use module <nsssl> /web/dev/node-1/httpd/bin/nsssl.so
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: ip 10.34.203.163
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: port 443
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: use module <nssock> /web/dev/node-1/httpd/bin/nssock.so
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: ip 10.34.203.163
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations: port 80
[21/Nov/2023:09:29:25][21757.7f4344aeb840][-main:-1-] Notice: current_server_locations returns http://10.34.203.163 https://10.34.203.163

Here is the relevant code that results in the port being dropped:

packages/acs-tcl/tcl/cluster-procs.tcl

lappend result [util::join_location \
      -proto [dict get $protos $module_type] \
      -hostname $ip \
      -port $port]

packages/acs-tcl/tcl/utilities-procs.tcl

ad_proc util::join_location {{-proto ""} {-hostname} {-port ""}} {
    Join hostname and port and use IP-literal notation when necessary.
    The function is the inverse function of  util::split_location.
    @return location consisting of hostname and optionally port
    @author Gustaf Neumann
    @see util::split_location
} {
    set result ""
    if {$proto ne ""} {
        append result $proto://
        #
        # When the specified port is equal to the default port, omit
        # it from the result.
        #
        if {$port ne "" && $port eq [dict get {http 80 https 443 udp "" smtp ""} $proto]} {
            set port ""
        }
    }