private boolean handleReportedNodeCrashEdge(NodeInfo node, NodeState currentState,
                                                NodeState reportedState, NodeListener nodeListener,
                                                long timeNow) {
        if (nodeUpToDownEdge(node, currentState, reportedState)) {
            node.setTransitionTime(timeNow);
            if (node.getUpStableStateTime() + stableStateTimePeriod > timeNow && isNotControlledShutdown(reportedState)) {
                log.log(FINE, () -> "Stable state: " + node.getUpStableStateTime() + " + " + stableStateTimePeriod + " > " + timeNow);
                eventLog.add(NodeEvent.forBaseline(node,
                        String.format("Stopped or possibly crashed after %d ms, which is before " +
                                      "stable state time period. Premature crash count is now %d.",
                                timeNow - node.getUpStableStateTime(), node.getPrematureCrashCount() + 1),
                        NodeEvent.Type.CURRENT,
                        timeNow), isMaster);
                return handlePrematureCrash(node, nodeListener);
            }
        }
        return false;
    }
Modify a node's cross-state information in the cluster based on a newly arrived reported state.

@param  node the node we are computing the state of
@param  currentState the current state of the node
@param  reportedState the new state reported by (or, in the case of down - inferred from) the node
@param  nodeListener this listener is notified for some of the system state changes that this will return
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateChangeHandler.java