[ https://issues.apache.org/jira/browse/DRILL-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16252575#comment-16252575 ]
ASF GitHub Bot commented on DRILL-4286: --------------------------------------- Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/921#discussion_r150971745 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/coord/zk/ZKClusterCoordinator.java --- @@ -200,11 +206,50 @@ public void unregister(RegistrationHandle handle) { } } + /** + * Update drillbit endpoint state. Drillbit advertises its + * state in Zookeeper when a shutdown request of drillbit is + * triggered. State information is used during planning and + * initial client connection phases. + */ + public RegistrationHandle update(RegistrationHandle handle, State state) { + ZKRegistrationHandle h = (ZKRegistrationHandle) handle; + try { + endpoint = h.endpoint.toBuilder().setState(state).build(); + ServiceInstance<DrillbitEndpoint> serviceInstance = ServiceInstance.<DrillbitEndpoint>builder() + .name(serviceName) + .id(h.id) + .payload(endpoint).build(); + discovery.updateService(serviceInstance); + } catch (Exception e) { + e.printStackTrace(); + } + return handle; + } + @Override public Collection<DrillbitEndpoint> getAvailableEndpoints() { return this.endpoints; } + /* + * Get a collection of ONLINE Drillbit endpoints by excluding the drillbits + * that are in QUIESCENT state (drillbits shutting down). Primarily used by the planner + * to plan queries only on ONLINE drillbits and used by the client during initial connection + * phase to connect to a drillbit (foreman) + * @return A collection of ONLINE endpoints + */ + @Override + public Collection<DrillbitEndpoint> getOnlineEndPoints() { + Collection<DrillbitEndpoint> runningEndPoints = new ArrayList<>(); + for (DrillbitEndpoint endpoint: endpoints){ + if(!endpoint.hasState() || endpoint.getState().equals(State.ONLINE)) { --- End diff -- This stanza appears multiple times. Can we define a static function that does the double check to avoid redundant code? ``` boolean isInState(State state) { ... ``` Choose an appropriate name, maybe `isDrillbitInState` or whatever. > Have an ability to put server in quiescent mode of operation > ------------------------------------------------------------ > > Key: DRILL-4286 > URL: https://issues.apache.org/jira/browse/DRILL-4286 > Project: Apache Drill > Issue Type: New Feature > Components: Execution - Flow > Reporter: Victoria Markman > Assignee: Venkata Jyothsna Donapati > > I think drill will benefit from mode of operation that is called "quiescent" > in some databases. > From IBM Informix server documentation: > {code} > Change gracefully from online to quiescent mode > Take the database server gracefully from online mode to quiescent mode to > restrict access to the database server without interrupting current > processing. After you perform this task, the database server sets a flag that > prevents new sessions from gaining access to the database server. The current > sessions are allowed to finish processing. After you initiate the mode > change, it cannot be canceled. During the mode change from online to > quiescent, the database server is considered to be in Shutdown mode. > {code} > This is different from shutdown, when processes are terminated. -- This message was sent by Atlassian JIRA (v6.4.14#64029)