Hi everyone,

Will trying to lower the DB load for CloudStack I did some long testing
and
here are my outcomes for the current cache mechanism in CloudStack.

I would be interested to hear from people who try to customize the
ehcache
configuration in CS.
A PR (https://github.com/apache/cloudstack/pull/2913) is also open to
desactivate (before deleting) ehcache in CS, read below to understand
why.

ProblemsThe code in CS does not seem to fit any caching mechanism
especially due to the homemade DAO code. The main 3 flaws are the
following:
Entities are not expected to be sharedThere is quite a lot of code with
method calls passing entity IDs value as long, which does some object
fetching. Without caching, this behavior will create distinct objects
each time an entity with the same ID is fetched. With the cache
enabled, the same object will be shared among those methods. It has
been seen that it does generate some side effects where code still
expected unchanged entity attributes after calling different methods
thus generating exception/bugs.
DAO update operations are using search queriesSome part of the code are
updating entities based on a search query, therefore the whole cache
must be invalidated (see GenericDaoBase: public int
update(UpdateBuilder ub, final SearchCriteria<?> sc, Integer rows);).
Entities based on views joining multiple tablesThere are quite a lot of
entities based on SQL views joining multiple entities in a same object.
Enabling caching on those would require a mechanism to link and cross-
remove related objects whenever one of the sub-entity is changed.
Final wordBased on the previously discussed points, the best approach
IMHO would be to move out of the custom DAO framework in CS and use a
well known one. It will handle caching well and the joins made by the
views
in the code. It's not an easy change, but it will fix along a lot of
issues and
add a proven / robust framework to an important part of the code.

The work to change the DAO layer is a huge task, I don't know how / who
will perform it.

What are the proposals for a new DAO framework ?

FYI I will stop working for Exoscale at the end of the month, so I
won't be able to
tackle such challenge as I won't be working with CS anymore. I'll try
my best
to continue looking at the project to give my insights and share the
experienced
I have with CS.

Marc-Aurèle

Reply via email to