code: private void computeEvents(
        KeyspaceMetadata oldKeyspace,
        KeyspaceMetadata newKeyspace,
        ImmutableList.Builder<Object> events) {
      if (oldKeyspace == null) {
        events.add(KeyspaceChangeEvent.created(newKeyspace));
      } else {
        if (!shallowEquals(oldKeyspace, newKeyspace)) {
          events.add(KeyspaceChangeEvent.updated(oldKeyspace, newKeyspace));
        }
        computeChildEvents(oldKeyspace, newKeyspace, events);
      }
    }
docs: Computes the exact set of events to emit when a keyspace has changed.
  
  <p>We can't simply emit {@link KeyspaceChangeEvent#updated(KeyspaceMetadata, KeyspaceMetadata)}
  because this method might be called as part of a full schema refresh, or a keyspace refresh
  initiated by coalesced child element refreshes. We need to traverse all children to check what
  has exactly changed.