Skip to content

Use Redis for CacheMarkDownField on non AR models

What does this MR do?

This allows using CacheMarkdownField for models that are not backed by ActiveRecord.

When the including class inherits ActiveRecord::Base we include Gitlab::MarkdownCache::ActiveRecordBacked. This will cause the markdown fields to be rendered and the generated HTML stored in a <field>_html attribute on the record. We also store the version used for generating the markdown.

All other classes that include this model will include the Gitlab::MarkdownCache::RedisBacked. This add the <field>_html attributes to that model and will generate the html in them. The generated HTML will be cached in redis under the key markdown_cache:<class>:<id>. The class this included in must therefore respond to id.

What are the relevant issue numbers?

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/54140 after the performance regression introduced in a security fix.

Does this MR meet the acceptance criteria?

Edited by Bob Van Landuyt

Merge request reports