Cool! Thanks for the answers! Norbert mentions something interesting about references. I have found that even though on each query mongo get the up-to-date version of the objects, it does not install the proxies to look for the up-to-date versions of the references of the queried object. I made the following experiment: Having two images 1 and 2 and two classes A and B, each of them having one instance variable. âââââââââ Image 1 (Create two objects, âaâ referencing âbâ) [ |a b| a := A new. b := B new a setInstVar: b. b setInstVar: âfoo'. b save. a save. ] Image 2 (Mutates the second object, but the first is not changed) [ b := (repository selectAll: A) first instVar. b setInstVar: âbarâ. b save. ] Image 1 (Query the first object and access to the referenced object) [ b := (repository selectAll: A) first instVar. b instVar. â-> fooâ b := (repository selectAll: B) first. b instVar. â-> bar" ] This little experiment showed me that I cannot trust on the state of other objects that I have not explicitly queried for. Is there any way of solving this without creating new instances of voyage repositories for each request? Thanks! Alejandro
On Jan 25, 2017, at 7:27 AM, Esteban Lorenzano <estebanlm@gmail.com> wrote:
On 25 Jan 2017, at 01:30, Alejandro Infante <alejandroinfante91@gmail.com> wrote:
Hi!
Iâm close to deploy a web service using Pharo with Voyage and MongoDB. I have been playing with it and everything works ok with a single Pharo image.
Couple of days ago I started questioning myself about how voyage behaves when you have multiple pharo images using the same mongo database (horizontal scaling). I want to know how the cache of voyage behaves in a scenario with object updates.
Example: ââââââââââââââ Imagine I have two images A and B.
- Image A query for object o and voyage put it in the cache. - Image B query for object o and voyage put it in the cache. - Image A updates object o and push it into the database calling #save. - Image B query for object o that should be already in the cache.
In this case, does Image B see the changes performed by image A? ââââââââââââââ
yes. Voyage will always verify the version on the mongodb, no matter the cache, because in fact, the cache of Voyage is meant just to keep object identity (there has been discussions on if this is a real cache⦠I think it is, but with a different purpose than usual). Recently Martin enhanced that part by adding VMMongoRepository>>saveEnsuringCurrent: protocol who will also check your version is correct when writing (to avoid overwrite before update).
So, this should be Ok :)
Esteban
All ideas are welcome :)
Thanks and cheers! Alejandro