drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sohami <...@git.apache.org>
Subject [GitHub] drill pull request #648: DRILL-5015: Randomly select the drillbit from the l...
Date Thu, 10 Nov 2016 09:02:20 GMT
Github user sohami commented on a diff in the pull request:

    https://github.com/apache/drill/pull/648#discussion_r87351874
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java ---
    @@ -223,19 +223,65 @@ public void connect(Properties props) throws RpcException {
         connect(null, props);
       }
     
    +  /**
    +   * Function to populate the endpointList with information of all the drillbits
    +   * provided in the connection string by client
    +   * @param endpointList - ArrayList of DrillbitEndpoints
    +   * @param drillbits - One or more drillbit ip[:port] provided in connection string
    +   */
    +  public void populateEndpointsList(ArrayList<DrillbitEndpoint> endpointList, String
drillbits){
    +
    +    // If no information about drillbits is provided then just return empty list.
    +    if(drillbits == null || drillbits.length() == 0){
    +      return;
    +    }
    +    final String[] connectInfo = drillbits.split(",");
    +
    +    /* For direct connection we can get URL string having drillbit property as below:
    +         drillbit=<ip>:<port> --- Use the IP and port specified as the Foreman
IP and port
    +         drillbit=<ip>        --- Use the IP specified as the Foreman IP with default
port in config file
    +         drillbit=<ip1>:<port1>,<ip2>:<port2>... --- Randomly
select the IP and port pair from the specified
    +                                                     list as the Foreman IP and port.
    +
    +       Fetch ip address and port information for each drillbit and populate the list
    +    */
    +    for(String info : connectInfo){
    +      info = info.trim();
    +
    +      if(info != null){
    +        // Split each info to get ip address and port value
    +        final String[] drillbitInfo = info.split(":");
    +
    +        // Check for malformed ip:port string
    +        if(drillbitInfo == null || drillbitInfo.length == 0){
    +          continue;
    +        }
    +
    +        /* If port is present use that one else use the configured one
    +           Assumptions: 1) IP Address provided in connection string is valid
    +                        2) Port without IP address is never specified.
    +        */
    +        final String port = (drillbitInfo.length == 2) ? drillbitInfo[1] : config.getString(ExecConstants.INITIAL_USER_PORT);
    +        final DrillbitEndpoint endpoint = DrillbitEndpoint.newBuilder()
    +                                          .setAddress(drillbitInfo[0])
    +                                          .setUserPort(Integer.parseInt(port))
    --- End diff --
    
    I am catching the exception that can arise from parseInt and throwing it back to the user
as InvalidConnectionInfoException with proper error message.


---
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 infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message