def wait_until_server_responds(self, expected_type): current_handler = self.current_handler def continue_while_no_response(any_activity): return (not current_handler.response_ready) self.poll_connections_until_stopped([self.current_connection], continue_while_no_response, timeout=self.poll_timeout) if not self.current_handler.response_ready: raise InvalidAdminClientState('Admin client timed out after %f second(s)' % self.poll_timeout) cmd_type, cmd_resp = self.current_handler.pop_response() if cmd_type != expected_type: raise InvalidAdminClientState('Received an unexpected response... got command %r, expecting command %r' % (cmd_type, expected_type)) return cmd_resp
def pop_response(self): if not self._sent_commands or not self._recv_responses: raise InvalidAdminClientState( 'Attempted to pop a response for a command that is not ready') sent_command = self._sent_commands.popleft() recv_response = self._recv_responses.popleft() return sent_command, recv_response
def ping_server(self): """Sends off a debugging string to execute an application ping on the Gearman server""" start_time = time.time() self.establish_admin_connection() self.current_handler.send_echo_request(ECHO_STRING) server_response = self.wait_until_server_responds(GEARMAN_COMMAND_ECHO_REQ) if server_response != ECHO_STRING: raise InvalidAdminClientState("Echo string mismatch: got %s, expected %s" % (server_response, ECHO_STRING)) elapsed_time = time.time() - start_time return elapsed_time
def recv_text_command(self, raw_text): """Catch GEARMAN_COMMAND_TEXT_COMMAND's and forward them onto their respective recv_server_* callbacks""" if not self._sent_commands: raise InvalidAdminClientState( 'Received an unexpected server response') # Peek at the first command cmd_type = self._sent_commands[0] recv_server_command_function_name = 'recv_server_%s' % cmd_type cmd_callback = getattr(self, recv_server_command_function_name, None) if not cmd_callback: gearman_logger.error('Could not handle command: %r - %r' % (cmd_type, raw_text)) raise ValueError('Could not handle command: %r - %r' % (cmd_type, raw_text)) # This must match the parameter names as defined in the command handler completed_work = cmd_callback(raw_text) return completed_work