From 6ae5f11f28409cdb96f747ae7028c921a7c9086f Mon Sep 17 00:00:00 2001 From: Fabian Meiswinkel Date: Wed, 2 Jun 2021 15:37:03 +0000 Subject: [PATCH 1/4] Fixing max length of userAgent header --- .../src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala | 2 +- .../java/com/azure/cosmos/implementation/HttpConstants.java | 1 + .../com/azure/cosmos/implementation/UserAgentContainer.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala index 72925ba6e7b3..0ac3ed49a80c 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala @@ -9,7 +9,7 @@ import com.azure.cosmos.implementation.HttpConstants // cosmos db related constants private object CosmosConstants { private[this] val currentVersion = - CoreUtils.getProperties(HttpConstants.Versions.AZURE_COSMOS_PROPERTIES_FILE_NAME).get("version") + CoreUtils.getProperties(HttpConstants.Versions.AZURE_COSMOS_SPARK_31_PROPERTIES_FILE_NAME).get("version") val userAgentSuffix = s" SparkConnector/$currentVersion" object Names { diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java index f8f68bb03af0..9f9a2a302302 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java @@ -276,6 +276,7 @@ public static class Versions { public static final String CURRENT_VERSION = "2018-12-31"; public static final String QUERY_VERSION = "1.0"; public static final String AZURE_COSMOS_PROPERTIES_FILE_NAME = "azure-cosmos.properties"; + public static final String AZURE_COSMOS_SPARK_31_PROPERTIES_FILE_NAME = "azure-cosmos-spark-3-1_2-12.properties"; public static final String SDK_VERSION = CoreUtils.getProperties(AZURE_COSMOS_PROPERTIES_FILE_NAME).get("version"); public static final String SDK_NAME = "cosmos"; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java index 72d0d1b44f41..0602cd9da749 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java @@ -8,7 +8,7 @@ */ public class UserAgentContainer { - private static final int MAX_SUFFIX_LENGTH = 64; + private static final int MAX_SUFFIX_LENGTH = 192; private final String baseUserAgent; private String suffix; private String userAgent; From 769b9f0f4d54807c7a39203df9688048b4d2519c Mon Sep 17 00:00:00 2001 From: Fabian Meiswinkel Date: Fri, 4 Jun 2021 19:09:26 +0000 Subject: [PATCH 2/4] Addressed CR feedback --- .../azure-cosmos-spark_3-1_2-12/pom.xml | 1 + .../resources/azure-cosmos-spark.properties | 2 ++ .../azure/cosmos/spark/CosmosConstants.scala | 9 ++++++--- .../cosmos/spark/CosmosConstantsSpec.scala | 20 +++++++++++++++++++ .../cosmos/implementation/HttpConstants.java | 1 - 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/resources/azure-cosmos-spark.properties create mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/pom.xml b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/pom.xml index f8585231555f..70de649c20ab 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/pom.xml @@ -165,6 +165,7 @@ META-INF/project.properties META-INF/services/org.apache.spark.sql.sources.DataSourceRegister + azure-cosmos-spark.properties diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/resources/azure-cosmos-spark.properties b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/resources/azure-cosmos-spark.properties new file mode 100644 index 000000000000..30846653315a --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/resources/azure-cosmos-spark.properties @@ -0,0 +1,2 @@ +name=${project.artifactId} +version=${project.version} \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala index 0ac3ed49a80c..f7902e8c7dc7 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala @@ -8,9 +8,12 @@ import com.azure.cosmos.implementation.HttpConstants // cosmos db related constants private object CosmosConstants { - private[this] val currentVersion = - CoreUtils.getProperties(HttpConstants.Versions.AZURE_COSMOS_SPARK_31_PROPERTIES_FILE_NAME).get("version") - val userAgentSuffix = s" SparkConnector/$currentVersion" + private[this] val propertiesFileName = "azure-cosmos-spark.properties" + val currentVersion: String = + CoreUtils.getProperties(propertiesFileName).get("version") + val currentName: String = + CoreUtils.getProperties(propertiesFileName).get("name") + val userAgentSuffix = s" $currentName/$currentVersion" object Names { val ItemsDataSourceShortName = "cosmos.oltp" diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala new file mode 100644 index 000000000000..d5def1aa8744 --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +package com.azure.cosmos.spark + +class CosmosConstantsSpec extends UnitSpec { + "CurrentVersion" should "not be null" in { + CosmosConstants.currentVersion == null shouldBe false + CosmosConstants.currentVersion.startsWith("4.") shouldBe true + } + + "CurrentName" should "not be null" in { + CosmosConstants.currentName == null shouldBe false + CosmosConstants.currentName.startsWith("azure-cosmos-spark") shouldBe true + } + + "UserAgentSuffix" should "combine name and version" in { + CosmosConstants.userAgentSuffix shouldBe + s" ${CosmosConstants.currentName}/${CosmosConstants.currentVersion}" + } +} diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java index 9f9a2a302302..f8f68bb03af0 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/HttpConstants.java @@ -276,7 +276,6 @@ public static class Versions { public static final String CURRENT_VERSION = "2018-12-31"; public static final String QUERY_VERSION = "1.0"; public static final String AZURE_COSMOS_PROPERTIES_FILE_NAME = "azure-cosmos.properties"; - public static final String AZURE_COSMOS_SPARK_31_PROPERTIES_FILE_NAME = "azure-cosmos-spark-3-1_2-12.properties"; public static final String SDK_VERSION = CoreUtils.getProperties(AZURE_COSMOS_PROPERTIES_FILE_NAME).get("version"); public static final String SDK_NAME = "cosmos"; From 8b946c4daf978286456f75caba1a38d45004d1fc Mon Sep 17 00:00:00 2001 From: Fabian Meiswinkel Date: Fri, 4 Jun 2021 22:12:10 +0000 Subject: [PATCH 3/4] Restricting the total UserAgent length to 255 characters --- .../scala/com/azure/cosmos/spark/CosmosConstants.scala | 2 +- .../com/azure/cosmos/spark/CosmosConstantsSpec.scala | 2 +- .../azure/cosmos/implementation/UserAgentContainer.java | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala index f7902e8c7dc7..13133254a242 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/main/scala/com/azure/cosmos/spark/CosmosConstants.scala @@ -13,7 +13,7 @@ private object CosmosConstants { CoreUtils.getProperties(propertiesFileName).get("version") val currentName: String = CoreUtils.getProperties(propertiesFileName).get("name") - val userAgentSuffix = s" $currentName/$currentVersion" + val userAgentSuffix = s"SparkConnector/$currentName/$currentVersion" object Names { val ItemsDataSourceShortName = "cosmos.oltp" diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala index d5def1aa8744..38bd042fe06e 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/src/test/scala/com/azure/cosmos/spark/CosmosConstantsSpec.scala @@ -15,6 +15,6 @@ class CosmosConstantsSpec extends UnitSpec { "UserAgentSuffix" should "combine name and version" in { CosmosConstants.userAgentSuffix shouldBe - s" ${CosmosConstants.currentName}/${CosmosConstants.currentVersion}" + s"SparkConnector/${CosmosConstants.currentName}/${CosmosConstants.currentVersion}" } } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java index 0602cd9da749..2d5ccf1c9f7f 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/UserAgentContainer.java @@ -8,7 +8,8 @@ */ public class UserAgentContainer { - private static final int MAX_SUFFIX_LENGTH = 192; + private static final int MAX_USER_AGENT_LENGTH = 255; + private final int maxSuffixLength; private final String baseUserAgent; private String suffix; private String userAgent; @@ -18,6 +19,7 @@ private UserAgentContainer(String sdkName, String sdkVersion) { this.baseUserAgent = Utils.getUserAgent(sdkName, sdkVersion); this.suffix = ""; this.userAgent = baseUserAgent; + this.maxSuffixLength = MAX_USER_AGENT_LENGTH - 1 - baseUserAgent.length(); } public UserAgentContainer() { @@ -29,8 +31,8 @@ public String getSuffix() { } public void setSuffix(String suffix) { - if (suffix.length() > MAX_SUFFIX_LENGTH) { - suffix = suffix.substring(0, MAX_SUFFIX_LENGTH); + if (suffix.length() > maxSuffixLength) { + suffix = suffix.substring(0, maxSuffixLength); } this.suffix = suffix; From 67c2c7ad54c30aad5cb57f0ec67edc8c79825157 Mon Sep 17 00:00:00 2001 From: Fabian Meiswinkel Date: Mon, 7 Jun 2021 08:27:07 +0000 Subject: [PATCH 4/4] Fixing unit test regression --- .../azure/cosmos/implementation/UserAgentContainerTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/UserAgentContainerTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/UserAgentContainerTest.java index 0df64c618889..f4a84dd5a381 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/UserAgentContainerTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/UserAgentContainerTest.java @@ -31,10 +31,12 @@ public void userAgentContainerSetSuffix() { assertThat(userAgentContainer.getUserAgent()).isEqualTo(expectedString); //With suffix greater than 64 character - userProvidedSuffix = "greater than 64 characters ###########################################"; + userProvidedSuffix = "greater than 255 characters in total ################################################" + + "##########################################################################################################" + + "##########################################################################################################"; userAgentContainer = new UserAgentContainer(); userAgentContainer.setSuffix(userProvidedSuffix); - expectedString = expectedStringFixedPart + SPACE + userProvidedSuffix.substring(0, 64); + expectedString = (expectedStringFixedPart + SPACE + userProvidedSuffix).substring(0, 255); assertThat(userAgentContainer.getUserAgent()).isEqualTo(expectedString); }