From 5fd06a7c4a40e7d8dde9409746561948188885ac Mon Sep 17 00:00:00 2001 From: zifeihan Date: Fri, 8 Jan 2021 15:51:15 +0800 Subject: [PATCH] Fix `timeBucket` not taking effect in EqualsAndHashCode annotation. (#6153) --- CHANGES.md | 1 + .../EndpointRelationServerSideMetrics.java | 5 +- ...viceInstanceRelationClientSideMetrics.java | 5 +- ...viceInstanceRelationServerSideMetrics.java | 5 +- .../ServiceRelationClientSideMetrics.java | 5 +- .../ServiceRelationServerSideMetrics.java | 5 +- .../server/core/analysis/metrics/Metrics.java | 4 + .../endpoint/EndpointCallRelationTest.java | 54 ++++++++++++ .../instance/ServiceInstanceRelationTest.java | 84 +++++++++++++++++++ .../relation/service/ServiceRelationTest.java | 76 +++++++++++++++++ 10 files changed, 229 insertions(+), 15 deletions(-) create mode 100644 oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java create mode 100644 oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java create mode 100644 oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java diff --git a/CHANGES.md b/CHANGES.md index e4bcd03675..1ddf9a3815 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -54,6 +54,7 @@ Release Notes. * Fix bug that istio version metric type on UI template mismatches the otel rule. * Improve ReadWriteSafeCache concurrency read-write performance * Fix bug that if use JSON as InfluxDB.ResponseFormat then NumberFormatException maybe occur. +* Fix `timeBucket` not taking effect in EqualsAndHashCode annotation of some relationship metrics. #### UI * Fix un-removed tags in trace query. diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java index 9c090adc1a..4cebad587d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java @@ -35,9 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @Stream(name = EndpointRelationServerSideMetrics.INDEX_NAME, scopeId = DefaultScopeDefine.ENDPOINT_RELATION, builder = EndpointRelationServerSideMetrics.Builder.class, processor = MetricsStreamProcessor.class) @EqualsAndHashCode(of = { - "entityId", - "timeBucket" -}) + "entityId" +}, callSuper = true) public class EndpointRelationServerSideMetrics extends Metrics { public static final String INDEX_NAME = "endpoint_relation_server_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationClientSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationClientSideMetrics.java index 1417cff4b9..6e27883a33 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationClientSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationClientSideMetrics.java @@ -35,9 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @Stream(name = ServiceInstanceRelationClientSideMetrics.INDEX_NAME, scopeId = DefaultScopeDefine.SERVICE_INSTANCE_RELATION, builder = ServiceInstanceRelationClientSideMetrics.Builder.class, processor = MetricsStreamProcessor.class) @EqualsAndHashCode(of = { - "entityId", - "timeBucket" -}) + "entityId" +}, callSuper = true) public class ServiceInstanceRelationClientSideMetrics extends Metrics { public static final String INDEX_NAME = "service_instance_relation_client_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationServerSideMetrics.java index 20460bc863..7cb879d4fe 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationServerSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationServerSideMetrics.java @@ -35,9 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @Stream(name = ServiceInstanceRelationServerSideMetrics.INDEX_NAME, scopeId = DefaultScopeDefine.SERVICE_INSTANCE_RELATION, builder = ServiceInstanceRelationServerSideMetrics.Builder.class, processor = MetricsStreamProcessor.class) @EqualsAndHashCode(of = { - "entityId", - "timeBucket" -}) + "entityId" +}, callSuper = true) public class ServiceInstanceRelationServerSideMetrics extends Metrics { public static final String INDEX_NAME = "service_instance_relation_server_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java index 4cac7beda3..544f32f2a7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java @@ -35,9 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @Stream(name = ServiceRelationClientSideMetrics.INDEX_NAME, scopeId = DefaultScopeDefine.SERVICE_RELATION, builder = ServiceRelationClientSideMetrics.Builder.class, processor = MetricsStreamProcessor.class) @EqualsAndHashCode(of = { - "entityId", - "timeBucket" -}) + "entityId" +}, callSuper = true) public class ServiceRelationClientSideMetrics extends Metrics { public static final String INDEX_NAME = "service_relation_client_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java index e191610fa6..cfb60fa839 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java @@ -35,9 +35,8 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @Stream(name = ServiceRelationServerSideMetrics.INDEX_NAME, scopeId = DefaultScopeDefine.SERVICE_RELATION, builder = ServiceRelationServerSideMetrics.Builder.class, processor = MetricsStreamProcessor.class) @EqualsAndHashCode(of = { - "entityId", - "timeBucket" -}) + "entityId" +}, callSuper = true) public class ServiceRelationServerSideMetrics extends Metrics { public static final String INDEX_NAME = "service_relation_server_side"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java index 14c5f62ed4..2531e34409 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/Metrics.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.core.analysis.metrics; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import org.apache.skywalking.oap.server.core.analysis.TimeBucket; @@ -29,6 +30,9 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; * Metrics represents the statistic data, which analysis by OAL script or hard code. It has the lifecycle controlled by * TTL(time to live). */ +@EqualsAndHashCode(of = { + "timeBucket" +}) public abstract class Metrics extends StreamData implements StorageData { public static final String TIME_BUCKET = "time_bucket"; diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java new file mode 100644 index 0000000000..c509604abf --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointCallRelationTest.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.analysis.manual.relation.endpoint; + +import org.junit.Assert; +import org.junit.Test; + +public class EndpointCallRelationTest { + @Test + public void testEndpointRelationServerSideMetricsEquals() { + EndpointRelationServerSideMetrics thisObject = new EndpointRelationServerSideMetrics(); + thisObject.setEntityId( + "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo"); + thisObject.setTimeBucket(202101071505L); + + EndpointRelationServerSideMetrics otherObject = new EndpointRelationServerSideMetrics(); + otherObject.setEntityId( + "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo"); + otherObject.setTimeBucket(202101071505L); + + Assert.assertTrue(thisObject.equals(otherObject)); + } + + @Test + public void testEndpointRelationServerSideMetricsNotEquals() { + EndpointRelationServerSideMetrics thisObject = new EndpointRelationServerSideMetrics(); + thisObject.setEntityId( + "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo"); + thisObject.setTimeBucket(202101071505L); + + EndpointRelationServerSideMetrics otherObject = new EndpointRelationServerSideMetrics(); + otherObject.setEntityId( + "VXNlcg==.0-VXNlcg==-em1iaXotcHJvbW90aW9uMi1hZG1pbkAxMjUyNw==.1-L0Bpbi9hcGkvaGVhbHRo"); + otherObject.setTimeBucket(202101071506L); + + Assert.assertFalse(thisObject.equals(otherObject)); + } +} diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java new file mode 100644 index 0000000000..18dc008d7e --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/instance/ServiceInstanceRelationTest.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.analysis.manual.relation.instance; + +import org.junit.Assert; +import org.junit.Test; + +public class ServiceInstanceRelationTest { + @Test + public void testServiceInstanceRelationClientSideMetricsEquals() { + ServiceInstanceRelationClientSideMetrics thisObject = new ServiceInstanceRelationClientSideMetrics(); + thisObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + thisObject.setTimeBucket(202101071505L); + + ServiceInstanceRelationClientSideMetrics otherObject = new ServiceInstanceRelationClientSideMetrics(); + otherObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + otherObject.setTimeBucket(202101071505L); + + Assert.assertTrue(thisObject.equals(otherObject)); + } + + @Test + public void testServiceInstanceRelationClientSideMetricsNotEquals() { + ServiceInstanceRelationClientSideMetrics thisObject = new ServiceInstanceRelationClientSideMetrics(); + thisObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + thisObject.setTimeBucket(202101071505L); + + ServiceInstanceRelationClientSideMetrics otherObject = new ServiceInstanceRelationClientSideMetrics(); + otherObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + otherObject.setTimeBucket(202101071506L); + + Assert.assertFalse(thisObject.equals(otherObject)); + } + + @Test + public void testServiceInstanceRelationServerSideMetricsEquals() { + ServiceInstanceRelationServerSideMetrics thisObject = new ServiceInstanceRelationServerSideMetrics(); + thisObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + thisObject.setTimeBucket(202101071505L); + + ServiceInstanceRelationServerSideMetrics otherObject = new ServiceInstanceRelationServerSideMetrics(); + otherObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + otherObject.setTimeBucket(202101071505L); + + Assert.assertTrue(thisObject.equals(otherObject)); + } + + @Test + public void testServiceInstanceRelationServerSideMetricsNotEquals() { + ServiceInstanceRelationServerSideMetrics thisObject = new ServiceInstanceRelationServerSideMetrics(); + thisObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + thisObject.setTimeBucket(202101071505L); + + ServiceInstanceRelationServerSideMetrics otherObject = new ServiceInstanceRelationServerSideMetrics(); + otherObject.setEntityId( + "em1jLWJlYWNvbi1taWRkbGV3YXJlQDExMTIz.1_MTAuMTExLjIzMi4yMDc=-MTkyLjE2OC40Ni4xNDM6NDY2MDY=.0_MTkyLjE2OC40Ni4xNDM6NDY2MDY="); + otherObject.setTimeBucket(202101071506L); + + Assert.assertFalse(thisObject.equals(otherObject)); + } +} diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java new file mode 100644 index 0000000000..6bf8282a4c --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationTest.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.analysis.manual.relation.service; + +import org.junit.Assert; +import org.junit.Test; + +public class ServiceRelationTest { + @Test + public void testServiceRelationClientSideMetricsEquals() { + ServiceRelationClientSideMetrics thisObject = new ServiceRelationClientSideMetrics(); + thisObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + thisObject.setTimeBucket(202101071505L); + + ServiceRelationClientSideMetrics otherObject = new ServiceRelationClientSideMetrics(); + otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + otherObject.setTimeBucket(202101071505L); + + Assert.assertTrue(thisObject.equals(otherObject)); + } + + @Test + public void testServiceRelationClientSideMetricsNotEquals() { + ServiceRelationClientSideMetrics thisObject = new ServiceRelationClientSideMetrics(); + thisObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + thisObject.setTimeBucket(202101071505L); + + ServiceRelationClientSideMetrics otherObject = new ServiceRelationClientSideMetrics(); + otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + otherObject.setTimeBucket(202101071506L); + + Assert.assertFalse(thisObject.equals(otherObject)); + } + + @Test + public void testServiceRelationServerSideMetricsEquals() { + ServiceRelationServerSideMetrics thisObject = new ServiceRelationServerSideMetrics(); + thisObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + thisObject.setTimeBucket(202101071505L); + + ServiceRelationServerSideMetrics otherObject = new ServiceRelationServerSideMetrics(); + otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + otherObject.setTimeBucket(202101071505L); + + Assert.assertTrue(thisObject.equals(otherObject)); + } + + @Test + public void testServiceRelationServerSideMetricsNotEquals() { + ServiceRelationServerSideMetrics thisObject = new ServiceRelationServerSideMetrics(); + thisObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + thisObject.setTimeBucket(202101071505L); + + ServiceRelationServerSideMetrics otherObject = new ServiceRelationServerSideMetrics(); + otherObject.setEntityId("VXNlcg==.0-em0tY2xpZW50LXNldHRpbmctd2ViYXBpQDEwNjQ4.1"); + otherObject.setTimeBucket(202101071506L); + + Assert.assertFalse(thisObject.equals(otherObject)); + } +} -- GitLab