Skip to content

Commit

Permalink
Delegate to ConcurrentHashMap values Spliterator in AbstractRegistry (#…
Browse files Browse the repository at this point in the history
…988)

Override AbstractRegistry::spliterator to return the ConcurrentHashMap's
values Spliterator, which has estimated size and other characteristics set.
  • Loading branch information
kilink committed Sep 12, 2022
1 parent 2412c62 commit a4f9121
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import java.util.Iterator;
import java.util.Map;
import java.util.Spliterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Function;
Expand Down Expand Up @@ -278,6 +279,11 @@ protected <T extends Meter> T getOrCreate(Id id, Class<T> cls, T dflt, Function<
return meters.values().iterator();
}

@Override
public final Spliterator<Meter> spliterator() {
return meters.values().spliterator();
}

/**
* Can be called by sub-classes to remove expired meters from the internal map.
* The SwapMeter types that are returned will lookup a new copy on the next access.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.List;
import java.util.LongSummaryStatistics;
import java.util.Map;
import java.util.Spliterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -585,6 +586,20 @@ public void maxGaugeCanBeNegative() {
Assertions.assertEquals(-42.0, r.maxGauge("test").value(), 1e-12);
}

@Test
public void spliteratorCharacteristicsAndEstimatedSize() {
Registry registry = newRegistry(false, 20);
registry.counter("foo").increment();
registry.counter("bar").increment();
registry.counter("baz").increment();

Spliterator<Meter> spliterator = registry.spliterator();

Assertions.assertTrue(spliterator.hasCharacteristics(Spliterator.NONNULL));
Assertions.assertTrue(spliterator.hasCharacteristics(Spliterator.CONCURRENT));
Assertions.assertEquals(3, spliterator.estimateSize());
}

@Test
public void customIdTags() {
DefaultRegistry r = newRegistry(false, 10000);
Expand Down

0 comments on commit a4f9121

Please sign in to comment.