private void merge(ContentNodeStats stats, int factor) {
        for (Map.Entry<String, BucketSpaceStats> entry : stats.bucketSpaces.entrySet()) {
            BucketSpaceStats statsToUpdate = bucketSpaces.get(entry.getKey());
            if (statsToUpdate == null && factor == 1) {
                statsToUpdate = BucketSpaceStats.empty();
                bucketSpaces.put(entry.getKey(), statsToUpdate);
            }
            if (statsToUpdate != null) {
                statsToUpdate.merge(entry.getValue(), factor);
            }
        }
    }
@Test
    void bucket_space_stats_tracks_multiple_layers_of_invalid() {
        BucketSpaceStats stats = BucketSpaceStats.invalid();
        stats.merge(BucketSpaceStats.invalid(), 1);
        assertFalse(stats.valid());
        stats.merge(BucketSpaceStats.invalid(), 1);
        assertFalse(stats.valid());
        stats.merge(BucketSpaceStats.of(5, 1), 1);
        assertFalse(stats.valid());

        stats.merge(BucketSpaceStats.invalid(), -1);
        assertFalse(stats.valid());
        stats.merge(BucketSpaceStats.invalid(), -1);
        assertFalse(stats.valid());
        stats.merge(BucketSpaceStats.invalid(), -1);
        assertTrue(stats.valid());
        assertEquals(BucketSpaceStats.of(5, 1), stats);
    }