From 6ff2fc74299cdae614ca3d44eeefa96dc1ff4a13 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 26 Oct 2021 15:56:19 -0700 Subject: [PATCH] Expose version as AirbyteVersion instead of String in Configs iface (#7369) --- .../analytics/LoggingTrackingClient.java | 2 +- .../analytics/SegmentTrackingClient.java | 4 ++-- .../analytics/TrackingClientSingleton.java | 5 +++-- .../airbyte/analytics/TrackingIdentity.java | 7 ++++--- .../analytics/SegmentTrackingClientTest.java | 11 ++++++----- .../TrackingClientSingletonTest.java | 3 ++- .../commons/version/AirbyteVersion.java | 19 +++++++++++++++++++ .../main/java/io/airbyte/config/Configs.java | 3 ++- .../java/io/airbyte/config/EnvConfigs.java | 5 +++-- .../io/airbyte/config/EnvConfigsTest.java | 3 ++- .../airbyte/scheduler/app/SchedulerApp.java | 2 +- .../java/io/airbyte/server/ServerApp.java | 8 ++++---- .../airbyte/server/apis/ConfigurationApi.java | 3 +-- .../server/apis/ConfigurationApiTest.java | 3 ++- 14 files changed, 52 insertions(+), 26 deletions(-) diff --git a/airbyte-analytics/src/main/java/io/airbyte/analytics/LoggingTrackingClient.java b/airbyte-analytics/src/main/java/io/airbyte/analytics/LoggingTrackingClient.java index d3ecf81688c..d753e07687e 100644 --- a/airbyte-analytics/src/main/java/io/airbyte/analytics/LoggingTrackingClient.java +++ b/airbyte-analytics/src/main/java/io/airbyte/analytics/LoggingTrackingClient.java @@ -39,7 +39,7 @@ public class LoggingTrackingClient implements TrackingClient { @Override public void track(final UUID workspaceId, final String action, final Map metadata) { LOGGER.info("track. version: {}, userId: {}, action: {}, metadata: {}", - identityFetcher.apply(workspaceId).getAirbyteVersion(), + identityFetcher.apply(workspaceId).getAirbyteVersion().serialize(), identityFetcher.apply(workspaceId).getCustomerId(), action, metadata); diff --git a/airbyte-analytics/src/main/java/io/airbyte/analytics/SegmentTrackingClient.java b/airbyte-analytics/src/main/java/io/airbyte/analytics/SegmentTrackingClient.java index 8fe948615a2..678e4bf6d41 100644 --- a/airbyte-analytics/src/main/java/io/airbyte/analytics/SegmentTrackingClient.java +++ b/airbyte-analytics/src/main/java/io/airbyte/analytics/SegmentTrackingClient.java @@ -52,7 +52,7 @@ public class SegmentTrackingClient implements TrackingClient { final Map identityMetadata = new HashMap<>(); // deployment - identityMetadata.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion()); + identityMetadata.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion().serialize()); identityMetadata.put("deployment_mode", deployment.getDeploymentMode()); identityMetadata.put("deployment_env", deployment.getDeploymentEnv()); identityMetadata.put("deployment_id", deployment.getDeploymentId()); @@ -88,7 +88,7 @@ public class SegmentTrackingClient implements TrackingClient { public void track(final UUID workspaceId, final String action, final Map metadata) { final Map mapCopy = new HashMap<>(metadata); final TrackingIdentity trackingIdentity = identityFetcher.apply(workspaceId); - mapCopy.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion()); + mapCopy.put(AIRBYTE_VERSION_KEY, trackingIdentity.getAirbyteVersion().serialize()); if (!metadata.isEmpty()) { trackingIdentity.getEmail().ifPresent(email -> mapCopy.put("email", email)); } diff --git a/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingClientSingleton.java b/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingClientSingleton.java index 420295054bc..27072a8fd4b 100644 --- a/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingClientSingleton.java +++ b/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingClientSingleton.java @@ -5,6 +5,7 @@ package io.airbyte.analytics; import com.google.common.annotations.VisibleForTesting; +import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs; import io.airbyte.config.StandardWorkspace; import io.airbyte.config.persistence.ConfigNotFoundException; @@ -38,7 +39,7 @@ public class TrackingClientSingleton { public static void initialize(final Configs.TrackingStrategy trackingStrategy, final Deployment deployment, final String airbyteRole, - final String airbyteVersion, + final AirbyteVersion airbyteVersion, final ConfigRepository configRepository) { initialize(createTrackingClient( trackingStrategy, @@ -53,7 +54,7 @@ public class TrackingClientSingleton { } @VisibleForTesting - static TrackingIdentity getTrackingIdentity(final ConfigRepository configRepository, final String airbyteVersion, final UUID workspaceId) { + static TrackingIdentity getTrackingIdentity(final ConfigRepository configRepository, final AirbyteVersion airbyteVersion, final UUID workspaceId) { try { final StandardWorkspace workspace = configRepository.getStandardWorkspace(workspaceId, true); String email = null; diff --git a/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingIdentity.java b/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingIdentity.java index be087f9955c..f7acd96296c 100644 --- a/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingIdentity.java +++ b/airbyte-analytics/src/main/java/io/airbyte/analytics/TrackingIdentity.java @@ -4,13 +4,14 @@ package io.airbyte.analytics; +import io.airbyte.commons.version.AirbyteVersion; import java.util.Objects; import java.util.Optional; import java.util.UUID; public class TrackingIdentity { - private final String airbyteVersion; + private final AirbyteVersion airbyteVersion; private final UUID customerId; private final String email; private final Boolean anonymousDataCollection; @@ -22,7 +23,7 @@ public class TrackingIdentity { } public TrackingIdentity( - final String airbyteVersion, + final AirbyteVersion airbyteVersion, final UUID customerId, final String email, final Boolean anonymousDataCollection, @@ -36,7 +37,7 @@ public class TrackingIdentity { this.securityUpdates = securityUpdates; } - public String getAirbyteVersion() { + public AirbyteVersion getAirbyteVersion() { return airbyteVersion; } diff --git a/airbyte-analytics/src/test/java/io/airbyte/analytics/SegmentTrackingClientTest.java b/airbyte-analytics/src/test/java/io/airbyte/analytics/SegmentTrackingClientTest.java index 4f36ca00bdb..e782c4ee66d 100644 --- a/airbyte-analytics/src/test/java/io/airbyte/analytics/SegmentTrackingClientTest.java +++ b/airbyte-analytics/src/test/java/io/airbyte/analytics/SegmentTrackingClientTest.java @@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableMap; import com.segment.analytics.Analytics; import com.segment.analytics.messages.IdentifyMessage; import com.segment.analytics.messages.TrackMessage; +import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs; import io.airbyte.config.Configs.WorkerEnvironment; import java.util.Map; @@ -25,7 +26,7 @@ import org.mockito.ArgumentCaptor; class SegmentTrackingClientTest { - private static final String AIRBYTE_VERSION = "dev"; + private static final AirbyteVersion AIRBYTE_VERSION = new AirbyteVersion("dev"); private static final Deployment DEPLOYMENT = new Deployment(Configs.DeploymentMode.OSS, UUID.randomUUID(), WorkerEnvironment.DOCKER); private static final String EMAIL = "a@airbyte.io"; private static final TrackingIdentity IDENTITY = new TrackingIdentity(AIRBYTE_VERSION, UUID.randomUUID(), EMAIL, false, false, true); @@ -59,7 +60,7 @@ class SegmentTrackingClientTest { .put("deployment_env", DEPLOYMENT.getDeploymentEnv()) .put("deployment_mode", DEPLOYMENT.getDeploymentMode()) .put("deployment_id", DEPLOYMENT.getDeploymentId()) - .put("airbyte_version", AIRBYTE_VERSION) + .put("airbyte_version", AIRBYTE_VERSION.serialize()) .put("email", IDENTITY.getEmail().get()) .put("anonymized", IDENTITY.isAnonymousDataCollection()) .put("subscribed_newsletter", IDENTITY.isNews()) @@ -85,7 +86,7 @@ class SegmentTrackingClientTest { .put("deployment_env", DEPLOYMENT.getDeploymentEnv()) .put("deployment_mode", DEPLOYMENT.getDeploymentMode()) .put("deployment_id", DEPLOYMENT.getDeploymentId()) - .put("airbyte_version", AIRBYTE_VERSION) + .put("airbyte_version", AIRBYTE_VERSION.serialize()) .put("email", IDENTITY.getEmail().get()) .put("anonymized", IDENTITY.isAnonymousDataCollection()) .put("subscribed_newsletter", IDENTITY.isNews()) @@ -99,7 +100,7 @@ class SegmentTrackingClientTest { @Test void testTrack() { final ArgumentCaptor mockBuilder = ArgumentCaptor.forClass(TrackMessage.Builder.class); - final ImmutableMap metadata = ImmutableMap.of("airbyte_version", AIRBYTE_VERSION); + final ImmutableMap metadata = ImmutableMap.of("airbyte_version", AIRBYTE_VERSION.serialize()); segmentTrackingClient.track(WORKSPACE_ID, "jump"); @@ -116,7 +117,7 @@ class SegmentTrackingClientTest { final ImmutableMap metadata = ImmutableMap.of( "height", "80 meters", "email", EMAIL, - "airbyte_version", AIRBYTE_VERSION); + "airbyte_version", AIRBYTE_VERSION.serialize()); segmentTrackingClient.track(WORKSPACE_ID, "jump", metadata); diff --git a/airbyte-analytics/src/test/java/io/airbyte/analytics/TrackingClientSingletonTest.java b/airbyte-analytics/src/test/java/io/airbyte/analytics/TrackingClientSingletonTest.java index c7d80fd4c1f..055b6fa52cd 100644 --- a/airbyte-analytics/src/test/java/io/airbyte/analytics/TrackingClientSingletonTest.java +++ b/airbyte-analytics/src/test/java/io/airbyte/analytics/TrackingClientSingletonTest.java @@ -9,6 +9,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs; import io.airbyte.config.Configs.WorkerEnvironment; import io.airbyte.config.StandardWorkspace; @@ -24,7 +25,7 @@ import org.junit.jupiter.api.Test; class TrackingClientSingletonTest { private static final UUID WORKSPACE_ID = UUID.randomUUID(); - private static final String AIRBYTE_VERSION = "dev"; + private static final AirbyteVersion AIRBYTE_VERSION = new AirbyteVersion("dev"); private static final String EMAIL = "a@airbyte.io"; private static final Deployment DEPLOYMENT = new Deployment(Configs.DeploymentMode.OSS, UUID.randomUUID(), WorkerEnvironment.DOCKER); private static final TrackingIdentity IDENTITY = new TrackingIdentity(AIRBYTE_VERSION, UUID.randomUUID(), EMAIL, false, false, true); diff --git a/airbyte-commons/src/main/java/io/airbyte/commons/version/AirbyteVersion.java b/airbyte-commons/src/main/java/io/airbyte/commons/version/AirbyteVersion.java index 588bdbaf6a4..c953139ad92 100644 --- a/airbyte-commons/src/main/java/io/airbyte/commons/version/AirbyteVersion.java +++ b/airbyte-commons/src/main/java/io/airbyte/commons/version/AirbyteVersion.java @@ -5,6 +5,7 @@ package io.airbyte.commons.version; import com.google.common.base.Preconditions; +import java.util.Objects; /** * The AirbyteVersion identifies the version of the database used internally by Airbyte services. @@ -166,4 +167,22 @@ public class AirbyteVersion { return versionWithoutPatch(new AirbyteVersion(airbyteVersion)); } + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final AirbyteVersion that = (AirbyteVersion) o; + return Objects.equals(version, that.version) && Objects.equals(major, that.major) && Objects.equals(minor, that.minor) + && Objects.equals(patch, that.patch); + } + + @Override + public int hashCode() { + return Objects.hash(version, major, minor, patch); + } + } diff --git a/airbyte-config/models/src/main/java/io/airbyte/config/Configs.java b/airbyte-config/models/src/main/java/io/airbyte/config/Configs.java index 33ffd0e16e7..99b1fc37091 100644 --- a/airbyte-config/models/src/main/java/io/airbyte/config/Configs.java +++ b/airbyte-config/models/src/main/java/io/airbyte/config/Configs.java @@ -4,6 +4,7 @@ package io.airbyte.config; +import io.airbyte.commons.version.AirbyteVersion; import java.nio.file.Path; import java.util.List; import java.util.Map; @@ -13,7 +14,7 @@ public interface Configs { String getAirbyteRole(); - String getAirbyteVersion(); + AirbyteVersion getAirbyteVersion(); String getAirbyteApiHost(); diff --git a/airbyte-config/models/src/main/java/io/airbyte/config/EnvConfigs.java b/airbyte-config/models/src/main/java/io/airbyte/config/EnvConfigs.java index 5ce2d5b7315..cb61f7710eb 100644 --- a/airbyte-config/models/src/main/java/io/airbyte/config/EnvConfigs.java +++ b/airbyte-config/models/src/main/java/io/airbyte/config/EnvConfigs.java @@ -7,6 +7,7 @@ package io.airbyte.config; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.base.Strings; +import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.helpers.LogClientSingleton; import java.nio.file.Path; import java.util.Arrays; @@ -117,8 +118,8 @@ public class EnvConfigs implements Configs { } @Override - public String getAirbyteVersion() { - return getEnsureEnv(AIRBYTE_VERSION); + public AirbyteVersion getAirbyteVersion() { + return new AirbyteVersion(getEnsureEnv(AIRBYTE_VERSION)); } @Override diff --git a/airbyte-config/models/src/test/java/io/airbyte/config/EnvConfigsTest.java b/airbyte-config/models/src/test/java/io/airbyte/config/EnvConfigsTest.java index 88fa5fa3746..d27096b23ae 100644 --- a/airbyte-config/models/src/test/java/io/airbyte/config/EnvConfigsTest.java +++ b/airbyte-config/models/src/test/java/io/airbyte/config/EnvConfigsTest.java @@ -6,6 +6,7 @@ package io.airbyte.config; import static org.mockito.Mockito.when; +import io.airbyte.commons.version.AirbyteVersion; import java.nio.file.Paths; import java.util.List; import java.util.Map; @@ -47,7 +48,7 @@ class EnvConfigsTest { Assertions.assertThrows(IllegalArgumentException.class, () -> config.getAirbyteVersion()); when(function.apply(EnvConfigs.AIRBYTE_VERSION)).thenReturn("dev"); - Assertions.assertEquals("dev", config.getAirbyteVersion()); + Assertions.assertEquals(new AirbyteVersion("dev"), config.getAirbyteVersion()); } @Test diff --git a/airbyte-scheduler/app/src/main/java/io/airbyte/scheduler/app/SchedulerApp.java b/airbyte-scheduler/app/src/main/java/io/airbyte/scheduler/app/SchedulerApp.java index 48a7e506a77..5081a5b5f83 100644 --- a/airbyte-scheduler/app/src/main/java/io/airbyte/scheduler/app/SchedulerApp.java +++ b/airbyte-scheduler/app/src/main/java/io/airbyte/scheduler/app/SchedulerApp.java @@ -221,7 +221,7 @@ public class SchedulerApp { workspaceRoot, jobPersistence); AirbyteVersion.assertIsCompatible( - new AirbyteVersion(configs.getAirbyteVersion()), + configs.getAirbyteVersion(), jobPersistence.getVersion().map(AirbyteVersion::new).orElseThrow()); TrackingClientSingleton.initialize( diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java index a798ea817f5..a806a27d609 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java @@ -75,11 +75,11 @@ public class ServerApp implements ServerRunnable { * wouldn't run */ private static final AirbyteVersion KUBE_SUPPORT_FOR_AUTOMATIC_MIGRATION = new AirbyteVersion("0.26.5-alpha"); - private final String airbyteVersion; + private final AirbyteVersion airbyteVersion; private final Set> customComponentClasses; private final Set customComponents; - public ServerApp(final String airbyteVersion, + public ServerApp(final AirbyteVersion airbyteVersion, final Set> customComponentClasses, final Set customComponents) { this.airbyteVersion = airbyteVersion; @@ -120,7 +120,7 @@ public class ServerApp implements ServerRunnable { server.start(); final String banner = MoreResources.readResource("banner/banner.txt"); - LOGGER.info(banner + String.format("Version: %s\n", airbyteVersion)); + LOGGER.info(banner + String.format("Version: %s\n", airbyteVersion.serialize())); server.join(); } @@ -199,7 +199,7 @@ public class ServerApp implements ServerRunnable { // if no workspace exists, we create one so the user starts out with a place to add configuration. createWorkspaceIfNoneExists(configRepository); - final AirbyteVersion airbyteVersion = new AirbyteVersion(configs.getAirbyteVersion()); + final AirbyteVersion airbyteVersion = configs.getAirbyteVersion(); if (jobPersistence.getVersion().isEmpty()) { LOGGER.info(String.format("Setting Database version to %s...", airbyteVersion)); jobPersistence.setVersion(airbyteVersion.serialize()); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/ConfigurationApi.java b/airbyte-server/src/main/java/io/airbyte/server/apis/ConfigurationApi.java index 98cb14b3be3..3b2dc4f0e84 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/ConfigurationApi.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/ConfigurationApi.java @@ -81,7 +81,6 @@ import io.airbyte.api.model.WorkspaceRead; import io.airbyte.api.model.WorkspaceReadList; import io.airbyte.api.model.WorkspaceUpdate; import io.airbyte.commons.io.FileTtlManager; -import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs; import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigPersistence; @@ -193,7 +192,7 @@ public class ConfigurationApi implements io.airbyte.api.V1Api { webBackendDestinationsHandler = new WebBackendDestinationsHandler(destinationHandler, configRepository, trackingClient); healthCheckHandler = new HealthCheckHandler(configRepository); archiveHandler = new ArchiveHandler( - new AirbyteVersion(configs.getAirbyteVersion()), + configs.getAirbyteVersion(), configRepository, jobPersistence, seed, diff --git a/airbyte-server/src/test/java/io/airbyte/server/apis/ConfigurationApiTest.java b/airbyte-server/src/test/java/io/airbyte/server/apis/ConfigurationApiTest.java index 89f00a6dcd9..cdb7b8c07d0 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/apis/ConfigurationApiTest.java +++ b/airbyte-server/src/test/java/io/airbyte/server/apis/ConfigurationApiTest.java @@ -10,6 +10,7 @@ import static org.mockito.Mockito.when; import io.airbyte.analytics.TrackingClient; import io.airbyte.commons.io.FileTtlManager; +import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs; import io.airbyte.config.persistence.ConfigPersistence; import io.airbyte.config.persistence.ConfigRepository; @@ -25,7 +26,7 @@ public class ConfigurationApiTest { @Test void testImportDefinitions() { final Configs configs = mock(Configs.class); - when(configs.getAirbyteVersion()).thenReturn("0.1.0-alpha"); + when(configs.getAirbyteVersion()).thenReturn(new AirbyteVersion("0.1.0-alpha")); when(configs.getWebappUrl()).thenReturn("http://localhost"); final ConfigurationApi configurationApi = new ConfigurationApi(