Class: Dynflow::Connectors::Database::Core

Inherits:
Actor
  • Object
show all
Defined in:
lib/dynflow/connectors/database.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Actor

#behaviour_definition, #finish_termination, #start_termination, #terminating?

Methods included from MethodicActor

#on_message

Methods included from Actor::LogWithFullBacktrace

#log

Constructor Details

#initialize(connector, polling_interval) ⇒ Core

Returns a new instance of Core.



48
49
50
51
52
53
54
# File 'lib/dynflow/connectors/database.rb', line 48

def initialize(connector, polling_interval)
  @connector = connector
  @world = nil
  @executor_round_robin = RoundRobin.new
  @stopped = false
  @polling_interval = polling_interval
end

Instance Attribute Details

#polling_intervalObject (readonly)

Returns the value of attribute polling_interval.



46
47
48
# File 'lib/dynflow/connectors/database.rb', line 46

def polling_interval
  @polling_interval
end

Instance Method Details

#check_inboxObject



81
82
83
84
# File 'lib/dynflow/connectors/database.rb', line 81

def check_inbox
  return unless @world
  receive_envelopes
end

#handle_envelope(envelope) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/dynflow/connectors/database.rb', line 86

def handle_envelope(envelope)
  world_id = find_receiver(envelope)
  if world_id == @world.id
    if @stopped
      log(Logger::ERROR, "Envelope #{envelope} received for stopped world")
    else
      @connector.receive(@world, envelope)
    end
  else
    send_envelope(update_receiver_id(envelope, world_id))
  end
end

#periodic_check_inboxObject



76
77
78
79
# File 'lib/dynflow/connectors/database.rb', line 76

def periodic_check_inbox
  self << :check_inbox
  @world.clock.ping(self, polling_interval, :periodic_check_inbox) unless @stopped
end

#start_listening(world) ⇒ Object



60
61
62
63
64
65
# File 'lib/dynflow/connectors/database.rb', line 60

def start_listening(world)
  @world = world
  @stopped = false
  postgres_listen_start
  self << :periodic_check_inbox
end

#stop_listeningObject



71
72
73
74
# File 'lib/dynflow/connectors/database.rb', line 71

def stop_listening
  @stopped = true
  postgres_listen_stop
end

#stop_receiving_new_workObject



67
68
69
# File 'lib/dynflow/connectors/database.rb', line 67

def stop_receiving_new_work
  @world.coordinator.deactivate_world(@world.registered_world)
end

#stopped?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/dynflow/connectors/database.rb', line 56

def stopped?
  !!@stopped
end