diff --git a/attribute-service-impl/src/main/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModel.java b/attribute-service-impl/src/main/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModel.java index bf666816..6d6ce075 100644 --- a/attribute-service-impl/src/main/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModel.java +++ b/attribute-service-impl/src/main/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModel.java @@ -285,13 +285,15 @@ public AttributeMetadata.Builder toDTOBuilder() { AttributeSourceMetadata.newBuilder() .putAllSourceMetadata(stringMapEntry.getValue()) .build()))) - .setDefinition(this.definition) .setInternal(internal) .setCustom(!ROOT_TENANT_ID.equals(tenantId)); if (unit != null) { builder.setUnit(unit); } + if (!definition.equals(AttributeDefinition.getDefaultInstance())) { + builder.setDefinition(definition); + } return builder; } diff --git a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/AttributeServiceImplTest.java b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/AttributeServiceImplTest.java index e30d88b4..896e019d 100644 --- a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/AttributeServiceImplTest.java +++ b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/AttributeServiceImplTest.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.Optional; import org.hypertrace.core.attribute.service.v1.AggregateFunction; -import org.hypertrace.core.attribute.service.v1.AttributeDefinition; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; @@ -45,7 +44,6 @@ public class AttributeServiceImplTest { .setScopeString(AttributeScope.EVENT.name()) .setDisplayName("EVENT name") .setValueKind(AttributeKind.TYPE_STRING) - .setDefinition(AttributeDefinition.getDefaultInstance()) .setGroupable(true) .setType(AttributeType.ATTRIBUTE) // Add default aggregations. See SupportedAggregationsDecorator @@ -60,7 +58,6 @@ public class AttributeServiceImplTest { .setScopeString(AttributeScope.EVENT.name()) .setDisplayName("EVENT type") .setValueKind(AttributeKind.TYPE_STRING) - .setDefinition(AttributeDefinition.getDefaultInstance()) .setGroupable(true) .setType(AttributeType.ATTRIBUTE) // Add default aggregations. See SupportedAggregationsDecorator @@ -77,7 +74,6 @@ public class AttributeServiceImplTest { .setDisplayName("EVENT duration") .setGroupable(false) .setValueKind(AttributeKind.TYPE_INT64) - .setDefinition(AttributeDefinition.getDefaultInstance()) .setType(AttributeType.METRIC) // Add default aggregations. See SupportedAggregationsDecorator .addAllSupportedAggregations( diff --git a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/delegate/AttributeUpdaterImplTest.java b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/delegate/AttributeUpdaterImplTest.java index 4f0447cd..f4c59f05 100644 --- a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/delegate/AttributeUpdaterImplTest.java +++ b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/delegate/AttributeUpdaterImplTest.java @@ -14,7 +14,6 @@ import java.io.IOException; import java.util.Optional; import java.util.stream.IntStream; -import org.hypertrace.core.attribute.service.v1.AttributeDefinition; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.attribute.service.v1.AttributeScope; @@ -66,7 +65,6 @@ void testUpdate() throws Exception { .setUnit("ms") .setValueKind(AttributeKind.TYPE_STRING) .addSupportedAggregations(DISTINCT_COUNT) - .setDefinition(AttributeDefinition.getDefaultInstance()) .setGroupable(true) .setInternal(true) .setCustom(true) diff --git a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModelTest.java b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModelTest.java index 579e2f7b..6cd7f118 100644 --- a/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModelTest.java +++ b/attribute-service-impl/src/test/java/org/hypertrace/core/attribute/service/model/AttributeMetadataModelTest.java @@ -1,6 +1,7 @@ package org.hypertrace.core.attribute.service.model; import static org.hypertrace.core.attribute.service.utils.tenant.TenantUtils.ROOT_TENANT_ID; +import static org.junit.jupiter.api.Assertions.assertFalse; import com.google.common.collect.Lists; import java.io.IOException; @@ -81,7 +82,6 @@ public void testAttributeMetaModelToFromDto() { .setType(AttributeType.ATTRIBUTE) .setUnit("ms") .setValueKind(AttributeKind.TYPE_STRING) - .setDefinition(AttributeDefinition.getDefaultInstance()) .putAllMetadata( Collections.singletonMap( AttributeSource.EDS.name(), @@ -118,9 +118,9 @@ public void testAttributeMetaModelGroupableFromJson() throws IOException { // backward compatibility test, no groupable field, BOOL type AttributeMetadataModel deserializedModel = AttributeMetadataModel.fromJson(json); - Assertions.assertFalse(deserializedModel.isGroupable()); + assertFalse(deserializedModel.isGroupable()); AttributeMetadata metadata = deserializedModel.toDTO(); - Assertions.assertFalse(metadata.getGroupable()); + assertFalse(metadata.getGroupable()); json = "{" @@ -192,9 +192,9 @@ public void testAttributeMetaModelGroupableFromJson() throws IOException { // override default, STRING type deserializedModel = AttributeMetadataModel.fromJson(json); - Assertions.assertFalse(deserializedModel.isGroupable()); + assertFalse(deserializedModel.isGroupable()); metadata = deserializedModel.toDTO(); - Assertions.assertFalse(metadata.getGroupable()); + assertFalse(metadata.getGroupable()); } @Test @@ -270,7 +270,6 @@ void testScopeStringCompatibility() throws IOException { .setDisplayName("Some Name") .setValueKind(AttributeKind.TYPE_BOOL) .setType(AttributeType.ATTRIBUTE) - .setDefinition(AttributeDefinition.getDefaultInstance()) .setCustom(true) .build(); @@ -457,4 +456,33 @@ void testCustomWithNonRootTenantId() throws IOException { final AttributeMetadata metadata = AttributeMetadataModel.fromJson(json).toDTO(); Assertions.assertEquals(expectedMetadata, metadata); } + + @Test + void testCustomAttributeDefinitionIsUnsetIfMissingOrDefaultInModel() throws IOException { + final String missingDefinitionJson = + "{" + + "\"fqn\":\"fqn\"," + + "\"type\":\"ATTRIBUTE\"," + + "\"display_name\":\"Some Name\"," + + "\"key\":\"key\"," + + "\"id\":\"EVENT.key\"," + + "\"value_kind\":\"TYPE_STRING\"," + + "\"scope_string\":\"EVENT\"" + + "}"; + assertFalse(AttributeMetadataModel.fromJson(missingDefinitionJson).toDTO().hasDefinition()); + + final String defaultDefinitionJson = + "{" + + "\"fqn\":\"fqn\"," + + "\"type\":\"ATTRIBUTE\"," + + "\"display_name\":\"Some Name\"," + + "\"key\":\"key\"," + + "\"id\":\"EVENT.key\"," + + "\"value_kind\":\"TYPE_STRING\"," + + "\"scope_string\":\"EVENT\"," + + "\"definition\":{}" + + "}"; + + assertFalse(AttributeMetadataModel.fromJson(defaultDefinitionJson).toDTO().hasDefinition()); + } } diff --git a/attribute-service/src/integrationTest/java/org/hypertrace/core/attribute/service/AttributeServiceTest.java b/attribute-service/src/integrationTest/java/org/hypertrace/core/attribute/service/AttributeServiceTest.java index 60b7fcff..52eded1c 100644 --- a/attribute-service/src/integrationTest/java/org/hypertrace/core/attribute/service/AttributeServiceTest.java +++ b/attribute-service/src/integrationTest/java/org/hypertrace/core/attribute/service/AttributeServiceTest.java @@ -330,6 +330,7 @@ public void testGetAllAttributeMetadata() { .setCustom(true) .build(); + // No custom def on attribute 2 AttributeMetadata expectedAttributeMetadata2 = AttributeMetadata.newBuilder() .setFqn("name-2") @@ -346,7 +347,6 @@ public void testGetAllAttributeMetadata() { .addSources(AttributeSource.EDS) .setId("EVENT.key-2") .setGroupable(true) - .setDefinition(AttributeDefinition.newBuilder().setSourcePath("sourcepath-2")) .setScopeString(AttributeScope.EVENT.name()) .build();