Back to Gitlabhq

Markdown cache

doc/administration/invalidate_markdown_cache.md

18.11.22.5 KB
Original Source

{{< details >}}

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

{{< /details >}}

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:

    shell
    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:

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

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

    ruby
    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:

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

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

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

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

    ruby
    project.notes.update_all(note_html: nil)