private static void emitDerivedBucketSpaceStatesDiffEvents(Params params, List<Event> events) {
        params.toState.getDerivedBucketSpaceStates().entrySet().forEach(toEntry -> {
            String toBucketSpace = toEntry.getKey();
            AnnotatedClusterState toDerivedState = toEntry.getValue();
            AnnotatedClusterState fromDerivedState = params.fromState.getDerivedBucketSpaceStates().get(toBucketSpace);
            if (fromDerivedState != null && shouldConsiderDerivedStates(params, fromDerivedState, toDerivedState)) {
                emitPerNodeDiffEvents(createDerivedParams(params, toBucketSpace, fromDerivedState, toDerivedState), events);
            }
        });
    }
Responsible for inferring the difference between two cluster states and their
state annotations and producing a set of events that describe the changes between
the two. Diffing the states directly provides a clear picture of _what_ has changed,
while the annotations are generally required to explain _why_ the changes happened
in the first place.

Events are primarily used for administrative/user visibility into what's happening
in the cluster and are output to the Vespa log as well as kept in a circular history
buffer per node and for the cluster as a whole.
clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/EventDiffCalculator.java