This is an automated email from the ASF dual-hosted git repository. bbender pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode-native.git
The following commit(s) were added to refs/heads/develop by this push: new b7dab15 Allow --handshake and --messages flags to coexist in gnmsg (#935) b7dab15 is described below commit b7dab150b3ec7973995e88bbe7e257b59374d100 Author: Blake Bender <bben...@pivotal.io> AuthorDate: Thu Feb 24 16:07:42 2022 -0800 Allow --handshake and --messages flags to coexist in gnmsg (#935) --- tools/gnmsg/gnmsg.py | 18 ++----- tools/gnmsg/handshake_decoder.py | 107 +++++++++++++++++++-------------------- 2 files changed, 57 insertions(+), 68 deletions(-) diff --git a/tools/gnmsg/gnmsg.py b/tools/gnmsg/gnmsg.py index b616729..d2fd9ad 100755 --- a/tools/gnmsg/gnmsg.py +++ b/tools/gnmsg/gnmsg.py @@ -39,24 +39,11 @@ def scan_opened_file( start_string, ): separator = start_string - if dump_handshake: - handshake_decoder = HandshakeDecoder(output_queue) - for line in file: - handshake_decoder.process_line(line.decode("utf-8").rstrip()) - try: - data = output_queue.get_nowait() - for key, value in data.items(): - if key == "handshake": - print(separator + json.dumps(value, indent=2, default=str)) - separator = "," - except queue.Empty: - continue - - separator = start_string for line in file: linestr = line.decode("utf-8").rstrip() client_decoder.process_line(linestr) server_decoder.process_line(linestr) + handshake_decoder.process_line(linestr) try: data = output_queue.get_nowait() for key, value in data.items(): @@ -68,6 +55,9 @@ def scan_opened_file( else: print(separator + json.dumps(value, indent=2, default=str)) separator = "," + elif key == "handshake" and dump_handshake: + print(separator + json.dumps(value, indent=2, default=str)) + separator = "," except queue.Empty: continue diff --git a/tools/gnmsg/handshake_decoder.py b/tools/gnmsg/handshake_decoder.py index dc59aed..669bf0c 100644 --- a/tools/gnmsg/handshake_decoder.py +++ b/tools/gnmsg/handshake_decoder.py @@ -64,14 +64,14 @@ class HandshakeDecoder(DecoderBase): def is_candidate_line(self, line): return "Helper::sendR" in line or "ake bytes:" in line - def is_client_connection_request(self, line): + def is_locator_request(self, line): match = self.client_connection_request_expression_.search(line) if match: return True else: return False - def get_client_connection_request_parts(self, line, parts): + def get_locator_request_parts(self, line, parts): result = False match = self.client_connection_request_expression_.search(line) if match: @@ -82,14 +82,14 @@ class HandshakeDecoder(DecoderBase): return result - def is_client_connection_response(self, line): + def is_locator_response(self, line): match = self.client_connection_response_expression_.search(line) if match: return True else: return False - def get_client_connection_response_parts(self, line, parts): + def get_locator_response_parts(self, line, parts): result = False match = self.client_connection_response_expression_.search(line) if match: @@ -425,52 +425,6 @@ class HandshakeDecoder(DecoderBase): locator_list_request["servergroup"] = server_group return locator_list_request, offset - def decode_locator_request(self, line, handshake_request): - parts = [] - if self.get_client_connection_request_parts(line, parts): - offset = 0 - handshake_request["Timestamp"] = parts[0] - handshake_request["tid"] = parts[1] - handshake_request["Direction"] = "--->" - request_bytes = parts[2] - - (handshake_request["GossipVersion"], offset) = call_reader_function( - request_bytes, offset, read_int_value - ) - (handshake_request["ProtocolOrdinal"], offset) = call_reader_function( - request_bytes, offset, read_short_value - ) - - (ds_code, offset) = call_reader_function( - request_bytes, offset, read_byte_value - ) - - (dsfid, offset) = call_reader_function( - request_bytes, offset, read_byte_value - ) - request_type = ds_fids[dsfid] - handshake_request["Type"] = request_type - if request_type == "ClientConnectionRequest": - ( - handshake_request["ClientConnectionRequest"], - offset, - ) = self.read_client_connection_request(request_bytes, offset) - - elif request_type == "QueueConnectionRequest": - ( - handshake_request["QueueConnectionRequest"], - offset, - ) = self.read_queue_connection_request(request_bytes, offset) - - elif request_type == "LocatorListRequest": - ( - handshake_request["LocatorListRequest"], - offset, - ) = self.read_locator_list_request(request_bytes, offset) - else: - pass - # TODO: decode other request types (locator list, server list, ...) - def read_server_location(self, line, offset): server_location = {} (server_location["hostname"], offset) = read_cacheable_ascii_string_value( @@ -538,16 +492,61 @@ class HandshakeDecoder(DecoderBase): locator_list_response["LocatorLocations"] = locator_locations return locator_list_response, offset + def decode_locator_request(self, line, handshake_request): + parts = [] + if self.get_locator_request_parts(line, parts): + offset = 0 + handshake_request["Timestamp"] = parts[0] + handshake_request["tid"] = parts[1] + handshake_request["Direction"] = "--->" + request_bytes = parts[2] + + (handshake_request["GossipVersion"], offset) = call_reader_function( + request_bytes, offset, read_int_value + ) + (handshake_request["ProtocolOrdinal"], offset) = call_reader_function( + request_bytes, offset, read_short_value + ) + + (ds_code, offset) = call_reader_function( + request_bytes, offset, read_byte_value + ) + + (dsfid, offset) = call_reader_function( + request_bytes, offset, read_byte_value + ) + request_type = ds_fids[dsfid] + handshake_request["Type"] = request_type + if request_type == "ClientConnectionRequest": + ( + handshake_request["ClientConnectionRequest"], + offset, + ) = self.read_client_connection_request(request_bytes, offset) + + elif request_type == "QueueConnectionRequest": + ( + handshake_request["QueueConnectionRequest"], + offset, + ) = self.read_queue_connection_request(request_bytes, offset) + + elif request_type == "LocatorListRequest": + ( + handshake_request["LocatorListRequest"], + offset, + ) = self.read_locator_list_request(request_bytes, offset) + else: + pass + # TODO: decode other request types (locator list, server list, ...) + def decode_locator_response(self, line, handshake_response): parts = [] - if self.get_client_connection_response_parts(line, parts): + if self.get_locator_response_parts(line, parts): handshake_response["Timestamp"] = parts[0] handshake_response["tid"] = parts[1] handshake_response["Direction"] = "<---" response_bytes = parts[2] offset = 0 - handshake_response["Direction"] = "<---" (ssl_enabled, offset) = call_reader_function( response_bytes, offset, read_byte_value ) @@ -584,10 +583,10 @@ class HandshakeDecoder(DecoderBase): return handshake = {} - if self.is_client_connection_request(line): + if self.is_locator_request(line): self.decode_locator_request(line, handshake) self.output_queue_.put({"handshake": handshake}) - elif self.is_client_connection_response(line): + elif self.is_locator_response(line): self.decode_locator_response(line, handshake) self.output_queue_.put({"handshake": handshake}) elif self.is_server_handshake_trace(line):