Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
Reviewed
Description
Currently in ObserverReadProxyProvider constructor there is this line
((ClientHAProxyFactory<T>) factory).setAlignmentContext(alignmentContext);
This could potentially cause failure, because it is possible that factory can not be casted here. Specifically, NameNodeProxiesClient.createFailoverProxyProvider is where the constructor will be called, and there are two paths that could call into this:
(1).NameNodeProxies.createProxy
(2).NameNodeProxiesClient.createFailoverProxyProvider
(2) works fine because it always uses ClientHAProxyFactory but (1) uses NameNodeHAProxyFactory which can not be casted to ClientHAProxyFactory, this happens when, for example, running NNThroughputBenmarck. To fix this we can at least:
1. introduce setAlignmentContext to HAProxyFactory which is the parent of both ClientHAProxyFactory and NameNodeHAProxyFactory OR
2. only setAlignmentContext when it is ClientHAProxyFactory by, say, having a if check with reflection.
Depending on whether it make sense to have alignment context for the case (1) calling code paths.