From 911d8edd982f397458e3fbe7c4d84b649ecd76fe Mon Sep 17 00:00:00 2001 From: navneet singh Date: Thu, 8 Oct 2026 15:48:10 +0530 Subject: [PATCH] Avoid shared internal code in sdk-common and api-incubator (#6970) --- .../all/NoSharedInternalCodeTest.java | 2 -- .../sdk/common/export/RetryPolicy.java | 8 ++++++-- .../sdk/resources/ResourceBuilder.java | 3 +-- .../internal/AttributeCheckUtil.java | 19 ++++++++++++++----- .../resources/internal/SdkEntityBuilder.java | 8 ++++++-- .../sdk/resources/ResourceTest.java | 18 ++++++++++++++++++ 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java b/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java index b03bd84a75b..669d1019a55 100644 --- a/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java +++ b/all/src/test/java/io/opentelemetry/all/NoSharedInternalCodeTest.java @@ -33,14 +33,12 @@ class NoSharedInternalCodeTest { private static final Set exemptions = Set.of( - "opentelemetry-api-incubator", "opentelemetry-exporter-common", "opentelemetry-exporter-logging", "opentelemetry-exporter-logging-otlp", "opentelemetry-exporter-prometheus", "opentelemetry-extension-trace-propagators", "opentelemetry-opencensus-shim", - "opentelemetry-sdk-common", "opentelemetry-sdk-logs", "opentelemetry-sdk-metrics", "opentelemetry-sdk-profiles", diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/common/export/RetryPolicy.java b/sdk/common/src/main/java/io/opentelemetry/sdk/common/export/RetryPolicy.java index 15fdf2d287e..732dc1da1a2 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/common/export/RetryPolicy.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/common/export/RetryPolicy.java @@ -5,8 +5,6 @@ package io.opentelemetry.sdk.common.export; -import static io.opentelemetry.api.internal.Utils.checkArgument; - import com.google.auto.value.AutoValue; import java.io.IOException; import java.time.Duration; @@ -133,5 +131,11 @@ public RetryPolicy build() { return retryPolicy; } + + private static void checkArgument(boolean isValid, String errorMessage) { + if (!isValid) { + throw new IllegalArgumentException(errorMessage); + } + } } } diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/ResourceBuilder.java b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/ResourceBuilder.java index 9a9b7729a9c..694d5cc92a3 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/ResourceBuilder.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/ResourceBuilder.java @@ -8,7 +8,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.api.internal.StringUtils; import io.opentelemetry.sdk.resources.internal.Entity; import io.opentelemetry.sdk.resources.internal.EntityUtil; import java.util.ArrayList; @@ -441,6 +440,6 @@ private static String deriveSchemaUrl(List entities) { @Nullable static String normalizeSchemaUrl(@Nullable String schemaUrl) { - return StringUtils.isNullOrEmpty(schemaUrl) ? null : schemaUrl; + return schemaUrl == null || schemaUrl.isEmpty() ? null : schemaUrl; } } diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/AttributeCheckUtil.java b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/AttributeCheckUtil.java index 49eec3563c9..21ce643f9a2 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/AttributeCheckUtil.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/AttributeCheckUtil.java @@ -7,8 +7,6 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.internal.StringUtils; -import io.opentelemetry.api.internal.Utils; import java.util.Objects; /** @@ -35,8 +33,9 @@ private AttributeCheckUtil() {} public static void checkAttributes(Attributes attributes) { attributes.forEach( (key, value) -> { - Utils.checkArgument( - isValidAndNotEmpty(key), "Attribute key" + ERROR_MESSAGE_INVALID_CHARS); + if (!isValidAndNotEmpty(key)) { + throw new IllegalArgumentException("Attribute key" + ERROR_MESSAGE_INVALID_CHARS); + } Objects.requireNonNull(value, "Attribute value" + ERROR_MESSAGE_INVALID_VALUE); }); } @@ -60,6 +59,16 @@ public static boolean isValidAndNotEmpty(AttributeKey name) { * @return whether the name is valid. */ public static boolean isValid(String name) { - return name.length() <= MAX_LENGTH && StringUtils.isPrintableString(name); + return name.length() <= MAX_LENGTH && isPrintableString(name); + } + + private static boolean isPrintableString(String str) { + for (int i = 0; i < str.length(); i++) { + char ch = str.charAt(i); + if (ch < ' ' || ch > '~') { + return false; + } + } + return true; } } diff --git a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/SdkEntityBuilder.java b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/SdkEntityBuilder.java index 0112705f971..d392678eade 100644 --- a/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/SdkEntityBuilder.java +++ b/sdk/common/src/main/java/io/opentelemetry/sdk/resources/internal/SdkEntityBuilder.java @@ -5,8 +5,6 @@ package io.opentelemetry.sdk.resources.internal; -import static io.opentelemetry.api.internal.Utils.checkArgument; - import io.opentelemetry.api.common.Attributes; import java.util.Objects; import javax.annotation.Nullable; @@ -64,4 +62,10 @@ public EntityBuilder setDescription(Attributes description) { public Entity build() { return SdkEntity.create(entityType, id, description, schemaUrl); } + + private static void checkArgument(boolean isValid, String errorMessage) { + if (!isValid) { + throw new IllegalArgumentException(errorMessage); + } + } } diff --git a/sdk/common/src/test/java/io/opentelemetry/sdk/resources/ResourceTest.java b/sdk/common/src/test/java/io/opentelemetry/sdk/resources/ResourceTest.java index 4ee142ad71e..97ed3921d93 100644 --- a/sdk/common/src/test/java/io/opentelemetry/sdk/resources/ResourceTest.java +++ b/sdk/common/src/test/java/io/opentelemetry/sdk/resources/ResourceTest.java @@ -295,6 +295,24 @@ void create_NullEmptyValue() { assertThat(resource.getAttributes().size()).isEqualTo(1); } + @Test + void create_invalidAttributeKey() { + assertThatThrownBy(() -> Resource.create(Attributes.of(stringKey("\u0002ab"), "value"))) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Attribute key should be a ASCII string"); + + assertThatThrownBy(() -> Resource.create(Attributes.of(stringKey("key\u007f"), "value"))) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Attribute key should be a ASCII string"); + + char[] chars = new char[256]; + Arrays.fill(chars, 'a'); + String tooLongKey = new String(chars); + assertThatThrownBy(() -> Resource.create(Attributes.of(stringKey(tooLongKey), "value"))) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Attribute key should be a ASCII string"); + } + @Test void testResourceEquals() { Attributes attribute1 = Attributes.of(stringKey("a"), "1", stringKey("b"), "2");