You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ie...@apache.org on 2019/03/15 09:13:51 UTC
[beam] branch master updated: [BEAM-6771]
MetricsContainerStepMap#equals required for Spark.
This is an automated email from the ASF dual-hosted git repository.
iemejia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 468cafe [BEAM-6771] MetricsContainerStepMap#equals required for Spark.
new e51aa5f Merge pull request #8032: [BEAM-6771] Add MetricsContainerStepMap equals method
468cafe is described below
commit 468cafed059c16e4c018ea240a04ce54edc5fd0d
Author: Kyle Winkelman <ky...@optum.com>
AuthorDate: Mon Mar 11 17:11:18 2019 -0500
[BEAM-6771] MetricsContainerStepMap#equals required for Spark.
---
.../beam/runners/core/metrics/CounterCell.java | 18 +++++++++++
.../beam/runners/core/metrics/DirtyState.java | 16 ++++++++++
.../runners/core/metrics/DistributionCell.java | 18 +++++++++++
.../beam/runners/core/metrics/GaugeCell.java | 18 +++++++++++
.../runners/core/metrics/MetricsContainerImpl.java | 19 ++++++++++++
.../core/metrics/MetricsContainerStepMap.java | 19 +++++-------
.../beam/runners/core/metrics/MetricsMap.java | 16 ++++++++++
.../beam/runners/core/metrics/CounterCellTest.java | 30 +++++++++++++++++++
.../beam/runners/core/metrics/DirtyStateTest.java | 21 +++++++++++++
.../runners/core/metrics/DistributionCellTest.java | 31 +++++++++++++++++++
.../beam/runners/core/metrics/GaugeCellTest.java | 30 +++++++++++++++++++
.../core/metrics/MetricsContainerImplTest.java | 35 ++++++++++++++++++++++
.../core/metrics/MetricsContainerStepMapTest.java | 30 +++++++++++++++++++
.../beam/runners/core/metrics/MetricsMapTest.java | 22 ++++++++++++++
14 files changed, 312 insertions(+), 11 deletions(-)
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java
index d1abafc..9ca5cdb 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/CounterCell.java
@@ -17,6 +17,7 @@
*/
package org.apache.beam.runners.core.metrics;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.beam.sdk.annotations.Experimental;
import org.apache.beam.sdk.annotations.Experimental.Kind;
@@ -90,4 +91,21 @@ public class CounterCell implements Counter, MetricCell<Long> {
public MetricName getName() {
return name;
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof CounterCell) {
+ CounterCell counterCell = (CounterCell) object;
+ return Objects.equals(dirty, counterCell.dirty)
+ && Objects.equals(value.get(), counterCell.value.get())
+ && Objects.equals(name, counterCell.name);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(dirty, value.get(), name);
+ }
}
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java
index 7759d5e..2503d83 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DirtyState.java
@@ -18,6 +18,7 @@
package org.apache.beam.runners.core.metrics;
import java.io.Serializable;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.beam.sdk.annotations.Experimental;
import org.apache.beam.sdk.annotations.Experimental.Kind;
@@ -95,4 +96,19 @@ public class DirtyState implements Serializable {
public void afterCommit() {
dirty.compareAndSet(State.COMMITTING, State.CLEAN);
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof DirtyState) {
+ DirtyState dirtyState = (DirtyState) object;
+ return Objects.equals(dirty.get(), dirtyState.dirty.get());
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return dirty.get().hashCode();
+ }
}
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java
index c39fee0..ca85de2 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/DistributionCell.java
@@ -17,6 +17,7 @@
*/
package org.apache.beam.runners.core.metrics;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.beam.sdk.annotations.Experimental;
import org.apache.beam.sdk.annotations.Experimental.Kind;
@@ -84,4 +85,21 @@ public class DistributionCell implements Distribution, MetricCell<DistributionDa
public MetricName getName() {
return name;
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof DistributionCell) {
+ DistributionCell distributionCell = (DistributionCell) object;
+ return Objects.equals(dirty, distributionCell.dirty)
+ && Objects.equals(value.get(), distributionCell.value.get())
+ && Objects.equals(name, distributionCell.name);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(dirty, value.get(), name);
+ }
}
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/GaugeCell.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/GaugeCell.java
index ac4856b..f0d9d72 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/GaugeCell.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/GaugeCell.java
@@ -17,6 +17,7 @@
*/
package org.apache.beam.runners.core.metrics;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.beam.sdk.annotations.Experimental;
import org.apache.beam.sdk.annotations.Internal;
@@ -77,4 +78,21 @@ public class GaugeCell implements Gauge, MetricCell<GaugeData> {
public MetricName getName() {
return name;
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof GaugeCell) {
+ GaugeCell gaugeCell = (GaugeCell) object;
+ return Objects.equals(dirty, gaugeCell.dirty)
+ && Objects.equals(gaugeValue.get(), gaugeCell.gaugeValue.get())
+ && Objects.equals(name, gaugeCell.name);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(dirty, gaugeValue.get(), name);
+ }
}
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java
index 2ba95cd..630f619 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerImpl.java
@@ -23,6 +23,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import javax.annotation.Nullable;
import org.apache.beam.model.pipeline.v1.MetricsApi.MonitoringInfo;
import org.apache.beam.runners.core.metrics.MetricUpdates.MetricUpdate;
@@ -251,4 +252,22 @@ public class MetricsContainerImpl implements Serializable, MetricsContainer {
current.get(counter.getKey()).update(counter.getValue().getCumulative());
}
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof MetricsContainerImpl) {
+ MetricsContainerImpl metricsContainerImpl = (MetricsContainerImpl) object;
+ return Objects.equals(stepName, metricsContainerImpl.stepName)
+ && Objects.equals(counters, metricsContainerImpl.counters)
+ && Objects.equals(distributions, metricsContainerImpl.distributions)
+ && Objects.equals(gauges, metricsContainerImpl.gauges);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(stepName, counters, distributions, gauges);
+ }
}
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMap.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMap.java
index 4f05984..febba8f 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMap.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMap.java
@@ -25,6 +25,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
import org.apache.beam.model.pipeline.v1.MetricsApi.MonitoringInfo;
@@ -84,23 +85,19 @@ public class MetricsContainerStepMap implements Serializable {
}
@Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
+ public boolean equals(Object object) {
+ if (object instanceof MetricsContainerStepMap) {
+ MetricsContainerStepMap metricsContainerStepMap = (MetricsContainerStepMap) object;
+ return Objects.equals(metricsContainers, metricsContainerStepMap.metricsContainers)
+ && Objects.equals(unboundContainer, metricsContainerStepMap.unboundContainer);
}
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- MetricsContainerStepMap that = (MetricsContainerStepMap) o;
- // TODO(BEAM-6546): The underlying MetricContainerImpls do not implement equals().
- return getMetricsContainers().equals(that.getMetricsContainers());
+ return false;
}
@Override
public int hashCode() {
- return metricsContainers.hashCode();
+ return Objects.hash(metricsContainers, unboundContainer);
}
/**
diff --git a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsMap.java b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsMap.java
index 7bf6dc1..d1b9775 100644
--- a/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsMap.java
+++ b/runners/core-java/src/main/java/org/apache/beam/runners/core/metrics/MetricsMap.java
@@ -19,6 +19,7 @@ package org.apache.beam.runners.core.metrics;
import java.io.Serializable;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import javax.annotation.Nullable;
@@ -76,4 +77,19 @@ public class MetricsMap<K, T> implements Serializable {
public Iterable<T> values() {
return Iterables.unmodifiableIterable(metrics.values());
}
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof MetricsMap) {
+ MetricsMap<?, ?> metricsMap = (MetricsMap<?, ?>) object;
+ return Objects.equals(metrics, metricsMap.metrics);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return metrics.hashCode();
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/CounterCellTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/CounterCellTest.java
index 70193d4..fe4d986 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/CounterCellTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/CounterCellTest.java
@@ -21,6 +21,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import org.apache.beam.sdk.metrics.MetricName;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -50,4 +51,33 @@ public class CounterCellTest {
cell.getDirty().afterCommit();
assertThat(cell.getDirty().beforeCommit(), equalTo(false));
}
+
+ @Test
+ public void testEquals() {
+ CounterCell counterCell = new CounterCell(MetricName.named("namespace", "name"));
+ CounterCell equal = new CounterCell(MetricName.named("namespace", "name"));
+ Assert.assertEquals(counterCell, equal);
+ Assert.assertEquals(counterCell.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ CounterCell counterCell = new CounterCell(MetricName.named("namespace", "name"));
+
+ Assert.assertNotEquals(counterCell, new Object());
+
+ CounterCell differentDirty = new CounterCell(MetricName.named("namespace", "name"));
+ differentDirty.getDirty().beforeCommit();
+ Assert.assertNotEquals(counterCell, differentDirty);
+ Assert.assertNotEquals(counterCell.hashCode(), differentDirty.hashCode());
+
+ CounterCell differentValue = new CounterCell(MetricName.named("namespace", "name"));
+ differentValue.inc();
+ Assert.assertNotEquals(counterCell, differentValue);
+ Assert.assertNotEquals(counterCell.hashCode(), differentValue.hashCode());
+
+ CounterCell differentName = new CounterCell(MetricName.named("DIFFERENT", "DIFFERENT"));
+ Assert.assertNotEquals(counterCell, differentName);
+ Assert.assertNotEquals(counterCell.hashCode(), differentName.hashCode());
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DirtyStateTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DirtyStateTest.java
index 6c4a9d6..b6105f5 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DirtyStateTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DirtyStateTest.java
@@ -20,6 +20,7 @@ package org.apache.beam.runners.core.metrics;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -52,4 +53,24 @@ public class DirtyStateTest {
dirty.beforeCommit(),
is(true));
}
+
+ @Test
+ public void testEquals() {
+ DirtyState dirtyState = new DirtyState();
+ DirtyState equal = new DirtyState();
+ Assert.assertEquals(dirtyState, equal);
+ Assert.assertEquals(dirtyState.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ DirtyState dirtyState = new DirtyState();
+
+ Assert.assertNotEquals(dirtyState, new Object());
+
+ DirtyState differentState = new DirtyState();
+ differentState.beforeCommit();
+ Assert.assertNotEquals(dirtyState, differentState);
+ Assert.assertNotEquals(dirtyState.hashCode(), differentState.hashCode());
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DistributionCellTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DistributionCellTest.java
index ab56064..8bfa614 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DistributionCellTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/DistributionCellTest.java
@@ -21,6 +21,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import org.apache.beam.sdk.metrics.MetricName;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -50,4 +51,34 @@ public class DistributionCellTest {
assertThat(
"Adding a new value made the cell dirty", cell.getDirty().beforeCommit(), equalTo(true));
}
+
+ @Test
+ public void testEquals() {
+ DistributionCell distributionCell = new DistributionCell(MetricName.named("namespace", "name"));
+ DistributionCell equal = new DistributionCell(MetricName.named("namespace", "name"));
+ Assert.assertEquals(distributionCell, equal);
+ Assert.assertEquals(distributionCell.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ DistributionCell distributionCell = new DistributionCell(MetricName.named("namespace", "name"));
+
+ Assert.assertNotEquals(distributionCell, new Object());
+
+ DistributionCell differentDirty = new DistributionCell(MetricName.named("namespace", "name"));
+ differentDirty.getDirty().beforeCommit();
+ Assert.assertNotEquals(distributionCell, differentDirty);
+ Assert.assertNotEquals(distributionCell.hashCode(), differentDirty.hashCode());
+
+ DistributionCell differentValue = new DistributionCell(MetricName.named("namespace", "name"));
+ differentValue.update(DistributionData.create(1, 1, 1, 1));
+ Assert.assertNotEquals(distributionCell, differentValue);
+ Assert.assertNotEquals(distributionCell.hashCode(), differentValue.hashCode());
+
+ DistributionCell differentName =
+ new DistributionCell(MetricName.named("DIFFERENT", "DIFFERENT"));
+ Assert.assertNotEquals(distributionCell, differentName);
+ Assert.assertNotEquals(distributionCell.hashCode(), differentName.hashCode());
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/GaugeCellTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/GaugeCellTest.java
index 7681513..19d711c 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/GaugeCellTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/GaugeCellTest.java
@@ -21,6 +21,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import org.apache.beam.sdk.metrics.MetricName;
+import org.junit.Assert;
import org.junit.Test;
/** Tests for {@link GaugeCell}. */
@@ -44,4 +45,33 @@ public class GaugeCellTest {
assertThat(
"Adding a new value made the cell dirty", cell.getDirty().beforeCommit(), equalTo(true));
}
+
+ @Test
+ public void testEquals() {
+ GaugeCell gaugeCell = new GaugeCell(MetricName.named("namespace", "name"));
+ GaugeCell equal = new GaugeCell(MetricName.named("namespace", "name"));
+ Assert.assertEquals(gaugeCell, equal);
+ Assert.assertEquals(gaugeCell.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ GaugeCell gaugeCell = new GaugeCell(MetricName.named("namespace", "name"));
+
+ Assert.assertNotEquals(gaugeCell, new Object());
+
+ GaugeCell differentDirty = new GaugeCell(MetricName.named("namespace", "name"));
+ differentDirty.getDirty().beforeCommit();
+ Assert.assertNotEquals(gaugeCell, differentDirty);
+ Assert.assertNotEquals(gaugeCell.hashCode(), differentDirty.hashCode());
+
+ GaugeCell differentGaugeValue = new GaugeCell(MetricName.named("namespace", "name"));
+ differentGaugeValue.update(GaugeData.create(1));
+ Assert.assertNotEquals(gaugeCell, differentGaugeValue);
+ Assert.assertNotEquals(gaugeCell.hashCode(), differentGaugeValue.hashCode());
+
+ GaugeCell differentName = new GaugeCell(MetricName.named("DIFFERENT", "DIFFERENT"));
+ Assert.assertNotEquals(gaugeCell, differentName);
+ Assert.assertNotEquals(gaugeCell.hashCode(), differentName.hashCode());
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerImplTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerImplTest.java
index aa74ff2..4409827 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerImplTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerImplTest.java
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import org.apache.beam.model.pipeline.v1.MetricsApi.MonitoringInfo;
import org.apache.beam.sdk.metrics.MetricName;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -199,4 +200,38 @@ public class MetricsContainerImplTest {
}
assertThat(actualMonitoringInfos, containsInAnyOrder(builder1.build()));
}
+
+ @Test
+ public void testEquals() {
+ MetricsContainerImpl metricsContainerImpl = new MetricsContainerImpl("stepName");
+ MetricsContainerImpl equal = new MetricsContainerImpl("stepName");
+ Assert.assertEquals(metricsContainerImpl, equal);
+ Assert.assertEquals(metricsContainerImpl.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ MetricsContainerImpl metricsContainerImpl = new MetricsContainerImpl("stepName");
+
+ Assert.assertNotEquals(metricsContainerImpl, new Object());
+
+ MetricsContainerImpl differentStepName = new MetricsContainerImpl("DIFFERENT");
+ Assert.assertNotEquals(metricsContainerImpl, differentStepName);
+ Assert.assertNotEquals(metricsContainerImpl.hashCode(), differentStepName.hashCode());
+
+ MetricsContainerImpl differentCounters = new MetricsContainerImpl("stepName");
+ differentCounters.getCounter(MetricName.named("namespace", "name"));
+ Assert.assertNotEquals(metricsContainerImpl, differentCounters);
+ Assert.assertNotEquals(metricsContainerImpl.hashCode(), differentCounters.hashCode());
+
+ MetricsContainerImpl differentDistributions = new MetricsContainerImpl("stepName");
+ differentDistributions.getDistribution(MetricName.named("namespace", "name"));
+ Assert.assertNotEquals(metricsContainerImpl, differentDistributions);
+ Assert.assertNotEquals(metricsContainerImpl.hashCode(), differentDistributions.hashCode());
+
+ MetricsContainerImpl differentGauges = new MetricsContainerImpl("stepName");
+ differentGauges.getGauge(MetricName.named("namespace", "name"));
+ Assert.assertNotEquals(metricsContainerImpl, differentGauges);
+ Assert.assertNotEquals(metricsContainerImpl.hashCode(), differentGauges.hashCode());
+ }
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMapTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMapTest.java
index 21a361d..a761bdd 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMapTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsContainerStepMapTest.java
@@ -42,6 +42,7 @@ import org.apache.beam.sdk.metrics.MetricsEnvironment;
import org.apache.beam.sdk.metrics.MetricsFilter;
import org.hamcrest.collection.IsIterableWithSize;
import org.joda.time.Instant;
+import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -295,6 +296,35 @@ public class MetricsContainerStepMapTest {
assertIterableSize(allres.getGauges(), 2);
}
+ @Test
+ public void testEquals() {
+ MetricsContainerStepMap metricsContainerStepMap = new MetricsContainerStepMap();
+ MetricsContainerStepMap equal = new MetricsContainerStepMap();
+ Assert.assertEquals(metricsContainerStepMap, equal);
+ Assert.assertEquals(metricsContainerStepMap.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ MetricsContainerStepMap metricsContainerStepMap = new MetricsContainerStepMap();
+
+ Assert.assertNotEquals(metricsContainerStepMap, new Object());
+
+ MetricsContainerStepMap differentMetricsContainers = new MetricsContainerStepMap();
+ differentMetricsContainers.getContainer("stepName");
+ Assert.assertNotEquals(metricsContainerStepMap, differentMetricsContainers);
+ Assert.assertNotEquals(
+ metricsContainerStepMap.hashCode(), differentMetricsContainers.hashCode());
+
+ MetricsContainerStepMap differentUnboundedContainer = new MetricsContainerStepMap();
+ differentUnboundedContainer
+ .getContainer(null)
+ .getCounter(MetricName.named("namespace", "name"));
+ Assert.assertNotEquals(metricsContainerStepMap, differentUnboundedContainer);
+ Assert.assertNotEquals(
+ metricsContainerStepMap.hashCode(), differentUnboundedContainer.hashCode());
+ }
+
private <T> void assertIterableSize(Iterable<T> iterable, int size) {
assertThat(iterable, IsIterableWithSize.iterableWithSize(size));
}
diff --git a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsMapTest.java b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsMapTest.java
index f3a2817..f4b2b60 100644
--- a/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsMapTest.java
+++ b/runners/core-java/src/test/java/org/apache/beam/runners/core/metrics/MetricsMapTest.java
@@ -30,6 +30,7 @@ import java.util.concurrent.atomic.AtomicLong;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -73,6 +74,27 @@ public class MetricsMapTest {
metricsMap.entries(), containsInAnyOrder(hasEntry("foo", foo), hasEntry("bar", bar)));
}
+ @Test
+ public void testEquals() {
+ MetricsMap<String, AtomicLong> metricsMap = new MetricsMap<>(unusedKey -> new AtomicLong());
+ MetricsMap<String, AtomicLong> equal = new MetricsMap<>(unusedKey -> new AtomicLong());
+ Assert.assertEquals(metricsMap, equal);
+ Assert.assertEquals(metricsMap.hashCode(), equal.hashCode());
+ }
+
+ @Test
+ public void testNotEquals() {
+ MetricsMap<String, AtomicLong> metricsMap = new MetricsMap<>(unusedKey -> new AtomicLong());
+
+ Assert.assertNotEquals(metricsMap, new Object());
+
+ MetricsMap<String, AtomicLong> differentMetrics =
+ new MetricsMap<>(unusedKey -> new AtomicLong());
+ differentMetrics.get("key");
+ Assert.assertNotEquals(metricsMap, differentMetrics);
+ Assert.assertNotEquals(metricsMap.hashCode(), differentMetrics.hashCode());
+ }
+
private static Matcher<Map.Entry<String, AtomicLong>> hasEntry(
final String key, final AtomicLong value) {
return new TypeSafeMatcher<Entry<String, AtomicLong>>() {