Sha256: 5d08d1bf89879235f1af1c4c2509534f5c86cb88236429f9c95b0e76e1c8d1dd

Contents?: true

Size: 1.83 KB

Versions: 7

Compression:

Stored size: 1.83 KB

Contents

module Kuroko2
  module Workflow
    module Task
      class Fork < Base
        def execute
          if fork_children_ids.empty?
            message = "(token #{token.uuid}) Start to fork."

            token.job_instance.logs.info(message)
            Kuroko2.logger.info(message)
            extract_child_nodes

            :pass
          elsif token.children.where(id: fork_children_ids).all?(&:finished?)
            message = "(token #{token.uuid}) All children are finished."

            token.job_instance.logs.info(message)
            Kuroko2.logger.info(message)

            :next_sibling
          else
            :pass
          end
        end

        def validate
          if node.children.empty?
            raise Workflow::AssertionError, "#{self.class} must have children node"
          end
        end

        private

        def fork_children_ids
          token.context['fork_children_ids'] ||= {}
          token.context['fork_children_ids'][token.path] ||= []
        end

        def extract_child_nodes
          node.children.each do |child|
            create_child_token(child_node: child)
          end
        end

        def create_child_token(child_node:, env: {})
          attributes = token.attributes.except('id', 'uuid', 'script', 'path', 'message', 'created_at', 'updated_at')
          attributes = attributes.merge(uuid: SecureRandom.uuid, parent: token, script: child_node.to_script, path: '/')
          attributes['context']['ENV'] = (attributes['context']['ENV'] || {}).merge(env)

          Token.create!(attributes).tap do |created|
            fork_children_ids << created.id
            message = "(token #{created.uuid}) New token are created for #{child_node.path}"
            created.job_instance.logs.info(message)
            Kuroko2.logger.info(message)
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
kuroko2-0.5.1 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.5.0 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.6 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.5 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.4 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.3 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.2 lib/autoload/kuroko2/workflow/task/fork.rb