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 8db8059 GEODE-9054: Parse ADD_PDX_TYPE message from client in gnmsg
(#773)
8db8059 is described below
commit 8db8059c9f1183fd00761660899ac78740cb8065
Author: Blake Bender <[email protected]>
AuthorDate: Tue Mar 30 08:50:03 2021 -0700
GEODE-9054: Parse ADD_PDX_TYPE message from client in gnmsg (#773)
---
tools/gnmsg/client_messages.py | 60 ++++++++++++++++++++++++++++--------------
tools/gnmsg/read_parts.py | 53 +++++++++++++++++++++++++++++++++++++
tools/gnmsg/server_messages.py | 33 +++++------------------
3 files changed, 99 insertions(+), 47 deletions(-)
diff --git a/tools/gnmsg/client_messages.py b/tools/gnmsg/client_messages.py
index c4bb65c..0463046 100644
--- a/tools/gnmsg/client_messages.py
+++ b/tools/gnmsg/client_messages.py
@@ -17,20 +17,19 @@ import sys
import json
from read_values import (
- read_number_from_hex_string,
+ call_reader_function,
+ parse_key_or_value,
read_byte_value,
- read_number_from_hex_string,
- read_short_value,
- read_number_from_hex_string,
+ read_cacheable,
read_int_value,
+ read_jmutf8_string_value,
read_long_value,
+ read_short_value,
read_string_value,
- read_jmutf8_string_value,
- read_number_from_hex_string,
- call_reader_function,
- read_cacheable,
- parse_key_or_value,
+ read_unsigned_byte_value,
)
+from read_parts import read_object_header, read_int_part
+from numeric_conversion import decimal_string_to_hex_string, int_to_hex_string
CHARS_IN_MESSAGE_HEADER = 34
@@ -403,25 +402,46 @@ def read_key_set(properties, message_bytes, offset):
(properties["Region"], offset) = parse_region_part(message_bytes, offset)
+def read_object_as_raw_bytes(message_bytes, offset):
+ raw_bytes_part, offset = read_object_header(message_bytes, offset)
+
+ bytes_string = ""
+ for i in range(raw_bytes_part["Size"]):
+ if i:
+ bytes_string += " "
+ byte_val, offset = call_reader_function(
+ message_bytes, offset, read_unsigned_byte_value
+ )
+ bytes_string += decimal_string_to_hex_string(str(byte_val))
+ raw_bytes_part["Bytes"] = bytes_string
+ return raw_bytes_part, offset
+
+
+def read_add_pdx_type_message(properties, message_bytes, offset):
+ properties["PdxType"], offset = read_object_as_raw_bytes(message_bytes,
offset)
+ properties["TypeId"], offset = read_int_part(message_bytes, offset)
+
+
client_message_parsers = {
- "PUT": read_put_message,
- "REQUEST": read_request_message,
+ "ADD_PDX_TYPE": read_add_pdx_type_message,
+ "CLOSECQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
"CLOSE_CONNECTION": read_close_connection_message,
"CONTAINS_KEY": read_contains_key_message,
"DESTROY": read_destroy_message,
- "GET_CLIENT_PARTITION_ATTRIBUTES":
read_get_client_partition_attributes_message,
- "GET_CLIENT_PR_METADATA": read_get_client_pr_metadata_message,
- "QUERY": read_query_message,
- "USER_CREDENTIAL_MESSAGE": read_user_credential_message,
"EXECUTECQ_MSG_TYPE": read_executecq_msg_type_message,
"EXECUTECQ_WITH_IR_MSG_TYPE": read_executecq_with_ir_msg_type_message,
- "STOPCQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
- "CLOSECQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
+ "EXECUTE_FUNCTION": read_execute_function_message,
"GET_ALL_70": read_get_all_70_message,
- "KEY_SET": read_key_set,
- "GET_PDX_ID_FOR_TYPE": read_get_pdx_id_for_type_message,
+ "GET_CLIENT_PARTITION_ATTRIBUTES":
read_get_client_partition_attributes_message,
+ "GET_CLIENT_PR_METADATA": read_get_client_pr_metadata_message,
"GET_FUNCTION_ATTRIBUTES": read_get_function_attributes_message,
- "EXECUTE_FUNCTION": read_execute_function_message,
+ "GET_PDX_ID_FOR_TYPE": read_get_pdx_id_for_type_message,
+ "KEY_SET": read_key_set,
+ "PUT": read_put_message,
+ "QUERY": read_query_message,
+ "REQUEST": read_request_message,
+ "STOPCQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
+ "USER_CREDENTIAL_MESSAGE": read_user_credential_message,
}
diff --git a/tools/gnmsg/read_parts.py b/tools/gnmsg/read_parts.py
new file mode 100644
index 0000000..4d9d12a
--- /dev/null
+++ b/tools/gnmsg/read_parts.py
@@ -0,0 +1,53 @@
+#!/usr/local/bin/python3
+
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from read_values import (
+ call_reader_function,
+ parse_key_or_value,
+ read_byte_value,
+ read_cacheable,
+ read_int_value,
+ read_short_value,
+ read_unsigned_byte_value,
+ read_unsigned_vl,
+ read_string_value,
+)
+from numeric_conversion import int_to_hex_string
+
+
+def read_object_header(message_bytes, offset):
+ object_base = {}
+ (object_base["Size"], offset) = call_reader_function(
+ message_bytes, offset, read_int_value
+ )
+ (object_base["IsObject"], offset) = call_reader_function(
+ message_bytes, offset, read_byte_value
+ )
+ return object_base, offset
+
+
+def read_object_part(message_bytes, offset):
+ object_part, offset = read_object_header(message_bytes, offset)
+
+ offset += 2 * object_part["Size"]
+ return object_part, offset
+
+
+def read_int_part(message_bytes, offset):
+ int_part, offset = read_object_header(message_bytes, offset)
+
+ int_value, offset = call_reader_function(message_bytes, offset,
read_int_value)
+ int_part["Value"] = int_to_hex_string(int_value)
+ return int_part, offset
diff --git a/tools/gnmsg/server_messages.py b/tools/gnmsg/server_messages.py
index 29771b6..a4616ae 100644
--- a/tools/gnmsg/server_messages.py
+++ b/tools/gnmsg/server_messages.py
@@ -24,6 +24,7 @@ from read_values import (
read_unsigned_vl,
read_string_value,
)
+from read_parts import read_object_header, read_object_part, read_int_part
from numeric_conversion import decimal_string_to_hex_string, int_to_hex_string
from gnmsg_globals import global_protocol_state
from enum import IntFlag
@@ -76,17 +77,6 @@ def read_partition_attributes(properties, message_bytes,
offset):
# TODO: parse part 3 if it is not partition resolver but list of
partition attributes
-def read_object_header(message_bytes, offset):
- object_base = {}
- (object_base["Size"], offset) = call_reader_function(
- message_bytes, offset, read_int_value
- )
- (object_base["IsObject"], offset) = call_reader_function(
- message_bytes, offset, read_byte_value
- )
- return object_base, offset
-
-
def read_bytes_part(message_bytes, offset):
bytes_part, offset = read_object_header(message_bytes, offset)
@@ -100,14 +90,6 @@ def read_bytes_part(message_bytes, offset):
return bytes_part, offset
-def read_int_part(message_bytes, offset):
- int_part, offset = read_object_header(message_bytes, offset)
-
- int_value, offset = call_reader_function(message_bytes, offset,
read_int_value)
- int_part["Value"] = decimal_string_to_hex_string(str(int_value))
- return int_part, offset
-
-
def read_old_value_part(message_bytes, offset):
old_value_part, offset = read_object_header(message_bytes, offset)
@@ -123,13 +105,6 @@ def read_old_value_part(message_bytes, offset):
return old_value_part, offset
-def read_object_part(message_bytes, offset):
- object_part, offset = read_object_header(message_bytes, offset)
-
- offset += 2 * object_part["Size"]
- return object_part, offset
-
-
def read_put_reply(properties, message_bytes, offset):
(properties["Bytes"], offset) = read_bytes_part(message_bytes, offset)
(properties["Flags"], offset) = read_int_part(message_bytes, offset)
@@ -271,14 +246,18 @@ def read_destroy_reply(properties, message_bytes, offset):
message_bytes, offset
)
+
def read_exception_msg(properties, message_bytes, offset):
- (properties["SerializedJavaObjectPart"], offset) =
read_object_part(message_bytes, offset)
+ (properties["SerializedJavaObjectPart"], offset) = read_object_part(
+ message_bytes, offset
+ )
object_part, offset = read_object_header(message_bytes, offset)
(object_part["ExceptionMessageAndCallstack"], offset) = read_string_value(
message_bytes, object_part["Size"], offset
)
properties["StringRepresentationPart"] = object_part
+
server_message_parsers = {
"CONTAINS_KEY_RESPONSE": read_contains_key_response,
"DESTROY_REPLY": read_destroy_reply,