[
https://issues.apache.org/jira/browse/HDDS-14886?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tsz-wo Sze updated HDDS-14886:
------------------------------
Description:
SCMHAInvocationHandler and the related classes use reflection to implement
method calls. Reflection is inefficient and makes the code hard to understand.
We should avoid it.
More details:
All the handlers has a well defined, fixed interface. However, the current
approach is
# Forget the interface and use Object for the handlers.
{code:java}
//SCMStateMachine
private Map<RequestType, Object> handlers;
{code}
# Use reflection to invoke method calls in SCMStateMachine.process(..).
# Use Java Proxy and InvocationHandler to decide whether to invokeLocal,
invokeRatisServer or invokeRatisClient.
Since all the interfaces/methods/annotations are fixed at compile time, it
actually does not need any reflections/Proxy/InvocationHandler. For examples,
- Example: when calling PipelineStateManager.addPipeline(..), we know that it
needs DIRECT Replicate, we could just use invokeRatisServer instead of using
reflection to go through Proxy -> SCMHAInvocationHandler -> invokeRatisServer.
was:
SCMHAInvocationHandler and the related classes use reflection to implement
method calls. Reflection is inefficient and makes the code hard to understand.
We should avoid it.
The idea is similar to HDDS-14647.
The idea is similar to HDDS-14647.
> Umbrella: Improve SCMHAInvocationHandler
> ----------------------------------------
>
> Key: HDDS-14886
> URL: https://issues.apache.org/jira/browse/HDDS-14886
> Project: Apache Ozone
> Issue Type: Improvement
> Components: SCM HA
> Reporter: Tsz-wo Sze
> Assignee: Chen-Jheng Sing
> Priority: Major
>
> SCMHAInvocationHandler and the related classes use reflection to implement
> method calls. Reflection is inefficient and makes the code hard to
> understand. We should avoid it.
> More details:
> All the handlers has a well defined, fixed interface. However, the current
> approach is
> # Forget the interface and use Object for the handlers.
> {code:java}
> //SCMStateMachine
> private Map<RequestType, Object> handlers;
> {code}
> # Use reflection to invoke method calls in SCMStateMachine.process(..).
> # Use Java Proxy and InvocationHandler to decide whether to invokeLocal,
> invokeRatisServer or invokeRatisClient.
> Since all the interfaces/methods/annotations are fixed at compile time, it
> actually does not need any reflections/Proxy/InvocationHandler. For examples,
> - Example: when calling PipelineStateManager.addPipeline(..), we know that
> it needs DIRECT Replicate, we could just use invokeRatisServer instead of
> using reflection to go through Proxy -> SCMHAInvocationHandler ->
> invokeRatisServer.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]