Skip to content

Commit 045c639

Browse files
committed
Add merge to Distribution
1 parent 29e7325 commit 045c639

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

stats/src/main/java/com/facebook/airlift/stats/Distribution.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.Map;
1515

1616
import static com.google.common.base.MoreObjects.toStringHelper;
17+
import static java.util.Objects.requireNonNull;
1718

1819
@ThreadSafe
1920
public class Distribution
@@ -57,7 +58,12 @@ public synchronized void add(long value, long count)
5758
digest.add(value, count);
5859
total.add(value * count);
5960
}
60-
61+
public synchronized void merge(Distribution distribution)
62+
{
63+
requireNonNull(distribution, "distribution is null");
64+
total.merge(distribution.total);
65+
digest.merge(distribution.digest);
66+
}
6167
@Managed
6268
public synchronized double getMaxError()
6369
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.facebook.airlift.stats;
2+
3+
import org.testng.annotations.Test;
4+
5+
import static org.testng.Assert.assertEquals;
6+
7+
public class TestDistribution
8+
{
9+
@Test
10+
public void testMerge()
11+
{
12+
Distribution distribution1 = new Distribution();
13+
Distribution distribution2 = new Distribution();
14+
15+
for (int i = 0; i < 10; i++) {
16+
distribution1.add(i);
17+
}
18+
19+
for (int i = 10; i < 20; i++) {
20+
distribution2.add(i);
21+
}
22+
23+
distribution1.merge(distribution2);
24+
25+
assertEquals(distribution1.getP50(), 10);
26+
assertEquals(distribution1.getMin(), 0);
27+
assertEquals(distribution1.getMax(), 19);
28+
assertEquals(distribution1.getCount(), 20.0);
29+
}
30+
31+
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Expected decayCounter to have alpha.*")
32+
public void testMergeWithIncompatibleAlphaFails()
33+
{
34+
Distribution distribution1 = new Distribution(0.5);
35+
Distribution distribution2 = new Distribution(0.7);
36+
37+
distribution1.merge(distribution2);
38+
}
39+
}

0 commit comments

Comments
 (0)