Some random magma questions

Chris Muller asqueaker at gmail.com
Thu Sep 8 20:58:28 UTC 2016


Hi Tim,

> I have a few questions:
> I get seems to get this when trying to persist
>
> "Serialization sizeWarningThreshold reached.  Proceed to double it.”
>
> I see that this is defined in MaSerializedGraphBuffer to around 100Mb.
> What is advised here, smaller commit to keep the size down or is it ok to allow large (byte size wise) collections to be serialized?
>
> I also run into that I cannot serialize graphs > 4M objects - is there a way of inspecting the graph?

This is a limitation left-over from before Magma was able to support
long transactions.  Generally, small transactions are better anyway,
especially if you're hosting a model accessed by multiple users.  Huge
commits will create performance issues.

If you get that error, take a look at the "path" argument of the call
to #maValueGraphNode:index:using:with:path:with: .  That is the path
to the current object being serialized.

> Lastly, in http://wiki.squeak.org/squeak/2985 - what is meant with an "uncached #root” and how can one avoid it? I.e. I should have the application in a transaction all the time.

That would be one way.  Then, your app could signal #commitAndBegin.

> Would it be enough to just assign the root to a instance variable in my business logic objects?

You can do that, but keep in mind that once objects are referenced
indirectly from the referenced root, they'll remain in memory.  You
can stubOut: objects so that they and their references will be GC'd,
and you can also reference from MagmaCollections, which only keep a
"page" of their contents in memory at a time.

The best solution can only be known with more context about your app..


More information about the Magma mailing list