I have a question about how server fields work that
I'm hoping someone in Engineering can shed some light
on.
The docs for xdmp:{get,set}-server-field are pretty
clear. Much like a map, you can set or get a value for
a given key:
xdmp:set-server-field("foo", "bar")
=> "bar"
xdmp:get-server-field("foo")
=> "bar"
Handy. But the value (second arg of set, return
value of both get and set) is typed as item()*. So
what happens if you set a value that is not an atomic
value, such as a map object?
let $my-map := map:map()
let $_ := map:put ($my-map, "my-key", "first-value")
return xdmp:set-server-field("global-map", $my-map)
=> map:map
This request then ends and at some time in the future
another one runs and does:
let $my-map := xdmp:get-server-field("global-map")
return map:get ($my-map, "my-key')
=> "first-value"
Later it does: map:put ($my-map, "my-key", "second-value")
A third request runs later and sees:
let $my-map := xdmp:get-server-field("global-map")
return map:get ($my-map, "my-key')
=> "second-value"
I've written some code like this and it seems to work this
way. Changes to a map fetched from a server variable do
appear to be persistent, consistent with the server variable
storing a reference to the map rather than a copy.
As I thought about this, it made me wonder if this is
really the case. If a stashed map can be fetched and updated
by any request, isn't that a thread race? Where does the "real"
map live, once the request that instantiated it has terminated?
If non-atomic values can be stored in a server variable, how
is the graph of references managed if the value is to live on
after the instantiating request terminates?
So how do server variables work under the covers? Is there
any special action being taken to preserve access-by-reference
behavior, or is it intended to store copies of simple values
only (and it just hasn't blown up for me yet)?
Thanks.
---
Ron Hitchens {mailto:[email protected]} Ronsoft Technologies
+44 7879 358 212 (voice) http://www.ronsoft.com
+1 707 924 3878 (fax) Bit Twiddling At Its Finest
"No amount of belief establishes any fact." -Unknown
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general