You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: process_post.rb
    path of file: ./repos/discourse/app/jobs/regular
    
    the code of the file until where you have to start completion: # frozen_string_literal: true

require "image_sizer"

module Jobs
  class ProcessPost < ::Jobs::Base
    def execute(args)
      DistributedMutex.synchronize("process_post_#{args[:post_id]}", validity: 10.minutes) do
        post = Post.find_by(id: args[:post_id])
        # two levels of deletion
        return unless post.present? && post.topic.present?

        orig_cooked = post.cooked
        recooked = nil

        if args[:cook].present?
          cooking_options = args[:cooking_options] || {}
          cooking_options[:topic_id] = post.topic_id
          recooked = post.cook(post.raw, cooking_options.symbolize_keys)
          post.update_columns(
            cooked: recooked,
            baked_at: Time.zone.now,
            baked_version: Post::BAKED_VERSION,
          )
        end

        cp = CookedPostProcessor.new(post, args)
        cp.post_process(new_post: args[:new_post])

        # If we changed the document, save it
        cooked = cp.html

        if cooked != (recooked || orig_cooked)
          if orig_cooked.present? 
    
    def execute(args)
      DistributedMutex.synchronize("process_post_#{args[:post_id]}", validity: 10.minutes) do
        post = Post.find_by(id: args[:post_id])
        # two levels of deletion
        return unless post.present? && post.topic.present?

        orig_cooked = post.cooked
        recooked = nil

        if args[:cook].present?
          cooking_options = args[:cooking_options] || {}
          cooking_options[:topic_id] = post.topic_id
          recooked = post.cook(post.raw, cooking_options.symbolize_keys)
          post.update_columns(
            cooked: recooked,
            baked_at: Time.zone.now,
            baked_version: Post::BAKED_VERSION,
          )
        end

        cp = CookedPostProcessor.new(post, args)
        cp.post_process(new_post: args[:new_post])

        # If we changed the document, save it
        cooked = cp.html

        if cooked != (recooked || orig_cooked)
          if orig_cooked.present? && cooked.blank?
            # TODO stop/restart the worker if needed, let's gather a few here first
            Rails.logger.warn(
              "Cooked post processor in FATAL state, bypassing. You need to urgently restart sidekiq\norig: #{orig_cooked}\nrecooked: #{recooked}\ncooked: #{cooked}\npost id: #{post.id}",
            )
          else
            post.update_column(:cooked, cp.html)
            post.topic.update_excerpt(post.excerpt_for_topic) if post.is_first_post?
            extract_links(post)
            post.publish_change_to_clients! :revised
          end
        end