private void updateStatesForNewVersion(final ClusterStateBundle newStateBundle, final int newVersion) {
        currentClusterState = newStateBundle.clonedWithVersionSet(newVersion);
        currentUnversionedState = newStateBundle; // TODO should we clone..? ClusterState really should be made immutable
        lowestObservedDistributionBits = Math.min(
                lowestObservedDistributionBits,
                newStateBundle.getBaselineClusterState().getDistributionBitCount());
        // TODO should this take place in updateLatestCandidateStateBundle instead? I.e. does it require a consolidated state?
        clusterStateView = ClusterStateView.create(currentClusterState.getBaselineClusterState());
        clusterStatsChangeTracker.updateAggregatedStats(clusterStateView.getStatsAggregator().getAggregatedStats(),
                minMergeCompletionRatio);
    }
Returns the last state provided to updateLatestCandidateStateBundle, which _may or may not_ be
a published state. Primary use case for this function is a caller which is interested in
changes that may not be reflected in the published state. The best example of this would
be node state changes when a cluster is marked as Down.
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateVersionTracker.java