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.
