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

    https://github.com/apache/phoenix/pull/236#discussion_r120394548
  
    --- Diff: 
phoenix-queryserver/src/main/java/org/apache/phoenix/queryserver/server/QueryServer.java
 ---
    @@ -233,16 +240,29 @@ public int run(String[] args) throws Exception {
           // Build and start the HttpServer
           server = builder.build();
           server.start();
    +      registerToServiceProvider(hostname);
           runningLatch.countDown();
           server.join();
           return 0;
         } catch (Throwable t) {
           LOG.fatal("Unrecoverable service error. Shutting down.", t);
           this.t = t;
           return -1;
    +    } finally {
    +      deRegister();
         }
       }
     
    +  private void registerToServiceProvider(String hostName) throws Exception 
{
    +      PqsZookeeperConf pqsZookeeperConf = new 
PqsZookeeperConfImpl(getConf());
    --- End diff --
    
    Oh, I see now. You're instantiating these implementations directly.
    
    I think you should use Java's ServiceLoader to properly separate properly 
separate interface from implementation across the queryserver and loadbalancer 
modules. Here in queryserver, you would just refer to PqsZookeeperConf and 
Registry (but the concrete implementations would be wired up by ServiceLoader 
as defined by the META-INF/services/... files you create). 
    
    If you're not familiar: 
https://docs.oracle.com/javase/tutorial/ext/basics/spi.html. Should be pretty 
straightforward. e.g. this is also how the PhoenixDriver class is loaded for 
JDBC (so there's example of what to do in phoenix-core).


---
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