Index: openacs-4/packages/acs-tcl/acs-tcl.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/acs-tcl.info,v
diff -u -r1.95.2.33 -r1.95.2.34
--- openacs-4/packages/acs-tcl/acs-tcl.info 1 Oct 2021 07:30:07 -0000 1.95.2.33
+++ openacs-4/packages/acs-tcl/acs-tcl.info 4 Oct 2021 09:37:00 -0000 1.95.2.34
@@ -9,7 +9,7 @@
f
t
-
+
OpenACS
The Kernel Tcl API library.
2021-09-15
@@ -18,7 +18,7 @@
GPL version 2
3
-
+
Index: openacs-4/packages/acs-tcl/tcl/acs-cache-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/acs-cache-procs.tcl,v
diff -u -r1.10.2.15 -r1.10.2.16
--- openacs-4/packages/acs-tcl/tcl/acs-cache-procs.tcl 24 Sep 2021 11:31:03 -0000 1.10.2.15
+++ openacs-4/packages/acs-tcl/tcl/acs-cache-procs.tcl 4 Oct 2021 09:37:01 -0000 1.10.2.16
@@ -444,7 +444,7 @@
#ns_log notice "### cmd returns <$value> no_empty $no_empty "
if {$no_empty && $value eq ""} {
return ""
- }
+ }
dict set ${:prefix} $key $value
#ns_log notice "### [list dict set ${:prefix} $key $value]"
}
@@ -459,16 +459,16 @@
# Flush a cache entry based on the pattern (which might be
# wild-card-free).
#
- if {[info exists ${:prefix}]} {
+ if {[info exists ${:prefix}]} {
if {$pattern eq "*"} {
- ns_log notice "### dict flush ${:prefix} <$pattern>"
+ ns_log notice "### dict flush ${:prefix} <$pattern>"
unset ${:prefix}
} elseif {[string first "*" $pattern] != -1} {
#
# A real pattern with wild-card was provided.
- #
+ #
set keys [dict keys [set ${:prefix}] $pattern]
- ns_log notice "### dict flush ${:prefix} <$pattern> -> [llength $keys]]"
+ ns_log notice "### dict flush ${:prefix} <$pattern> -> [llength $keys]]"
foreach key $keys {
dict unset ${:prefix} $key
}
@@ -477,7 +477,7 @@
}
}
}
-
+
#
# The per-request cache uses Tcl variables in the global
# namespace, such they are automatically reclaimed after the
@@ -488,7 +488,7 @@
#
# Define the "per_thread_cache"
#
- if {[ns_config "ns/parameters" cachingmode singlenode] eq "none"} {
+ if {[ns_config "ns/parameters" cachingmode "per-node"] eq "none"} {
#
# If caching mode is "none", let the "per_thread_cache" behave
# like the "per_request_cache".
@@ -559,7 +559,9 @@
nsv_set ""
nsv_unset ""
nsv_incr ""
+ nsv_dict ""
bgdelivery ""
+ callback ""
ns_cache "^ns_cache\s+eval"
ns_cache_flush ""
acs::cache_flush_all ""
Index: openacs-4/packages/acs-tcl/tcl/defs-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/defs-procs.tcl,v
diff -u -r1.81.2.10 -r1.81.2.11
--- openacs-4/packages/acs-tcl/tcl/defs-procs.tcl 6 Aug 2021 04:40:27 -0000 1.81.2.10
+++ openacs-4/packages/acs-tcl/tcl/defs-procs.tcl 4 Oct 2021 09:37:01 -0000 1.81.2.11
@@ -437,56 +437,174 @@
return [ns_config "ns/server/[ns_info server]/acs/$package_key" $name]
}
+#
+# Implementation of ad_parameter_cache
+# 1) for cachingmode none
+# 2) via "nsv_dict" (cluster aware)
+# 3) via "nsv" (not cluster aware)
-ad_proc -public ad_parameter_cache {
- -set
- -delete:boolean
- -global:boolean
- key
- parameter_name
-} {
+if {[ns_config "ns/parameters" cachingmode "per-node"] eq "none"} {
+ #
+ # If caching mode is "none", the "ad_parameter_cache" is
+ # essentially a no-op stub, but it is used for interface
+ # compatibility.
+ #
+ # TODO: One should essentially define more more cachetype for
+ # nsv_caching in acs-cache-procs to reduce redundancy and for
+ # providing higher orthogonality.
+ #
+ ad_proc -public ad_parameter_cache {
+ -set
+ -delete:boolean
+ -global:boolean
+ key
+ parameter_name
+ } {
- Manages the cache for ad_parameter.
- @param set Use this flag to indicate a value to set in the cache.
- @param delete Delete the value from the cache
- @param global If true, global param, false, instance param
- @param key Specifies the key for the cache'd parameter, either the package instance
- id (instance parameter) or package key (global parameter).
- @param parameter_name Specifies the parameter name that is being cached.
- @return The cached value.
+ Stub for a parameter cache, since "cachingmode" is "none".
-} {
- if {$delete_p} {
- if {[nsv_exists ad_param_$key $parameter_name]} {
- nsv_unset ad_param_$key $parameter_name
+ @param set Use this flag to indicate a value to set in the cache.
+ @param delete Delete the value from the cache
+ @param global If true, global param, false, instance param
+ @param key Specifies the key for the cache'd parameter, either the package instance
+ id (instance parameter) or package key (global parameter).
+ @param parameter_name Specifies the parameter name that is being cached.
+ @return The cached value.
+
+ } {
+ if {$delete_p} {
+ return
}
- return
+ if {[info exists set]} {
+ return $set
+ } elseif { $global_p } {
+ set value [db_string select_global_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id is null
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ and apm_parameters.package_key = :key
+ } -default ""]
+ } else {
+ set value [db_string select_instance_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id = :key
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ } -default ""]
+ }
+ return $value
}
- if {[info exists set]} {
- nsv_set "ad_param_${key}" $parameter_name $set
- return $set
- } elseif { [nsv_exists ad_param_$key $parameter_name] } {
- return [nsv_get ad_param_$key $parameter_name]
- } elseif { $global_p } {
- set value [db_string select_global_parameter_value {
- select apm_parameter_values.attr_value
- from apm_parameters, apm_parameter_values
- where apm_parameter_values.package_id is null
- and apm_parameter_values.parameter_id = apm_parameters.parameter_id
- and apm_parameters.parameter_name = :parameter_name
- and apm_parameters.package_key = :key
- } -default ""]
- } else {
- set value [db_string select_instance_parameter_value {
- select apm_parameter_values.attr_value
- from apm_parameters, apm_parameter_values
- where apm_parameter_values.package_id = :key
- and apm_parameter_values.parameter_id = apm_parameters.parameter_id
- and apm_parameters.parameter_name = :parameter_name
- } -default ""]
+
+} elseif {[::acs::icanuse "nsv_dict"]} {
+
+ if {![nsv_array exists ad_param]} {
+ nsv_set ad_param . .
}
- nsv_set "ad_param_${key}" $parameter_name $value
- return $value
+
+ ad_proc -public ad_parameter_cache {
+ -set
+ -delete:boolean
+ -global:boolean
+ key
+ parameter_name
+ } {
+
+ Manages the cache for ad_parameter.
+ @param set Use this flag to indicate a value to set in the cache.
+ @param delete Delete the value from the cache
+ @param global If true, global param, false, instance param
+ @param key Specifies the key for the cache'd parameter, either the package instance
+ id (instance parameter) or package key (global parameter).
+ @param parameter_name Specifies the parameter name that is being cached.
+ @return The cached value.
+
+ } {
+ if {$delete_p} {
+ if {[nsv_dict exists ad_param $key $parameter_name]} {
+ ::acs::clusterwide nsv_dict unset ad_param $key $parameter_name
+ }
+ return
+ }
+ if {[info exists set]} {
+ nsv_dict set ad_param $key $parameter_name $set
+ return $set
+ } elseif { [nsv_dict get -varname value ad_param $key $parameter_name] } {
+ return $value
+ } elseif { $global_p } {
+ set value [db_string select_global_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id is null
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ and apm_parameters.package_key = :key
+ } -default ""]
+ } else {
+ set value [db_string select_instance_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id = :key
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ } -default ""]
+ }
+ nsv_dict set ad_param $key $parameter_name $value
+ return $value
+ }
+} else {
+ ad_proc -public ad_parameter_cache {
+ -set
+ -delete:boolean
+ -global:boolean
+ key
+ parameter_name
+ } {
+
+ Manages the cache for ad_parameter.
+ @param set Use this flag to indicate a value to set in the cache.
+ @param delete Delete the value from the cache
+ @param global If true, global param, false, instance param
+ @param key Specifies the key for the cache'd parameter, either the package instance
+ id (instance parameter) or package key (global parameter).
+ @param parameter_name Specifies the parameter name that is being cached.
+ @return The cached value.
+
+ } {
+ if {$delete_p} {
+ if {[nsv_exists ad_param_$key $parameter_name]} {
+ nsv_unset ad_param_$key $parameter_name
+ }
+ return
+ }
+ if {[info exists set]} {
+ nsv_set "ad_param_${key}" $parameter_name $set
+ return $set
+ } elseif { [nsv_exists ad_param_$key $parameter_name] } {
+ return [nsv_get ad_param_$key $parameter_name]
+ } elseif { $global_p } {
+ set value [db_string select_global_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id is null
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ and apm_parameters.package_key = :key
+ } -default ""]
+ } else {
+ set value [db_string select_instance_parameter_value {
+ select apm_parameter_values.attr_value
+ from apm_parameters, apm_parameter_values
+ where apm_parameter_values.package_id = :key
+ and apm_parameter_values.parameter_id = apm_parameters.parameter_id
+ and apm_parameters.parameter_name = :parameter_name
+ } -default ""]
+ }
+ nsv_set "ad_param_${key}" $parameter_name $value
+ return $value
+ }
}
ad_proc -private ad_parameter_cache_all {} {
Index: openacs-4/packages/acs-tcl/tcl/parameter-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-tcl/tcl/parameter-procs.tcl,v
diff -u -r1.26.2.4 -r1.26.2.5
--- openacs-4/packages/acs-tcl/tcl/parameter-procs.tcl 2 Sep 2021 17:10:27 -0000 1.26.2.4
+++ openacs-4/packages/acs-tcl/tcl/parameter-procs.tcl 4 Oct 2021 09:37:01 -0000 1.26.2.5
@@ -43,7 +43,7 @@
db_exec_plsql set_parameter_value {}
- callback subsite::global_parameter_changed \
+ acs::clusterwide callback subsite::global_parameter_changed \
-package_key $package_key \
-parameter $parameter \
-value $value
@@ -121,7 +121,7 @@
db_exec_plsql set_parameter_value {}
- callback subsite::parameter_changed \
+ acs::clusterwide callback subsite::parameter_changed \
-package_id $package_id \
-parameter $parameter \
-value $value