async-container icon indicating copy to clipboard operation
async-container copied to clipboard

Container example doesn't actually initialize anything

Open tadman opened this issue 5 years ago • 3 comments

The container example runs without doing anything:

controller = Async::Container::Controller.new do |container|
	Async.logger.debug(self, "Setting up container...")
	
	container.run(count: 1, restart: true) do
		Async.logger.debug(self, "Child process started.")
		
		while true
			sleep 1
			
			if rand < 0.1
				exit(1)
			end
		end
	ensure
		Async.logger.debug(self, "Child process exiting:", $!)
	end
end

begin
	controller.run
ensure
	Async.logger.debug(controller, "Parent process exiting:", $!)
end

Where the output is:

0.11s: Object
      | Starting up...
 0.11s: Async::Container::Notify::Console
      | {:status=>"Initializing..."}
 0.11s: Async::Container::Controller
      | Starting container...
 0.11s: Async::Container::Controller
      | Waiting for startup...
 0.11s: Async::Container::Forked
      | Waiting for ready:
 0.11s: Async::Container::Controller
      | Finished startup.
 0.11s: Async::Container::Notify::Console
      | {:ready=>true}
 0.11s: Async::Container::Controller
      | Parent process exiting:

There's no mention of a "Child process" in there because the block is ignored.

tadman avatar Apr 30 '20 21:04 tadman

A reworked example that seems to function:

class ExampleController < Async::Container::Controller
  def setup(container)
    Async.logger.debug(self, "Container established.")
    
    container.run(count: 1, restart: true) do |instance|
      Async.logger.debug(self, "Child process started.")
      
      Async do |task|
        loop do
          task.sleep(1)
        end
      end

      instance.ready!

    ensure
      Async.logger.debug(self, "Child process exiting:", $!)
    end
  end
end

begin
  controller = ExampleController.new

  controller.run
  
ensure
  Async.logger.debug(controller, "Parent process exiting:", $!)
end

Where the setup method needs to be customized. Presumably new could capture that block and use it within setup?

tadman avatar Apr 30 '20 21:04 tadman

I had it that way before but decided against it as a general pattern it's too magical and literally doesn't even really save more than a few lines of code.

ioquatix avatar May 01 '20 00:05 ioquatix