You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by sudheeshkatkam <gi...@git.apache.org> on 2017/09/29 22:27:27 UTC
[GitHub] drill pull request #921: DRILL-4286 Graceful shutdown of drillbit
Github user sudheeshkatkam commented on a diff in the pull request:
https://github.com/apache/drill/pull/921#discussion_r141980790
--- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/coord/local/LocalClusterCoordinator.java ---
@@ -85,13 +88,62 @@ public void unregister(final RegistrationHandle handle) {
endpoints.remove(handle);
}
+ /**
+ * Update drillbit endpoint state. Drillbit advertises its
+ * state. State information is used during planning and initial
+ * client connection phases.
+ */
+ @Override
+ public RegistrationHandle update(RegistrationHandle handle, State state) {
+ DrillbitEndpoint endpoint = handle.getEndPoint();
+ endpoint = endpoint.toBuilder().setState(state).build();
+ handle.setEndPoint(endpoint);
+ endpoints.put(handle,endpoint);
+ return handle;
+ }
+
@Override
public Collection<DrillbitEndpoint> getAvailableEndpoints() {
return endpoints.values();
}
+ /**
+ * 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.values()){
+ if(endpoint.getState().equals(State.ONLINE)) {
--- End diff --
This check should be:
`if(!endpoint.hasState() || endpoint.getState().equals(State.ONLINE)) {`
to not break backward compatibility (new client and old cluster of bits). So the assumption is that old server is ONLINE.
---