def test_master_process(self): """ Test """ self.assertEqual(SolBase.get_master_process(), True) SolBase.set_master_process(False) self.assertEqual(SolBase.get_master_process(), False) SolBase.set_master_process(True) self.assertEqual(SolBase.get_master_process(), True)
def _start_server(self): """ Low level start """ # Allocate a server, and provide a connection callback logger.info("listen_addr=%s", self._tcp_server_config.listen_addr) logger.info("listen_port=%s", self._tcp_server_config.listen_port) logger.info("ssl_enable=%s", self._tcp_server_config.ssl_enable) logger.info("ssl_key_file=%s", self._tcp_server_config.ssl_key_file) logger.info("ssl_certificate_file=%s", self._tcp_server_config.ssl_certificate_file) logger.info("child_process_count=%s", self._tcp_server_config.child_process_count) logger.info("ssl_handshake_timeout_ms=%s", self._tcp_server_config.ssl_handshake_timeout_ms) logger.info("onstop_call_client_stopsynch=%s", self._tcp_server_config.onstop_call_client_stopsynch) logger.info("socket_absolute_timeout_ms=%s", self._tcp_server_config.socket_absolute_timeout_ms) logger.info("socket_relative_timeout_ms=%s", self._tcp_server_config.socket_relative_timeout_ms) logger.info("socket_min_checkinterval_ms=%s", self._tcp_server_config.socket_min_checkinterval_ms) logger.info("_effective_control_interval_ms=%s", self._effective_control_interval_ms) logger.info("stop_client_timeout_ms=%s", self._tcp_server_config.stop_client_timeout_ms) logger.info("stop_server_timeout_ms=%s", self._tcp_server_config.stop_server_timeout_ms) logger.info("client_factory=%s", self._tcp_server_config.client_factory) if self._tcp_server_config.ssl_enable is False: # No SSL logger.info("Starting in TCP/CLEAR mode") self._server = StreamServerNoClose( (self._tcp_server_config.listen_addr, self._tcp_server_config.listen_port), self._on_connection) else: # SSL ON logger.info("Starting in TCP/SSL mode") self._server = StreamServerNoClose( (self._tcp_server_config.listen_addr, self._tcp_server_config.listen_port), self._on_connection, # SSL enabling keyfile=self._tcp_server_config.ssl_key_file, certfile=self._tcp_server_config.ssl_certificate_file, # SSL handshake after accept do_handshake_on_connect=True, # TLS ssl_version=PROTOCOL_TLSv1, # Cipher # ciphers="RC4-MD5", # Args ) self._server.min_delay = 0.0 self._server.max_delay = 0.0 # Startup if self._tcp_server_config.child_process_count <= 0: # Normal start-up logger.info("Starting in NON-FORKED mode") self._server.start() else: # Child process startup : prestart logger.info("Pre-starting in FORKED mode, subprocess=%s", self._tcp_server_config.child_process_count) # GEVENT_RC1 fix : pre_start => init_socket self._server.init_socket() # Let's rock logger.info("Forking gevent") for idx in range(self._tcp_server_config.child_process_count): # Fork gevent hub # GEVENT_RC1 fix : hub.fork => os.fork _fork_pid = gevent.fork() logger.info("Forking gevent hub done, idx=%s, forkPid=%s, %s", idx, _fork_pid, SolBase.get_current_pid_as_string()) # Check it if _fork_pid == 0: # We are in a child => exit this loop SolBase.set_master_process(False) break else: # Master on SolBase.set_master_process(True) # Store child pid logger.info("Storing child _fork_pid=%s", _fork_pid) self._fork_pid_list.append(int(_fork_pid)) # Start accepting now (parent and all sub-processes) logger.info("Accepting now, %s", SolBase.get_current_pid_as_string()) self._server.start_accepting()