Method: Cuboid::Processes::Schedulers#spawn

Defined in:
lib/cuboid/processes/schedulers.rb

#spawn(options = {}) ⇒ RPC::Client::Queue

Spawns a RPC::Server::Scheduler process.

Parameters:

  • options (Hash) (defaults to: {})

    To be passed to Options#set. Allows address instead of rpc_server_address and port instead of rpc_port.

Returns:

  • (RPC::Client::Queue)


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/cuboid/processes/schedulers.rb', line 54

def spawn( options = {} )
    options = options.dup
    fork = options.delete(:fork)
    daemonize = options.delete(:daemonize)

    options[:ssl] ||= {
      server: {},
      client: {}
    }

    options = {
        agent: {
            url:      options[:agent],
            strategy: options[:strategy]
        },
        rpc:        {
            server_port:             options[:port]    || Utilities.available_port,
            server_address:          options[:address] || '127.0.0.1',
            server_external_address: options[:external_address],

            ssl_ca:                 options[:ssl][:ca],
            server_ssl_private_key: options[:ssl][:server][:private_key],
            server_ssl_certificate: options[:ssl][:server][:certificate],
            client_ssl_private_key: options[:ssl][:client][:private_key],
            client_ssl_certificate: options[:ssl][:client][:certificate],
        },
        paths: {
          application: options[:application]  || Options.paths.application
        }
    }

    pid = Manager.spawn( :scheduler, options: options, fork: fork, daemonize: daemonize )

    url = "#{options[:rpc][:server_address]}:#{options[:rpc][:server_port]}"
    while sleep( 0.1 )
        begin
            connect( url, connection_pool_size: 1, max_retries: 1 ).alive?
            break
        rescue => e
            # ap e
        end
    end

    @list << url
    connect( url, fresh: true ).tap { |c| c.pid = pid }
end