Markdown cache

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed

For performance reasons, GitLab caches the HTML version of Markdown text in fields such as:

  • Comments.
  • Issue descriptions.
  • Merge request descriptions.

These cached versions can become outdated, such as when the external_url configuration option is changed. Links in the cached text would still refer to the old URL.

Invalidate the cache

You can invalidate the Markdown cache by using either the API or the Rails console.

Use the API

Prerequisites:

  • You must have administrator access.

To invalidate the existing cache using the API:

  1. Increase the local_markdown_version setting in application settings by sending a PUT request:

    curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
      --url "https://gitlab.example.com/api/v4/application/settings?local_markdown_version=<increased_number>"

For more information about this API endpoint, see update application settings.

Use the Rails console

Prerequisites:

For a group

To invalidate the cache for a group:

  1. Start a Rails console:

    sudo gitlab-rails console
  2. Find the group to update:

    group = Group.find(<group_id>)
  3. Invalidate the cache for all projects in the group:

    group.all_projects.each_slice(10) do |projects|
      projects.each do |project|
        # Invalidate issues
        project.issues.update_all(
          description_html: nil,
          title_html: nil
        )
    
        # Invalidate merge requests
        project.merge_requests.update_all(
          description_html: nil,
          title_html: nil
        )
    
        # Invalidate notes/comments
        project.notes.update_all(note_html: nil)
      end
    
      # Pause for one second after updating 10 projects
      sleep 1
    end

For a project

To invalidate the cache for a single project:

  1. Start a Rails console:

    sudo gitlab-rails console
  2. Find the project to update:

    project = Project.find(<project_id>)
  3. Invalidate issues:

    project.issues.update_all(
      description_html: nil,
      title_html: nil
    )
  4. Invalidate merge requests:

    project.merge_requests.update_all(
      description_html: nil,
      title_html: nil
    )
  5. Invalidate notes and comments:

    project.notes.update_all(note_html: nil)