public Builder mergeFrom(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile other) { if (other == org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance()) return this; if (other.hasState()) { setState(other.getState());
@Override public void statusUpdate(final FragmentStatus status) { logger.debug("New fragment status was provided to QueryManager of {}", status); switch(status.getProfile().getState()) { case AWAITING_ALLOCATION: case RUNNING: case CANCELLATION_REQUESTED: updateFragmentStatus(status); break; case FAILED: foreman.addToEventQueue(QueryState.FAILED, new UserRemoteException(status.getProfile().getError())); // fall-through. case FINISHED: case CANCELLED: fragmentDone(status); break; default: throw new UnsupportedOperationException(String.format("Received status of %s", status)); } } };
/** * Sends status to remote Foreman node using Control Tunnel or to Local Foreman bypassing * Control Tunnel and using WorkEventBus. * * @param status */ void sendStatus(final FragmentStatus status) { DrillbitEndpoint foremanNode = foremanDrillbit.get(); if (foremanNode == null) { logger.warn("{}: State {} is not reported as {} is closed", QueryIdHelper.getQueryIdentifier(context.getHandle()), status.getProfile().getState(), this); return; } // Send status for both local and remote foreman node via Tunnel. For local there won't be any network connection // created and it will be submitted locally using LocalControlConnectionManager final ControlTunnel tunnel = context.getController().getTunnel(foremanNode); tunnel.sendFragmentStatus(status); }
public Builder mergeFrom(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile other) { if (other == org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance()) return this; if (other.hasState()) { setState(other.getState());
public void writeTo(com.dyuproject.protostuff.Output output, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile message) throws java.io.IOException { if(message.hasState()) output.writeEnum(1, message.getState().getNumber(), false); if(message.hasError()) output.writeObject(2, message.getError(), org.apache.drill.exec.proto.SchemaUserBitShared.DrillPBError.WRITE, false); if(message.hasMinorFragmentId()) output.writeInt32(3, message.getMinorFragmentId(), false); for(org.apache.drill.exec.proto.UserBitShared.OperatorProfile operatorProfile : message.getOperatorProfileList()) output.writeObject(4, operatorProfile, org.apache.drill.exec.proto.SchemaUserBitShared.OperatorProfile.WRITE, true); if(message.hasStartTime()) output.writeInt64(5, message.getStartTime(), false); if(message.hasEndTime()) output.writeInt64(6, message.getEndTime(), false); if(message.hasMemoryUsed()) output.writeInt64(7, message.getMemoryUsed(), false); if(message.hasMaxMemoryUsed()) output.writeInt64(8, message.getMaxMemoryUsed(), false); if(message.hasEndpoint()) output.writeObject(9, message.getEndpoint(), org.apache.drill.exec.proto.SchemaCoordinationProtos.DrillbitEndpoint.WRITE, false); if(message.hasLastUpdate()) output.writeInt64(10, message.getLastUpdate(), false); if(message.hasLastProgress()) output.writeInt64(11, message.getLastProgress(), false); } public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile message)
private boolean updateFragmentStatus(final FragmentStatus fragmentStatus) { final FragmentHandle fragmentHandle = fragmentStatus.getHandle(); final int majorFragmentId = fragmentHandle.getMajorFragmentId(); final int minorFragmentId = fragmentHandle.getMinorFragmentId(); final FragmentData data = fragmentDataMap.get(majorFragmentId).get(minorFragmentId); final FragmentState oldState = data.getState(); final boolean inTerminalState = isTerminal(oldState); final FragmentState currentState = fragmentStatus.getProfile().getState(); if (inTerminalState || (oldState == FragmentState.CANCELLATION_REQUESTED && !isTerminal(currentState))) { // Already in a terminal state, or invalid state transition from CANCELLATION_REQUESTED. This shouldn't happen. logger.warn(String.format("Received status message for fragment %s after fragment was in state %s. New state was %s", QueryIdHelper.getQueryIdentifier(fragmentHandle), oldState, currentState)); return false; } data.setStatus(fragmentStatus); return oldState != currentState; }
private boolean madeProgress(final FragmentStatus prev, final FragmentStatus cur) { final MinorFragmentProfile previous = prev.getProfile(); final MinorFragmentProfile current = cur.getProfile(); if (previous.getState() != current.getState()) { return true; } if (previous.getOperatorProfileCount() != current.getOperatorProfileCount()) { return true; } for(int i =0; i < current.getOperatorProfileCount(); i++){ if (madeProgress(previous.getOperatorProfile(i), current.getOperatorProfile(i))) { return true; } } return false; }
public FragmentState getState() { return status.getProfile().getState(); }
public void writeTo(com.dyuproject.protostuff.Output output, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile message) throws java.io.IOException { if(message.hasState()) output.writeEnum(1, message.getState().getNumber(), false); if(message.hasError()) output.writeObject(2, message.getError(), org.apache.drill.exec.proto.SchemaUserBitShared.DrillPBError.WRITE, false); if(message.hasMinorFragmentId()) output.writeInt32(3, message.getMinorFragmentId(), false); for(org.apache.drill.exec.proto.UserBitShared.OperatorProfile operatorProfile : message.getOperatorProfileList()) output.writeObject(4, operatorProfile, org.apache.drill.exec.proto.SchemaUserBitShared.OperatorProfile.WRITE, true); if(message.hasStartTime()) output.writeInt64(5, message.getStartTime(), false); if(message.hasEndTime()) output.writeInt64(6, message.getEndTime(), false); if(message.hasMemoryUsed()) output.writeInt64(7, message.getMemoryUsed(), false); if(message.hasMaxMemoryUsed()) output.writeInt64(8, message.getMaxMemoryUsed(), false); if(message.hasEndpoint()) output.writeObject(9, message.getEndpoint(), org.apache.drill.exec.proto.SchemaCoordinationProtos.DrillbitEndpoint.WRITE, false); if(message.hasLastUpdate()) output.writeInt64(10, message.getLastUpdate(), false); if(message.hasLastProgress()) output.writeInt64(11, message.getLastProgress(), false); } public boolean isInitialized(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile message)