During my work on a faster implementation of the MenuRenderer, I came 
across the model menu.models.MenuCache 
<https://github.com/divio/django-cms/blob/develop/menus/models.py>.
This models in my opinion doesn't make any sense at all, and could be 
dropped. It has been added in 2010 without
referring to any issue or pull request. The only possible explanation I 
have found is this commit message:
"First try to have a process-safe caching mechanism for menu trees 
<https://github.com/jrief/django-cms/commit/f193c4d1883845cbff0557385f430ada92ca792a>
".

A possible intention of this model could be to lock the cache 's bucket, 
while some data is computed to be stored at it, so that
not more than one thread/process can for instance rebuild the menu tree. If 
that's the original intention, then the current implementation
however does not work as expected, one would have to use SELECT FOR UPDATE 
<https://docs.djangoproject.com/en/stable/ref/models/querysets/#select-for-update>
 
to block the resource, ie. the chosen
cache-key. It's somehow weird, to use a relational database to block a 
resource inside a memory cache.

Another approach would be to use Distributed locks with Redis 
<https://redis.io/topics/distlock>. There is a Python implementation 
<https://github.com/SPSCommerce/redlock-py> for it, which however means
that we force django-CMS users to exclusively rely on Redis caching, rather 
than say memcached or other caching mechanisms.

Therefore my proposal is to completely drop that table and remove the code 
using it. It just makes harm, with no evident benefit.
The worst scenario which could happen (but happens anyway), is that two 
threads/processes compute the menu tree at the same
time and the later one *wins* in that sense, that it is *the* one which 
writes its computed data to the cache. So, that's not a real problem.

What do other core developers of django-CMS think about this proposal?

– Jacob

-- 
Message URL: 
https://groups.google.com/d/msg/django-cms-developers/topic-id/message-id
Unsubscribe: send a message to 
[email protected]
--- 
You received this message because you are subscribed to the Google Groups 
"django CMS developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/django-cms-developers/562472f1-4fde-4036-a964-95d9e09d06a1%40googlegroups.com.

Reply via email to