From f6f10f11472d02c7db2b67619524f9ec350ae96e Mon Sep 17 00:00:00 2001 From: semyonmelman Date: Thu, 16 Jan 2025 16:26:04 +0200 Subject: [PATCH 1/4] Added additional parameter TELEMETRY_SERVICE_AVAILABLE to support disabling Telemetry --- .../net/snowflake/client/core/SFBaseSession.java | 9 +++++++++ .../java/net/snowflake/client/core/SessionUtil.java | 6 ++++++ .../client/jdbc/telemetry/TelemetryClient.java | 1 + .../net/snowflake/client/jdbc/SessionUtilTest.java | 12 ++++++++++++ 4 files changed, 28 insertions(+) diff --git a/src/main/java/net/snowflake/client/core/SFBaseSession.java b/src/main/java/net/snowflake/client/core/SFBaseSession.java index a7b374fde..7cf68b756 100644 --- a/src/main/java/net/snowflake/client/core/SFBaseSession.java +++ b/src/main/java/net/snowflake/client/core/SFBaseSession.java @@ -78,6 +78,7 @@ public abstract class SFBaseSession { private boolean formatDateWithTimezone; private boolean enableCombineDescribe; private boolean clientTelemetryEnabled = false; + private boolean isTelemetryServiceAvailable = true; private boolean useSessionTimezone; private boolean defaultFormatDateWithTimezone = true; private boolean getDateUseNullTimezone = true; @@ -989,6 +990,14 @@ public void setClientTelemetryEnabled(boolean clientTelemetryEnabled) { this.clientTelemetryEnabled = clientTelemetryEnabled; } + public boolean isTelemetryServiceAvailable() { + return isTelemetryServiceAvailable; + } + + public void setTelemetryServiceAvailable(boolean isTelemetryServiceAvailable) { + this.isTelemetryServiceAvailable = isTelemetryServiceAvailable; + } + public int getArrayBindStageThreshold() { return arrayBindStageThreshold; } diff --git a/src/main/java/net/snowflake/client/core/SessionUtil.java b/src/main/java/net/snowflake/client/core/SessionUtil.java index e13c21162..016cd4079 100644 --- a/src/main/java/net/snowflake/client/core/SessionUtil.java +++ b/src/main/java/net/snowflake/client/core/SessionUtil.java @@ -83,6 +83,7 @@ public class SessionUtil { private static final String CLIENT_REQUEST_MFA_TOKEN = "CLIENT_REQUEST_MFA_TOKEN"; private static final String SERVICE_NAME = "SERVICE_NAME"; private static final String CLIENT_IN_BAND_TELEMETRY_ENABLED = "CLIENT_TELEMETRY_ENABLED"; + private static final String TELEMETRY_SERVICE_AVAILABLE = "TELEMETRY_SERVICE_AVAILABLE"; private static final String CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED = "CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED"; private static final String CLIENT_RESULT_COLUMN_CASE_INSENSITIVE = @@ -184,6 +185,7 @@ public class SessionUtil { "CLIENT_SESSION_KEEP_ALIVE", CLIENT_ENABLE_LOG_INFO_STATEMENT_PARAMETERS, CLIENT_IN_BAND_TELEMETRY_ENABLED, + TELEMETRY_SERVICE_AVAILABLE, CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED, CLIENT_STORE_TEMPORARY_CREDENTIAL, CLIENT_REQUEST_MFA_TOKEN, @@ -1637,6 +1639,10 @@ static void updateSfDriverParamValues(Map parameters, SFBaseSess if (session != null) { session.setClientTelemetryEnabled((boolean) entry.getValue()); } + } else if (TELEMETRY_SERVICE_AVAILABLE.equalsIgnoreCase(entry.getKey())) { + if (session != null) { + session.setTelemetryServiceAvailable((boolean) entry.getValue()); + } } else if ("CLIENT_STAGE_ARRAY_BINDING_THRESHOLD".equalsIgnoreCase(entry.getKey())) { if (session != null) { session.setArrayBindStageThreshold((int) entry.getValue()); diff --git a/src/main/java/net/snowflake/client/jdbc/telemetry/TelemetryClient.java b/src/main/java/net/snowflake/client/jdbc/telemetry/TelemetryClient.java index 50efb9234..9625ab4d5 100644 --- a/src/main/java/net/snowflake/client/jdbc/telemetry/TelemetryClient.java +++ b/src/main/java/net/snowflake/client/jdbc/telemetry/TelemetryClient.java @@ -74,6 +74,7 @@ public class TelemetryClient implements Telemetry { private TelemetryClient(SFSession session, int flushSize) { this.session = session; this.serverUrl = session.getUrl(); + this.isTelemetryServiceAvailable = session.isTelemetryServiceAvailable(); this.httpClient = null; if (this.serverUrl.endsWith("/")) { diff --git a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java index 4056dda1b..e2160cd97 100644 --- a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java +++ b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java @@ -70,5 +70,17 @@ public void testGetCommonParams() throws Exception { SessionUtil.getCommonParams( mapper.readTree("[{\"name\": \"TIMEZONE\", \"value\": \"value\"}]")); assertEquals("value", result.get("TIMEZONE")); + + result = + SessionUtil.getCommonParams( + mapper.readTree( + "[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": true}]")); + assertTrue((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); + + result = + SessionUtil.getCommonParams( + mapper.readTree( + "[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": false}]")); + assertFalse((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); } } From 12e0d867458e3d520105da973ab983570fb2e6a9 Mon Sep 17 00:00:00 2001 From: semyonmelman Date: Thu, 16 Jan 2025 16:32:11 +0200 Subject: [PATCH 2/4] formatting --- .../net/snowflake/client/jdbc/SessionUtilTest.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java index e2160cd97..83bfe3b44 100644 --- a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java +++ b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java @@ -72,15 +72,13 @@ public void testGetCommonParams() throws Exception { assertEquals("value", result.get("TIMEZONE")); result = - SessionUtil.getCommonParams( - mapper.readTree( - "[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": true}]")); + SessionUtil.getCommonParams( + mapper.readTree("[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": true}]")); assertTrue((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); result = - SessionUtil.getCommonParams( - mapper.readTree( - "[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": false}]")); + SessionUtil.getCommonParams( + mapper.readTree("[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": false}]")); assertFalse((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); } } From 7fbdc231ef10ecf5fc27c24e73698101e4ce642e Mon Sep 17 00:00:00 2001 From: semyonmelman Date: Fri, 17 Jan 2025 16:12:15 +0200 Subject: [PATCH 3/4] Added additional parameter TELEMETRY_SERVICE_AVAILABLE to support disabling Telemetry --- .../net/snowflake/client/core/SFSession.java | 14 ++++++++++++++ .../net/snowflake/client/core/SessionUtil.java | 6 ------ .../client/core/SFLoginInputTest.java | 18 ++++++++++++++++++ .../snowflake/client/jdbc/SessionUtilTest.java | 10 ---------- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/snowflake/client/core/SFSession.java b/src/main/java/net/snowflake/client/core/SFSession.java index 16e11e445..74bbab944 100644 --- a/src/main/java/net/snowflake/client/core/SFSession.java +++ b/src/main/java/net/snowflake/client/core/SFSession.java @@ -67,6 +67,8 @@ public class SFSession extends SFBaseSession { private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory.getObjectMapper(); private static final String SF_PATH_SESSION_HEARTBEAT = "/session/heartbeat"; private static final String SF_PATH_QUERY_MONITOR = "/monitoring/queries/"; + public static final String TELEMETRY_SERVICE_AVAILABLE = "TELEMETRY_SERVICE_AVAILABLE"; + // temporarily have this variable to avoid hardcode. // Need to be removed when a better way to organize session parameter is introduced. private static final String CLIENT_STORE_TEMPORARY_CREDENTIAL = @@ -736,6 +738,18 @@ public synchronized void open() throws SFException, SnowflakeSQLException { HttpUtil.setConnectionTimeout(loginInput.getConnectionTimeoutInMillis()); HttpUtil.setSocketTimeout(loginInput.getSocketTimeoutInMillis()); + String telemetryValue = loginInput.getSessionParameters() + .getOrDefault(TELEMETRY_SERVICE_AVAILABLE, Boolean.TRUE) + .toString(); + + boolean isTelemetryServiceAvailable = Boolean.parseBoolean(telemetryValue); + + if (!isTelemetryServiceAvailable) { + logger.debug("Telemetry Service is not available"); + } + + setTelemetryServiceAvailable(isTelemetryServiceAvailable); + runDiagnosticsIfEnabled(); SFLoginOutput loginOutput = diff --git a/src/main/java/net/snowflake/client/core/SessionUtil.java b/src/main/java/net/snowflake/client/core/SessionUtil.java index 016cd4079..e13c21162 100644 --- a/src/main/java/net/snowflake/client/core/SessionUtil.java +++ b/src/main/java/net/snowflake/client/core/SessionUtil.java @@ -83,7 +83,6 @@ public class SessionUtil { private static final String CLIENT_REQUEST_MFA_TOKEN = "CLIENT_REQUEST_MFA_TOKEN"; private static final String SERVICE_NAME = "SERVICE_NAME"; private static final String CLIENT_IN_BAND_TELEMETRY_ENABLED = "CLIENT_TELEMETRY_ENABLED"; - private static final String TELEMETRY_SERVICE_AVAILABLE = "TELEMETRY_SERVICE_AVAILABLE"; private static final String CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED = "CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED"; private static final String CLIENT_RESULT_COLUMN_CASE_INSENSITIVE = @@ -185,7 +184,6 @@ public class SessionUtil { "CLIENT_SESSION_KEEP_ALIVE", CLIENT_ENABLE_LOG_INFO_STATEMENT_PARAMETERS, CLIENT_IN_BAND_TELEMETRY_ENABLED, - TELEMETRY_SERVICE_AVAILABLE, CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED, CLIENT_STORE_TEMPORARY_CREDENTIAL, CLIENT_REQUEST_MFA_TOKEN, @@ -1639,10 +1637,6 @@ static void updateSfDriverParamValues(Map parameters, SFBaseSess if (session != null) { session.setClientTelemetryEnabled((boolean) entry.getValue()); } - } else if (TELEMETRY_SERVICE_AVAILABLE.equalsIgnoreCase(entry.getKey())) { - if (session != null) { - session.setTelemetryServiceAvailable((boolean) entry.getValue()); - } } else if ("CLIENT_STAGE_ARRAY_BINDING_THRESHOLD".equalsIgnoreCase(entry.getKey())) { if (session != null) { session.setArrayBindStageThreshold((int) entry.getValue()); diff --git a/src/test/java/net/snowflake/client/core/SFLoginInputTest.java b/src/test/java/net/snowflake/client/core/SFLoginInputTest.java index b34eebc02..4931593a0 100644 --- a/src/test/java/net/snowflake/client/core/SFLoginInputTest.java +++ b/src/test/java/net/snowflake/client/core/SFLoginInputTest.java @@ -1,8 +1,15 @@ package net.snowflake.client.core; +import static net.snowflake.client.core.SFSession.TELEMETRY_SERVICE_AVAILABLE; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashMap; +import java.util.Map; public class SFLoginInputTest { @@ -19,4 +26,15 @@ public void testGetHostFromServerUrlWithProtocolShouldNotThrow() throws SFExcept sfLoginInput.setServerUrl("https://host.com"); assertEquals("host.com", sfLoginInput.getHostFromServerUrl()); } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + @NullSource + public void testGetTelemetryServiceAvailableShouldReturnCorrectValue(Boolean value) { + SFLoginInput sfLoginInput = new SFLoginInput(); + Map sessionParameters = new HashMap<>(); + sessionParameters.put(TELEMETRY_SERVICE_AVAILABLE, value); + sfLoginInput.setSessionParameters(sessionParameters); + assertEquals(value, sfLoginInput.getSessionParameters().get(TELEMETRY_SERVICE_AVAILABLE)); + } } diff --git a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java index 83bfe3b44..4056dda1b 100644 --- a/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java +++ b/src/test/java/net/snowflake/client/jdbc/SessionUtilTest.java @@ -70,15 +70,5 @@ public void testGetCommonParams() throws Exception { SessionUtil.getCommonParams( mapper.readTree("[{\"name\": \"TIMEZONE\", \"value\": \"value\"}]")); assertEquals("value", result.get("TIMEZONE")); - - result = - SessionUtil.getCommonParams( - mapper.readTree("[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": true}]")); - assertTrue((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); - - result = - SessionUtil.getCommonParams( - mapper.readTree("[{\"name\": \"TELEMETRY_SERVICE_AVAILABLE\", \"value\": false}]")); - assertFalse((boolean) result.get("TELEMETRY_SERVICE_AVAILABLE")); } } From 34dd118cd8abe7228e213f75c454561bfe6629ce Mon Sep 17 00:00:00 2001 From: semyonmelman Date: Fri, 17 Jan 2025 16:13:42 +0200 Subject: [PATCH 4/4] Added additional parameter TELEMETRY_SERVICE_AVAILABLE to support disabling Telemetry --- src/main/java/net/snowflake/client/core/SFSession.java | 4 +++- .../java/net/snowflake/client/core/SFLoginInputTest.java | 5 ++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/snowflake/client/core/SFSession.java b/src/main/java/net/snowflake/client/core/SFSession.java index 74bbab944..e2975427d 100644 --- a/src/main/java/net/snowflake/client/core/SFSession.java +++ b/src/main/java/net/snowflake/client/core/SFSession.java @@ -738,7 +738,9 @@ public synchronized void open() throws SFException, SnowflakeSQLException { HttpUtil.setConnectionTimeout(loginInput.getConnectionTimeoutInMillis()); HttpUtil.setSocketTimeout(loginInput.getSocketTimeoutInMillis()); - String telemetryValue = loginInput.getSessionParameters() + String telemetryValue = + loginInput + .getSessionParameters() .getOrDefault(TELEMETRY_SERVICE_AVAILABLE, Boolean.TRUE) .toString(); diff --git a/src/test/java/net/snowflake/client/core/SFLoginInputTest.java b/src/test/java/net/snowflake/client/core/SFLoginInputTest.java index 4931593a0..1e0923442 100644 --- a/src/test/java/net/snowflake/client/core/SFLoginInputTest.java +++ b/src/test/java/net/snowflake/client/core/SFLoginInputTest.java @@ -3,14 +3,13 @@ import static net.snowflake.client.core.SFSession.TELEMETRY_SERVICE_AVAILABLE; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullSource; import org.junit.jupiter.params.provider.ValueSource; -import java.util.HashMap; -import java.util.Map; - public class SFLoginInputTest { @Test