ruby-concurrency / ruby-concurrency/concurrent-ruby

Actor pool terminated event sent as message

Open
#813 0 comments 0 reactions 1 assignee View on GitHub

@pitr-ch is already working on this.

Since Aug 24, 2019.

question
Dominant language
Ruby
Stars
5.8k
Forks
420
Avg merge
20h 45m
Merged PRs (30d)
4

Description

  • Operating system: Linux
  • Ruby implementation: Ruby
  • concurrent-ruby version: 1.1.5
  • concurrent-ruby-edge version: 0.5.0

Given this code:

require 'concurrent-edge'

class WorkerActor < Concurrent::Actor::RestartingContext
  def on_event(event)
    puts "#{name} event: #{event.inspect}"
  end
end

class Actor < Concurrent::Actor::RestartingContext
  def initialize
    @worker_pool = Concurrent::Actor::Utils::Pool.spawn('worker_pool', 10) do |index|
      WorkerActor.spawn(name: "worker[#{index}]", supervise: true)
    end
  end

  def on_message(message)
    puts "#{name} message: #{message.inspect}"
  end

  def on_event(event)
    puts "#{name} event: #{event.inspect}"
  end
end

actor = Actor.spawn(name: 'parent')

actor << :terminate!

sleep 0.1

-why does the Actor receive both an event :terminated and a message :terminated? Output from the above:

parent event: [:terminated, nil]
worker[0] event: [:terminated, nil]
worker[1] event: [:terminated, nil]
worker[2] event: [:terminated, nil]
worker[3] event: [:terminated, nil]
worker[4] event: [:terminated, nil]
worker[5] event: [:terminated, nil]
worker[6] event: [:terminated, nil]
worker[7] event: [:terminated, nil]
worker[8] event: [:terminated, nil]
worker[9] event: [:terminated, nil]
parent message: [:terminated, nil]

It only seems to receive a message when I use a Pool. If I replace the #initialize method with:

@worker = WorkerActor.spawn(name: 'worker', supervise: true)

Then the output includes only events and no message:

parent event: [:terminated, nil]
worker event: [:terminated, nil]

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.