I wonder if we shouldn't handle these 2 cases differently? Keep handling metadata == null the same way by returning EMPTY so we continue doing cache invalidations, and return NULL if metadata.isEmpty() (wow that's backwards).