diff --git a/CHANGES.md b/CHANGES.md index e4bcd03675f7b3870a8ef84151fd52c0d5b39b35..1ddf9a3815e047cb16443d4c5e6cc94d641da336 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 9c090adc1ab169271e0331c7cadd057ba90c008f..4cebad587dc2222b134686b2f16e7eb05b697db0 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 1417cff4b9b984a2e4bca878c1db0ddb5889265f..6e27883a33347dda719b5893129d0808dfe7fe18 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 20460bc86365f3e5877e2a4a576eaddee577dc98..7cb879d4fe9234b0976ce315380d390ef7ef6389 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 4cac7beda36c970228af1c556e5d621106ebf712..544f32f2a7e868a95f0dd77f48f533d215f226f9 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 e191610fa6c43ceefb7b6cc7efc3f67c3e30dd73..cfb60fa839ae2a9ac2d3bdd097e464c8ebabcbc1 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 14c5f62ed42b95eba1ea16d9ed1ac64f4a35d8db..2531e34409e6c1a36eb01f342c536fd2d441a7b2 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 0000000000000000000000000000000000000000..c509604abfd1f56e14de336502cbabe125e0f9c3 --- /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 0000000000000000000000000000000000000000..18dc008d7e29fe69275f7c4a8454c8f336d67e4a --- /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 0000000000000000000000000000000000000000..6bf8282a4cbf78026193df1c0dd06825ba4983ce --- /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)); + } +}