Github user jyates commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/55#discussion_r27270440
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/hadoop/hbase/ipc/PhoenixRpcScheduler.java 
---
    @@ -40,28 +40,34 @@
         private static final int DEFAULT_MAX_CALLQUEUE_LENGTH_PER_HANDLER = 10;
     
         private RpcScheduler delegate;
    -    private int minPriority;
    -    private int maxPriority;
    -    private RpcExecutor callExecutor;
    +    private int indexPriority;
    +    private int metadataPriority;
    +    private RpcExecutor indexCallExecutor;
    +    private RpcExecutor metadataCallExecutor;
         private int port;
     
    -    public PhoenixIndexRpcScheduler(int indexHandlerCount, Configuration 
conf,
    -            RpcScheduler delegate, int minPriority, int maxPriority) {
    +    public PhoenixRpcScheduler(int indexHandlerCount, int 
metadataHandlerCount, Configuration conf,
    --- End diff --
    
    > DelegatingPayloadCarryingRpcController. 
    
    Huh? That's an odd one to pick.
    
    It seemed to me that you wanted to do something that looked like an 
RpcScheduler (maybe drop all the priority queue, replication queue methods) and 
change dispatch to look like ```boolean dispatch(CallRunner callTask)``` where 
boolean indicates handled or not.
    
    > needs to implement getGeneralQueueLength and getActiveRpcHandlerCount
    
    If you do the 'kinda like an RpcScheduler' route then you just loop through 
all of them and sum the counts. They don't need to be instantaneously accurate 
as its just being used for metrics, not for anything critical and need to 100% 
taken at the same point (really impossible if you have more than 1 queue).
    
    > would be easier to have a map from prioirity to queue and then in 
dispatch() we just lookup the queue based on the priority
    
    Not necessarily, as priority isn't the only thing that determines which 
queue an RPC should be sent to. For instance, QosPriority annotations can be 
used to determine which queue an RPC should be sent to as well:
    ```
      @QosPriority(priority=HConstants.HIGH_QOS)
      public GetRegionInfoResponse getRegionInfo(final RpcController controller,
          final GetRegionInfoRequest request) throws ServiceException {
    ```
    
    Now that you have implemented something like what I recommended, do you 
think its cleaner? easier to reason about? I was recommending based on what 
seemed like an anti-pattern in favor of a pretty reasonable abstraction from 
unix kernel hooks (and adopted by HBase for coprocessors)...however, I'm known 
to be a little heavy on generalizations, so this could be overkill to. What do 
you think? 


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to