Post-write listeners are invoked from ClusteringDependentLogic.commitSingleEntry(), while holding the shared topology lock. We should be able to release the topology lock before invoking listeners, so that slow listeners (e.g. clustered/client listeners) don't delay the installation of a new topology.
Going further, we could try to use optimistic locking (e.g. with a StampedLock) instead of the ReentrantReadWriteLock, reverting the data container write if the topology changes and we are no longer an owner. This could help in scenarios where the data container update itself is slow, e.g. when using passivation with a JDBC/remote store.