Fixed issue in cluster mode, denoted by Khy H in the OpenACS forum
A new command "ad_parameter_cache_flush_dict" was introduced to handle the case, where a cluster node modifies a parameter value without having it read before. This case could lead to a coherency problem for parameter values.
Background:
This proc is necessary in cases, where a node writes a new parameter value before it has read the old one.
Since a plain "nsv_dict unset ad_param $key $parameter_name" raises an exception, when the pair does not exist, and we do not want to allow in cluster requests arbitrary "catch" commands, we allow "ad_parameter_cache_flush_dict" instead. Probably, the best solution is to add support for
The existing nsv_dict was built after Tcl's "dict unset", which does not have the "-nocomplain" option either. However, an atomic operation would certainly be preferable over an exists/unset pair, which is no acceptable solution.
Cluster updates: better support when running in containers
- generalized servers running with an INADDR_ANY address - handling of running server with ephemeral ports - streamline function and variable names
- added ./tcl/acs-container-procs.tcl * make container definitions independent of cluster handling * create container mapping based on a JSON file, which can be obtained from docker to get information about external addresses * The final interface is a mapping file in Tcl providing at least the Tcl dict ::docker::containerMapping containing the docker mapping. A dict key like "8080/tcp" (internal port) will return a dict containing the keys "host", "port" and "proto" (e.g. proto https host 192.168.1.192 port 58115).