Ron,
The plugin implementation uses a map stored in a server-field. Accessor
functions that return one of these maps explicitly make a copy of it in order
to prevent the situation you described. -m
On Feb 29, 2012, at 9:28 AM, Ron Hitchens wrote:
>
> 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
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general