Sha256: d24c20019d299994763c9ef646ea17f584bdd83706165acc5f53a7651337136d
Contents?: true
Size: 1.7 KB
Versions: 14
Compression:
Stored size: 1.7 KB
Contents
# frozen_string_literal: true module Karafka module Processing # Namespace for all the jobs that are suppose to run in workers. module Jobs # Base class for all the jobs types that are suppose to run in workers threads. # Each job can have 3 main entry-points: `#before_call`, `#call` and `#after_call` # Only `#call` is required. class Base extend Forwardable # @note Since one job has always one executer, we use the jobs id and group id as reference def_delegators :executor, :id, :group_id attr_reader :executor # Creates a new job instance def initialize # All jobs are blocking by default and they can release the lock when blocking operations # are done (if needed) @non_blocking = false end # When redefined can run any code that should run before executing the proper code def before_call; end # The main entry-point of a job def call raise NotImplementedError, 'Please implement in a subclass' end # When redefined can run any code that should run after executing the proper code def after_call; end # @return [Boolean] is this a non-blocking job # # @note Blocking job is a job, that will cause the job queue to wait until it is finished # before removing the lock on new jobs being added # # @note All the jobs are blocking by default # # @note Job **needs** to mark itself as non-blocking only **after** it is done with all # the blocking things (pausing partition, etc). def non_blocking? @non_blocking end end end end end
Version data entries
14 entries across 14 versions & 1 rubygems