Skip to content

Commit 7775d76

Browse files
authored
Merge branch 'main' into db-creds-leakage
2 parents af8c9a0 + 8739090 commit 7775d76

File tree

33 files changed

+1088
-105
lines changed

33 files changed

+1088
-105
lines changed

.github/workflows/gradle.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
name: Airbyte Platform OSS Developer Build
55

66
env:
7-
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.SELF_RUNNER_AWS_ACCESS_KEY_ID }}
8-
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.SELF_RUNNER_AWS_SECRET_ACCESS_KEY }}
7+
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.PLATFORM_BUILD_CACHE_ACCESS_KEY_ID }}
8+
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.PLATFORM_BUILD_CACHE_SECRET_KEY }}
99

1010
on:
1111
#ability to start task manually in Web UI

.github/workflows/terminate-zombie-build-instances.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ jobs:
1515
steps:
1616
- name: List and Terminate Instances Older Than 4 Hours
1717
env:
18-
AWS_ACCESS_KEY_ID: ${{ secrets.SELF_RUNNER_AWS_ACCESS_KEY_ID }}
19-
AWS_SECRET_ACCESS_KEY: ${{ secrets.SELF_RUNNER_AWS_SECRET_ACCESS_KEY }}
18+
AWS_ACCESS_KEY_ID: ${{ secrets.PLATFORM_BUILD_CACHE_ACCESS_KEY_ID }}
19+
AWS_SECRET_ACCESS_KEY: ${{ secrets.PLATFORM_BUILD_CACHE_SECRET_KEY }}
2020
# See https://github.com/aws/aws-cli/issues/5623
2121
AWS_EC2_METADATA_DISABLED: true
2222
run: |

airbyte-api/server-api/src/main/openapi/config.yaml

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9213,6 +9213,8 @@ components:
92139213
type: object
92149214
additionalProperties:
92159215
$ref: "#/components/schemas/ConnectorRolloutActorSyncInfo"
9216+
tier:
9217+
$ref: "#/components/schemas/CustomerTier"
92169218

92179219
ConnectorRolloutState:
92189220
type: string
@@ -9241,6 +9243,26 @@ components:
92419243
- automated
92429244
- overridden
92439245

9246+
ConnectorRolloutFilters:
9247+
type: object
9248+
properties:
9249+
tierFilter:
9250+
type: object
9251+
$ref: "#/components/schemas/ConnectorRolloutTierFilter"
9252+
9253+
ConnectorRolloutTierFilter:
9254+
type: object
9255+
properties:
9256+
tier:
9257+
$ref: "#/components/schemas/CustomerTier"
9258+
9259+
CustomerTier:
9260+
type: string
9261+
enum:
9262+
- TIER_0
9263+
- TIER_1
9264+
- TIER_2
9265+
92449266
ConnectorRolloutListRequestBody:
92459267
type: object
92469268
required:
@@ -9305,6 +9327,8 @@ components:
93059327
expires_at:
93069328
type: string
93079329
format: date-time
9330+
tier:
9331+
$ref: "#/components/schemas/CustomerTier"
93089332

93099333
ConnectorRolloutCreateResponse:
93109334
type: object
@@ -9557,6 +9581,8 @@ components:
95579581
migrate_pins:
95589582
type: boolean
95599583
default: true
9584+
filters:
9585+
$ref: "#/components/schemas/ConnectorRolloutFilters"
95609586

95619587
ConnectorRolloutManualRolloutRequestBody:
95629588
type: object
@@ -9592,6 +9618,8 @@ components:
95929618
migrate_pins:
95939619
type: boolean
95949620
default: true
9621+
filters:
9622+
$ref: "#/components/schemas/ConnectorRolloutFilters"
95959623

95969624
ConnectorRolloutManualFinalizeRequestBody:
95979625
type: object
@@ -10550,10 +10578,6 @@ components:
1055010578
required:
1055110579
- manifest
1055210580
properties:
10553-
formGeneratedManifest:
10554-
type: boolean
10555-
description: Indicates if the manifest was auto-generated from the form-based Connector Builder UI
10556-
default: false
1055710581
workspaceId:
1055810582
$ref: "#/components/schemas/WorkspaceId"
1055910583
builderProjectId:

airbyte-base-java-image/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ plugins {
77
tasks.register<DockerBuildxTask>("dockerJavaBaseImage") {
88
inputDir = project.projectDir
99
tag = "3.3.4"
10-
imageName = "airbyte/airbyte-base-java-image"
11-
}
10+
imageName = "airbyte-base-java-image"
11+
}

airbyte-base-java-python-image/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ tasks.register<DockerBuildxTask>("dockerJavaPythonBaseImage") {
88
inputDir = project.projectDir
99
tag = "2.2.4"
1010
buildArgs.put("AIRBYTE_BASE_JAVA_IMAGE_TAG", "3.3.4")
11-
imageName = "airbyte/airbyte-base-java-python-image"
12-
}
11+
imageName = "airbyte-base-java-python-image"
12+
}

airbyte-bootloader/src/test-integration/kotlin/io/airbyte/bootloader/BootloaderTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import io.airbyte.db.factory.FlywayFactory
4646
import io.airbyte.db.instance.DatabaseConstants
4747
import io.airbyte.db.instance.configs.ConfigsDatabaseMigrator
4848
import io.airbyte.db.instance.configs.ConfigsDatabaseTestProvider
49-
import io.airbyte.db.instance.configs.migrations.V1_1_1_027__AddOriginIndexToScopedConfiguration
49+
import io.airbyte.db.instance.configs.migrations.V1_1_1_028__AddFiltersToConnectorRollout
5050
import io.airbyte.db.instance.jobs.JobsDatabaseMigrator
5151
import io.airbyte.db.instance.jobs.JobsDatabaseTestProvider
5252
import io.airbyte.db.instance.jobs.migrations.V1_1_0_001__AddIsScheduledToJobTable
@@ -773,7 +773,7 @@ internal class BootloaderTest {
773773

774774
// ⚠️ This line should change with every new migration to show that you meant to make a new
775775
// migration to the prod database
776-
private val CURRENT_CONFIGS_MIGRATION = V1_1_1_027__AddOriginIndexToScopedConfiguration::class.java
776+
private val CURRENT_CONFIGS_MIGRATION = V1_1_1_028__AddFiltersToConnectorRollout::class.java
777777
private val CURRENT_JOBS_MIGRATION = V1_1_0_001__AddIsScheduledToJobTable::class.java
778778

779779
private fun getMigrationVersion(cls: Class<*>): String =

airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/ConnectorBuilderProjectsHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,6 @@ public ConnectorBuilderProjectFullResolveResponse fullResolveManifestBuilderProj
544544
final FullResolveManifestRequestBody fullResolveManifestRequestBody =
545545
new FullResolveManifestRequestBody(existingHydratedTestingValues,
546546
requestBody.getManifest(),
547-
requestBody.getFormGeneratedManifest(),
548547
requestBody.getStreamLimit(),
549548
requestBody.getBuilderProjectId().toString(),
550549
requestBody.getWorkspaceId().toString());

airbyte-commons-server/src/main/kotlin/io/airbyte/commons/server/handlers/ConnectorRolloutHandler.kt

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package io.airbyte.commons.server.handlers
77
import com.google.common.annotations.VisibleForTesting
88
import io.airbyte.api.model.generated.ConnectorRolloutActorSelectionInfo
99
import io.airbyte.api.model.generated.ConnectorRolloutActorSyncInfo
10+
import io.airbyte.api.model.generated.ConnectorRolloutFilters
1011
import io.airbyte.api.model.generated.ConnectorRolloutFinalizeRequestBody
1112
import io.airbyte.api.model.generated.ConnectorRolloutManualFinalizeRequestBody
1213
import io.airbyte.api.model.generated.ConnectorRolloutManualFinalizeResponse
@@ -24,10 +25,14 @@ import io.airbyte.api.problems.model.generated.ProblemMessageData
2425
import io.airbyte.api.problems.throwable.generated.ConnectorRolloutInvalidRequestProblem
2526
import io.airbyte.api.problems.throwable.generated.ConnectorRolloutMaximumRolloutPercentageReachedProblem
2627
import io.airbyte.api.problems.throwable.generated.ConnectorRolloutNotEnoughActorsProblem
28+
import io.airbyte.config.AttributeName
2729
import io.airbyte.config.ConnectorEnumRolloutState
2830
import io.airbyte.config.ConnectorEnumRolloutStrategy
2931
import io.airbyte.config.ConnectorRollout
3032
import io.airbyte.config.ConnectorRolloutFinalState
33+
import io.airbyte.config.CustomerTier
34+
import io.airbyte.config.CustomerTierFilter
35+
import io.airbyte.config.Operator
3136
import io.airbyte.config.persistence.UserPersistence
3237
import io.airbyte.connector.rollout.client.ConnectorRolloutClient
3338
import io.airbyte.connector.rollout.shared.ActorSelectionInfo
@@ -161,10 +166,11 @@ open class ConnectorRolloutHandler
161166
dockerRepository: String,
162167
actorDefinitionId: UUID,
163168
dockerImageTag: String,
164-
updatedBy: UUID,
169+
updatedBy: UUID?,
165170
rolloutStrategy: ConnectorRolloutStrategy,
166171
initialRolloutPct: Int?,
167172
finalTargetRolloutPct: Int?,
173+
requestFilters: ConnectorRolloutFilters?,
168174
): ConnectorRollout {
169175
val actorDefinitionVersion =
170176
actorDefinitionService.getActorDefinitionVersion(
@@ -199,6 +205,8 @@ open class ConnectorRolloutHandler
199205
ProblemMessageData().message("Could not find initial version for actor definition id: $actorDefinitionId"),
200206
)
201207

208+
val filters = createFiltersFromRequest(requestFilters)
209+
202210
if (initializedRollouts.isEmpty()) {
203211
val currentTime = OffsetDateTime.now(ZoneOffset.UTC).toEpochSecond()
204212

@@ -216,6 +224,7 @@ open class ConnectorRolloutHandler
216224
rolloutStrategy = getRolloutStrategyForManualStart(rolloutStrategy),
217225
initialRolloutPct = initialRolloutPct,
218226
finalTargetRolloutPct = finalTargetRolloutPct,
227+
filters = filters,
219228
)
220229
connectorRolloutService.writeConnectorRollout(connectorRollout)
221230
return connectorRollout
@@ -250,6 +259,7 @@ open class ConnectorRolloutHandler
250259
connectorRollout.rolloutStrategy = getRolloutStrategyForManualStart(rolloutStrategy)
251260
connectorRollout.initialRolloutPct = initialRolloutPct
252261
connectorRollout.finalTargetRolloutPct = finalTargetRolloutPct
262+
connectorRollout.filters = filters
253263

254264
connectorRolloutService.writeConnectorRollout(connectorRollout)
255265
return connectorRollout
@@ -580,7 +590,7 @@ open class ConnectorRolloutHandler
580590
fun getPinnedActorInfo(id: UUID): ConnectorRolloutActorSelectionInfo {
581591
val rollout = connectorRolloutService.getConnectorRollout(id)
582592
logger.info { "getPinnedActorInfo: rollout=$rollout" }
583-
val actorSelectionInfo = rolloutActorFinder.getActorSelectionInfo(rollout, null)
593+
val actorSelectionInfo = rolloutActorFinder.getActorSelectionInfo(rollout, null, rollout.filters)
584594
logger.info { "getPinnedActorInfo: actorSelectionInfo=$actorSelectionInfo" }
585595

586596
return ConnectorRolloutActorSelectionInfo()
@@ -599,6 +609,7 @@ open class ConnectorRolloutHandler
599609
connectorRolloutManualStart.rolloutStrategy,
600610
connectorRolloutManualStart.initialRolloutPct,
601611
connectorRolloutManualStart.finalTargetRolloutPct,
612+
connectorRolloutManualStart.filters,
602613
)
603614

604615
try {
@@ -629,9 +640,21 @@ open class ConnectorRolloutHandler
629640
return buildConnectorRolloutRead(connectorRolloutService.getConnectorRollout(rollout.id), false)
630641
}
631642

632-
open fun manualDoConnectorRolloutUpdate(connectorRolloutUpdate: ConnectorRolloutManualRolloutRequestBody): ConnectorRolloutManualRolloutResponse {
633-
val connectorRollout = connectorRolloutService.getConnectorRollout(connectorRolloutUpdate.id)
643+
open fun manualDoConnectorRollout(connectorRolloutUpdate: ConnectorRolloutManualRolloutRequestBody): ConnectorRolloutManualRolloutResponse {
644+
var connectorRollout = connectorRolloutService.getConnectorRollout(connectorRolloutUpdate.id)
645+
634646
if (connectorRollout.state == ConnectorEnumRolloutState.INITIALIZED) {
647+
connectorRollout =
648+
getOrCreateAndValidateManualStartInput(
649+
connectorRolloutUpdate.dockerRepository,
650+
connectorRolloutUpdate.actorDefinitionId,
651+
connectorRolloutUpdate.dockerImageTag,
652+
connectorRolloutUpdate.updatedBy,
653+
ConnectorRolloutStrategy.MANUAL,
654+
null,
655+
null,
656+
connectorRolloutUpdate.filters,
657+
)
635658
try {
636659
connectorRolloutClient.startRollout(
637660
ConnectorRolloutWorkflowInput(
@@ -654,6 +677,10 @@ open class ConnectorRolloutHandler
654677
} catch (e: WorkflowUpdateException) {
655678
throw throwAirbyteApiClientExceptionIfExists("startWorkflow", e)
656679
}
680+
} else {
681+
if (connectorRolloutUpdate.filters != null) {
682+
throw RuntimeException("Cannot modify filters in a running rollout.")
683+
}
657684
}
658685
try {
659686
connectorRolloutClient.doRollout(
@@ -805,7 +832,7 @@ open class ConnectorRolloutHandler
805832
connectorRollout: ConnectorRollout,
806833
targetPercent: Int,
807834
): ActorSelectionInfo {
808-
val actorSelectionInfo = rolloutActorFinder.getActorSelectionInfo(connectorRollout, targetPercent)
835+
val actorSelectionInfo = rolloutActorFinder.getActorSelectionInfo(connectorRollout, targetPercent, connectorRollout.filters)
809836
if (targetPercent > 0 && actorSelectionInfo.actorIdsToPin.isEmpty() && actorSelectionInfo.nPreviouslyPinned == 0) {
810837
throw ConnectorRolloutNotEnoughActorsProblem(
811838
ProblemMessageData().message(
@@ -867,6 +894,32 @@ open class ConnectorRolloutHandler
867894
return rollouts.first()
868895
}
869896

897+
private fun createFiltersFromRequest(filters: ConnectorRolloutFilters?): io.airbyte.config.ConnectorRolloutFilters {
898+
if (filters?.tierFilter == null) {
899+
return io.airbyte.config.ConnectorRolloutFilters(
900+
customerTierFilters =
901+
listOf(
902+
CustomerTierFilter(
903+
name = AttributeName.TIER,
904+
operator = Operator.IN,
905+
value = listOf(CustomerTier.TIER_2),
906+
),
907+
),
908+
)
909+
} else {
910+
return io.airbyte.config.ConnectorRolloutFilters(
911+
customerTierFilters =
912+
listOf(
913+
CustomerTierFilter(
914+
name = AttributeName.TIER,
915+
operator = Operator.IN,
916+
value = listOf(CustomerTier.valueOf(filters.tierFilter!!.tier.toString())),
917+
),
918+
),
919+
)
920+
}
921+
}
922+
870923
private fun throwAirbyteApiClientExceptionIfExists(
871924
handlerName: String,
872925
e: WorkflowUpdateException,

0 commit comments

Comments
 (0)