You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by ms...@apache.org on 2021/12/01 23:03:00 UTC
[incubator-teaclave] branch master updated: Optimize RPC memory footprint of serde (#577)
This is an automated email from the ASF dual-hosted git repository.
mssun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave.git
The following commit(s) were added to refs/heads/master by this push:
new edc10fd Optimize RPC memory footprint of serde (#577)
edc10fd is described below
commit edc10fd8d9dc6f442dd946b721ed9383cfd01bb9
Author: Mingshen Sun <bo...@mssun.me>
AuthorDate: Wed Dec 1 15:02:55 2021 -0800
Optimize RPC memory footprint of serde (#577)
---
examples/python/wasm_rust_psi_payload/Cargo.lock | 2 +-
rpc/src/request.rs | 1 -
sdk/python/teaclave.py | 48 ++++++++++++++++--------
services/proto/proto_gen/templates/proto.j2 | 2 +-
tests/scripts/functional_tests.py | 9 +++--
types/src/staged_function.rs | 1 -
6 files changed, 40 insertions(+), 23 deletions(-)
diff --git a/examples/python/wasm_rust_psi_payload/Cargo.lock b/examples/python/wasm_rust_psi_payload/Cargo.lock
index 6795859..d367651 100644
--- a/examples/python/wasm_rust_psi_payload/Cargo.lock
+++ b/examples/python/wasm_rust_psi_payload/Cargo.lock
@@ -2,7 +2,7 @@
# It is not intended for manual editing.
[[package]]
name = "teaclave_context"
-version = "0.1.0"
+version = "0.2.0"
[[package]]
name = "wasm_rust_psi_payload"
diff --git a/rpc/src/request.rs b/rpc/src/request.rs
index 242b8f3..7a77348 100644
--- a/rpc/src/request.rs
+++ b/rpc/src/request.rs
@@ -24,7 +24,6 @@ pub struct Request<T> {
#[serde(skip_serializing_if = "HashMap::is_empty")]
#[serde(default)]
pub metadata: HashMap<String, String>,
- #[serde(flatten)]
pub message: T,
}
diff --git a/sdk/python/teaclave.py b/sdk/python/teaclave.py
index 9d0d105..1adf540 100644
--- a/sdk/python/teaclave.py
+++ b/sdk/python/teaclave.py
@@ -50,6 +50,10 @@ __all__ = [
Metadata = Dict[str, str]
+class Request:
+ pass
+
+
class FunctionInput:
"""Function input for registering.
@@ -112,14 +116,14 @@ class CryptoInfo:
self.iv = iv
-class UserRegisterReqeust:
+class UserRegisterRequest(Request):
def __init__(self, user_id: str, user_password: str):
self.request = "user_register"
self.id = user_id
self.password = user_password
-class UserLoginRequest:
+class UserLoginRequest(Request):
def __init__(self, user_id: str, user_password: str):
self.request = "user_login"
self.id = user_id
@@ -190,7 +194,7 @@ class AuthenticationClient:
user_id: User ID.
user_password: Password.
"""
- request = UserRegisterReqeust(user_id, user_password)
+ request = UserRegisterRequest(user_id, user_password)
_write_message(self.channel, request)
_ = _read_message(self.channel)
@@ -256,7 +260,7 @@ class FrontendService:
return FrontendClient(self._channel)
-class RegisterFunctionRequest:
+class RegisterFunctionRequest(Request):
def __init__(self, metadata: Metadata, name: str, description: str,
executor_type: str, public: bool, payload: List[int],
arguments: List[str], inputs: List[FunctionInput],
@@ -273,7 +277,7 @@ class RegisterFunctionRequest:
self.outputs = outputs
-class RegisterInputFileRequest:
+class RegisterInputFileRequest(Request):
def __init__(self, metadata: Metadata, url: str, cmac: List[int],
crypto_info: CryptoInfo):
self.request = "register_input_file"
@@ -283,7 +287,7 @@ class RegisterInputFileRequest:
self.crypto_info = crypto_info
-class RegisterOutputFileRequest:
+class RegisterOutputFileRequest(Request):
def __init__(self, metadata: Metadata, url: str, crypto_info: CryptoInfo):
self.request = "register_output_file"
self.metadata = metadata
@@ -291,7 +295,7 @@ class RegisterOutputFileRequest:
self.crypto_info = crypto_info
-class UpdateInputFileRequest:
+class UpdateInputFileRequest(Request):
def __init__(self, metadata: Metadata, data_id: str, url: str):
self.request = "update_input_file"
self.metadata = metadata
@@ -299,7 +303,7 @@ class UpdateInputFileRequest:
self.url = url
-class UpdateOutputFileRequest:
+class UpdateOutputFileRequest(Request):
def __init__(self, metadata: Metadata, data_id: str, url: str):
self.request = "update_output_file"
self.metadata = metadata
@@ -307,7 +311,7 @@ class UpdateOutputFileRequest:
self.url = url
-class CreateTaskRequest:
+class CreateTaskRequest(Request):
def __init__(self, metadata: Metadata, function_id: str,
function_arguments: Dict[str, Any], executor: str,
inputs_ownership: List[OwnerList],
@@ -321,7 +325,7 @@ class CreateTaskRequest:
self.outputs_ownership = outputs_ownership
-class AssignDataRequest:
+class AssignDataRequest(Request):
def __init__(self, metadata: Metadata, task_id: str, inputs: List[DataMap],
outputs: List[DataMap]):
self.request = "assign_data"
@@ -331,21 +335,21 @@ class AssignDataRequest:
self.outputs = outputs
-class ApproveTaskRequest:
+class ApproveTaskRequest(Request):
def __init__(self, metadata: Metadata, task_id: str):
self.request = "approve_task"
self.metadata = metadata
self.task_id = task_id
-class InvokeTaskRequest:
+class InvokeTaskRequest(Request):
def __init__(self, metadata: Metadata, task_id: str):
self.request = "invoke_task"
self.metadata = metadata
self.task_id = task_id
-class GetTaskRequest:
+class GetTaskRequest(Request):
def __init__(self, metadata: Metadata, task_id: str):
self.request = "get_task"
self.metadata = metadata
@@ -448,9 +452,21 @@ class FrontendClient:
def _write_message(sock: ssl.SSLSocket, message: Any):
class RequestEncoder(json.JSONEncoder):
def default(self, o):
- return o.__dict__
-
- message = json.dumps(message, cls=RequestEncoder).encode()
+ if isinstance(o, Request):
+ request = o.__dict__["request"]
+ j = {}
+ j["message"] = {}
+ j["message"][request] = {}
+ for k, v in o.__dict__.items():
+ if k == "metadata": j[k] = v
+ elif k == "request": continue
+ else: j["message"][request][k] = v
+ return j
+ else:
+ return o.__dict__
+
+ message = json.dumps(message, cls=RequestEncoder,
+ separators=(',', ':')).encode()
sock.sendall(struct.pack(">Q", len(message)))
sock.sendall(message)
diff --git a/services/proto/proto_gen/templates/proto.j2 b/services/proto/proto_gen/templates/proto.j2
index a1f96e9..84ffdaa 100644
--- a/services/proto/proto_gen/templates/proto.j2
+++ b/services/proto/proto_gen/templates/proto.j2
@@ -18,7 +18,7 @@ under the License.
#}
#[derive(Clone, serde::Serialize, serde::Deserialize, Debug)]
-#[serde(tag = "request", rename_all = "snake_case")]
+#[serde(rename_all = "snake_case")]
pub enum {{ service.proto_name }}Request {
{%- for m in service.methods %}
{{ m.proto_name }}({{ m.input_type }}),
diff --git a/tests/scripts/functional_tests.py b/tests/scripts/functional_tests.py
index d1232ca..aa7820d 100755
--- a/tests/scripts/functional_tests.py
+++ b/tests/scripts/functional_tests.py
@@ -140,9 +140,12 @@ class TestAuthenticationService(unittest.TestCase):
user_password = "invalid_password"
message = {
- "request": "user_login",
- "id": user_id,
- "password": user_password
+ "message": {
+ "user_login": {
+ "id": user_id,
+ "password": user_password
+ }
+ }
}
write_message(self.socket, message)
diff --git a/types/src/staged_function.rs b/types/src/staged_function.rs
index 3c706e0..3607850 100644
--- a/types/src/staged_function.rs
+++ b/types/src/staged_function.rs
@@ -28,7 +28,6 @@ type ArgumentValue = serde_json::Value;
#[derive(Clone, Serialize, Deserialize, Debug, Default)]
pub struct FunctionArguments {
- #[serde(flatten)]
inner: serde_json::Map<String, ArgumentValue>,
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org