From b2b0d3822c36061569909b6b9281467ee30f8684 Mon Sep 17 00:00:00 2001 From: David Grochowski Date: Thu, 22 Feb 2024 11:40:27 -0500 Subject: [PATCH 1/6] [WIP] Add a gRPC connector to backfila --- client/build.gradle.kts | 10 +++ .../app/cash/backfila/client/Connectors.kt | 2 + .../app/cash/backfila/client_service.proto | 7 ++ .../proto/app/cash/backfila/service.proto | 7 ++ gradle/libs.versions.toml | 1 + .../client/GrpcClientServiceClientProvider.kt | 83 +++++++++++++++++++ 6 files changed, 110 insertions(+) create mode 100644 service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt diff --git a/client/build.gradle.kts b/client/build.gradle.kts index 2b8920fcb..17178fc2b 100644 --- a/client/build.gradle.kts +++ b/client/build.gradle.kts @@ -18,6 +18,7 @@ sourceSets { dependencies { implementation(libs.moshiCore) implementation(libs.moshiKotlin) + implementation(libs.wireGrpcClient) implementation(libs.wireRuntime) implementation(libs.guice) implementation(libs.retrofit) @@ -33,6 +34,15 @@ wire { sourcePath { srcDir("src/main/proto") } + kotlin { + includes = listOf( + "app.cash.backfila.protos.clientservice.BackfilaClientService", + "app.cash.backfila.protos.service.BackfilaService", + ) + rpcRole = "client" + javaInterop = true + exclusive = true + } java { } } diff --git a/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt b/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt index 3d0b84b86..be7539a66 100644 --- a/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt +++ b/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt @@ -10,3 +10,5 @@ data class HttpHeader(val name: String, val value: String) data class HttpConnectorData @JvmOverloads constructor(val url: String, val headers: List = listOf()) data class EnvoyConnectorData @JvmOverloads constructor(val clusterType: String, val headers: List = listOf()) + +data class GrpcConnectorData @JvmOverloads constructor(val url: String, val headers: List = listOf()) diff --git a/client/src/main/proto/app/cash/backfila/client_service.proto b/client/src/main/proto/app/cash/backfila/client_service.proto index 82ed37553..d674fc52d 100644 --- a/client/src/main/proto/app/cash/backfila/client_service.proto +++ b/client/src/main/proto/app/cash/backfila/client_service.proto @@ -155,3 +155,10 @@ message FinalizeBackfillRequest { message FinalizeBackfillResponse { } + +service BackfilaClientService { + rpc PrepareBackfill(PrepareBackfillRequest) returns (PrepareBackfillResponse); + rpc GetNextBatchRange(GetNextBatchRangeRequest) returns (GetNextBatchRangeResponse); + rpc RunBatch(RunBatchRequest) returns (RunBatchResponse); + rpc FinalizeBackfill(FinalizeBackfillRequest) returns (FinalizeBackfillResponse); +} \ No newline at end of file diff --git a/client/src/main/proto/app/cash/backfila/service.proto b/client/src/main/proto/app/cash/backfila/service.proto index 324ff54cd..0dd253339 100644 --- a/client/src/main/proto/app/cash/backfila/service.proto +++ b/client/src/main/proto/app/cash/backfila/service.proto @@ -104,3 +104,10 @@ message CheckBackfillStatusResponse { COMPLETE = 3; } } + +service BackfilaService { + rpc ConfigureService(ConfigureServiceRequest) returns (ConfigureServiceResponse); + rpc CreateBackfill(CreateBackfillRequest) returns (CreateBackfillResponse); + rpc CreateAndStartBackfill(CreateAndStartBackfillRequest) returns (CreateAndStartBackfillResponse); + rpc CheckBackfillStatus(CheckBackfillStatusRequest) returns (CheckBackfillStatusResponse); +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 28283e163..47e755b9c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -78,6 +78,7 @@ miskTailwind = { module = "com.squareup.misk:misk-tailwind", version.ref = "misk miskTesting = { module = "com.squareup.misk:misk-testing", version.ref = "misk" } wireCompiler = { module = "com.squareup.wire:wire-compiler", version.ref = "wire" } wireGradlePlugin = { module = "com.squareup.wire:wire-gradle-plugin", version.ref = "wire" } +wireGrpcClient = { module = "com.squareup.wire:wire-grpc-client", version.ref = "wire" } wireMoshiAdapter = { module = "com.squareup.wire:wire-moshi-adapter", version.ref = "wire" } wireRuntime = { module = "com.squareup.wire:wire-runtime", version.ref = "wire" } wireSchema = { module = "com.squareup.wire:wire-schema", version.ref = "wire" } diff --git a/service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt b/service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt new file mode 100644 index 000000000..116deab0f --- /dev/null +++ b/service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt @@ -0,0 +1,83 @@ +package app.cash.backfila.client + +import app.cash.backfila.client.interceptors.OkHttpClientSpecifiedHeadersInterceptor +import app.cash.backfila.client.interceptors.OkHttpClientSpecifiedHeadersInterceptor.Companion.headersSizeWithinLimit +import com.squareup.moshi.Moshi +import com.squareup.wire.GrpcClient +import java.net.URL +import javax.inject.Inject +import javax.inject.Singleton +import misk.client.HttpClientConfigUrlProvider +import misk.client.HttpClientFactory +import misk.client.HttpClientsConfig +import misk.moshi.adapter +import retrofit2.Retrofit +import retrofit2.adapter.guava.GuavaCallAdapterFactory +import retrofit2.converter.wire.WireConverterFactory +import wisp.client.EnvoyClientEndpointProvider +import wisp.client.HttpClientEnvoyConfig + +@Singleton +class GrpcClientServiceClientProvider @Inject constructor( + private val httpClientsConfig: HttpClientsConfig, + private val httpClientFactory: HttpClientFactory, + private val moshi: Moshi, +) : BackfilaClientServiceClientProvider { + @com.google.inject.Inject(optional = true) + lateinit var envoyClientEndpointProvider: EnvoyClientEndpointProvider + + override fun validateExtraData(connectorExtraData: String?) { + connectorExtraData?.let { + val fromJson = adapter().fromJson(connectorExtraData) + checkNotNull(fromJson) { "Failed to parse HTTP connector extra data JSON" } + + if (!fromJson.headers.isNullOrEmpty()) { + check(headersSizeWithinLimit(fromJson.headers)) { "Headers too large" } + + for (header in fromJson.headers) { + checkNotNull(header.name) { "Header names must be set" } + checkNotNull(header.value) { "Header values must be set" } + } + } + } + } + + override fun clientFor( + serviceName: String, + connectorExtraData: String?, + ): BackfilaClientServiceClient { + val extraData = connectorExtraData?.let { adapter().fromJson(connectorExtraData) } + // If clusterType is specified use it for env, otherwise use null to default to current env. + var env: String? = extraData?.clusterType + // If client-specified HTTP headers are specified, honor them. + var headers: List? = extraData?.headers + + val envoyConfig = HttpClientEnvoyConfig( + app = serviceName, + env = env, + ) + val baseUrl = URL(envoyClientEndpointProvider.url(envoyConfig)) + val httpClientEndpointConfig = httpClientsConfig[baseUrl] + + var okHttpClient = httpClientFactory.create(httpClientEndpointConfig) + if (!headers.isNullOrEmpty()) { + okHttpClient = okHttpClient.newBuilder() + .addInterceptor(OkHttpClientSpecifiedHeadersInterceptor(headers)) + .build() + } + + val retrofit = Retrofit.Builder() + .baseUrl(baseUrl) + .client(okHttpClient) + .addConverterFactory(WireConverterFactory.create()) + .addCallAdapterFactory(GuavaCallAdapterFactory.create()) + .build() + val api = retrofit.create(EnvoyClientServiceApi::class.java) + val logData = "envoyConfig: ${httpClientEndpointConfig.envoy}, " + + "url: ${httpClientEndpointConfig.url}, " + + "headers: $headers" + return EnvoyClientServiceClient(api, logData) + } + + private fun adapter() = moshi.adapter() +} From a7d23be36157834054d01aa26af313ebc3034218 Mon Sep 17 00:00:00 2001 From: Michael Pawliszyn Date: Fri, 23 Feb 2024 14:06:46 -0500 Subject: [PATCH 2/6] Fleshing out the GrpcCallbackConnector. --- .../backfila/client/GrpcCallbackConnector.kt | 40 +++++++++++++++ ...er.kt => GrpcCallbackConnectorProvider.kt} | 51 ++++++++----------- .../client/HttpCallbackConnectorProvider.kt | 9 ++-- 3 files changed, 65 insertions(+), 35 deletions(-) create mode 100644 service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt rename service/src/main/kotlin/app/cash/backfila/client/{GrpcClientServiceClientProvider.kt => GrpcCallbackConnectorProvider.kt} (53%) diff --git a/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt new file mode 100644 index 000000000..d4ab5d556 --- /dev/null +++ b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt @@ -0,0 +1,40 @@ +package app.cash.backfila.client + +import app.cash.backfila.protos.clientservice.BackfilaClientServiceClient +import app.cash.backfila.protos.clientservice.GetNextBatchRangeRequest +import app.cash.backfila.protos.clientservice.GetNextBatchRangeResponse +import app.cash.backfila.protos.clientservice.PrepareBackfillRequest +import app.cash.backfila.protos.clientservice.PrepareBackfillResponse +import app.cash.backfila.protos.clientservice.RunBatchRequest +import app.cash.backfila.protos.clientservice.RunBatchResponse +import retrofit2.HttpException +import retrofit2.Response + +internal class GrpcCallbackConnector internal constructor( + private val api: BackfilaClientServiceClient, + private val connectionLogData: String, +) : BackfilaCallbackConnector { + + override fun prepareBackfill(request: PrepareBackfillRequest): PrepareBackfillResponse { + return api.PrepareBackfill().executeBlocking(request) + } + + override suspend fun getNextBatchRange(request: GetNextBatchRangeRequest): + GetNextBatchRangeResponse { + return api.GetNextBatchRange().execute(request) + } + + override suspend fun runBatch(request: RunBatchRequest): RunBatchResponse { + return api.RunBatch().execute(request) + } + + override fun connectionLogData() = connectionLogData + + private fun Response.getOrThrow(): T { + // I should test what happens in a non-200 + if (!this.isSuccessful) { + throw HttpException(this) + } + return this.body()!! + } +} diff --git a/service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt similarity index 53% rename from service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt rename to service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt index 116deab0f..7cd329e06 100644 --- a/service/src/main/kotlin/app/cash/backfila/client/GrpcClientServiceClientProvider.kt +++ b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt @@ -2,6 +2,7 @@ package app.cash.backfila.client import app.cash.backfila.client.interceptors.OkHttpClientSpecifiedHeadersInterceptor import app.cash.backfila.client.interceptors.OkHttpClientSpecifiedHeadersInterceptor.Companion.headersSizeWithinLimit +import app.cash.backfila.protos.clientservice.BackfilaClientServiceClient import com.squareup.moshi.Moshi import com.squareup.wire.GrpcClient import java.net.URL @@ -11,25 +12,21 @@ import misk.client.HttpClientConfigUrlProvider import misk.client.HttpClientFactory import misk.client.HttpClientsConfig import misk.moshi.adapter -import retrofit2.Retrofit -import retrofit2.adapter.guava.GuavaCallAdapterFactory -import retrofit2.converter.wire.WireConverterFactory -import wisp.client.EnvoyClientEndpointProvider -import wisp.client.HttpClientEnvoyConfig @Singleton -class GrpcClientServiceClientProvider @Inject constructor( +class GrpcCallbackConnectorProvider @Inject constructor( private val httpClientsConfig: HttpClientsConfig, private val httpClientFactory: HttpClientFactory, + private val httpClientConfigUrlProvider: HttpClientConfigUrlProvider, private val moshi: Moshi, -) : BackfilaClientServiceClientProvider { - @com.google.inject.Inject(optional = true) - lateinit var envoyClientEndpointProvider: EnvoyClientEndpointProvider +) : BackfilaCallbackConnectorProvider { override fun validateExtraData(connectorExtraData: String?) { - connectorExtraData?.let { + connectorExtraData.let { + checkNotNull(connectorExtraData) { "Extra data required for GRPC connector" } val fromJson = adapter().fromJson(connectorExtraData) - checkNotNull(fromJson) { "Failed to parse HTTP connector extra data JSON" } + checkNotNull(fromJson) { "Failed to parse GRPC connector extra data JSON" } + checkNotNull(fromJson.url) { "GRPC connector extra data must contain a URL" } if (!fromJson.headers.isNullOrEmpty()) { check(headersSizeWithinLimit(fromJson.headers)) { "Headers too large" } @@ -45,20 +42,13 @@ class GrpcClientServiceClientProvider @Inject constructor( override fun clientFor( serviceName: String, connectorExtraData: String?, - ): BackfilaClientServiceClient { - val extraData = connectorExtraData?.let { adapter().fromJson(connectorExtraData) } - // If clusterType is specified use it for env, otherwise use null to default to current env. - var env: String? = extraData?.clusterType + ): BackfilaCallbackConnector { + val extraData = connectorExtraData.let { adapter().fromJson(connectorExtraData) } + val url = URL(extraData!!.url) // If client-specified HTTP headers are specified, honor them. - var headers: List? = extraData?.headers - - val envoyConfig = HttpClientEnvoyConfig( - app = serviceName, - env = env, - ) - val baseUrl = URL(envoyClientEndpointProvider.url(envoyConfig)) - val httpClientEndpointConfig = httpClientsConfig[baseUrl] + var headers: List? = extraData!!.headers + val httpClientEndpointConfig = httpClientsConfig[url] var okHttpClient = httpClientFactory.create(httpClientEndpointConfig) if (!headers.isNullOrEmpty()) { okHttpClient = okHttpClient.newBuilder() @@ -66,18 +56,17 @@ class GrpcClientServiceClientProvider @Inject constructor( .build() } - val retrofit = Retrofit.Builder() - .baseUrl(baseUrl) + val baseUrl = httpClientConfigUrlProvider.getUrl(httpClientEndpointConfig) + val grpcClient = GrpcClient.Builder() .client(okHttpClient) - .addConverterFactory(WireConverterFactory.create()) - .addCallAdapterFactory(GuavaCallAdapterFactory.create()) + .baseUrl(baseUrl) .build() - val api = retrofit.create(EnvoyClientServiceApi::class.java) - val logData = "envoyConfig: ${httpClientEndpointConfig.envoy}, " + + val api = grpcClient.create(BackfilaClientServiceClient::class) + val logData = "grpcConfig: ${httpClientEndpointConfig.url}, " + "url: ${httpClientEndpointConfig.url}, " + "headers: $headers" - return EnvoyClientServiceClient(api, logData) + return GrpcCallbackConnector(api, logData) } - private fun adapter() = moshi.adapter() + private fun adapter() = moshi.adapter() } diff --git a/service/src/main/kotlin/app/cash/backfila/client/HttpCallbackConnectorProvider.kt b/service/src/main/kotlin/app/cash/backfila/client/HttpCallbackConnectorProvider.kt index 5b15c6d24..5b861db41 100644 --- a/service/src/main/kotlin/app/cash/backfila/client/HttpCallbackConnectorProvider.kt +++ b/service/src/main/kotlin/app/cash/backfila/client/HttpCallbackConnectorProvider.kt @@ -27,15 +27,15 @@ class HttpCallbackConnectorProvider @Inject constructor( override fun validateExtraData(connectorExtraData: String?) { checkNotNull(connectorExtraData, { "Extra data required for HTTP connector" }) val fromJson = adapter().fromJson(connectorExtraData) - checkNotNull(fromJson, { "Failed to parse HTTP connector extra data JSON" }) - checkNotNull(fromJson.url, { "HTTP connector extra data must contain a URL" }) + checkNotNull(fromJson) { "Failed to parse HTTP connector extra data JSON" } + checkNotNull(fromJson.url) { "HTTP connector extra data must contain a URL" } if (!fromJson.headers.isNullOrEmpty()) { check(headersSizeWithinLimit(fromJson.headers)) { "Headers too large" } for (header in fromJson.headers) { - checkNotNull(header.name, { "Header names must be set" }) - checkNotNull(header.value, { "Header values must be set" }) + checkNotNull(header.name) { "Header names must be set" } + checkNotNull(header.value) { "Header values must be set" } } } } @@ -46,6 +46,7 @@ class HttpCallbackConnectorProvider @Inject constructor( ): BackfilaCallbackConnector { val extraData = adapter().fromJson(connectorExtraData!!) val url = URL(extraData!!.url) + // If client-specified HTTP headers are specified, honor them. val headers = extraData!!.headers val httpClientEndpointConfig = httpClientsConfig[url] From 17559b9e0bdb49c4f931fe4064a3e77d6f30b234 Mon Sep 17 00:00:00 2001 From: David Grochowski Date: Wed, 28 Aug 2024 23:15:49 -0400 Subject: [PATCH 3/6] Wire up grpc client bindings --- client/src/main/kotlin/app/cash/backfila/client/Connectors.kt | 1 + .../kotlin/app/cash/backfila/service/BackfilaServiceModule.kt | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt b/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt index be7539a66..2f10ea102 100644 --- a/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt +++ b/client/src/main/kotlin/app/cash/backfila/client/Connectors.kt @@ -3,6 +3,7 @@ package app.cash.backfila.client object Connectors { const val HTTP = "HTTP" const val ENVOY = "ENVOY" + const val GRPC = "GRPC" } data class HttpHeader(val name: String, val value: String) diff --git a/service/src/main/kotlin/app/cash/backfila/service/BackfilaServiceModule.kt b/service/src/main/kotlin/app/cash/backfila/service/BackfilaServiceModule.kt index aeb162d73..280f9015d 100644 --- a/service/src/main/kotlin/app/cash/backfila/service/BackfilaServiceModule.kt +++ b/service/src/main/kotlin/app/cash/backfila/service/BackfilaServiceModule.kt @@ -5,6 +5,7 @@ import app.cash.backfila.client.BackfilaCallbackConnectorProvider import app.cash.backfila.client.Connectors import app.cash.backfila.client.EnvoyCallbackConnectorProvider import app.cash.backfila.client.ForConnectors +import app.cash.backfila.client.GrpcCallbackConnectorProvider import app.cash.backfila.client.HttpCallbackConnectorProvider import app.cash.backfila.dashboard.BackfilaDashboardModule import app.cash.backfila.dashboard.BackfilaWebActionsModule @@ -60,6 +61,9 @@ class BackfilaServiceModule( newMapBinder(ForConnectors::class) .addBinding(Connectors.ENVOY) .to(EnvoyCallbackConnectorProvider::class.java) + newMapBinder(ForConnectors::class) + .addBinding(Connectors.GRPC) + .to(GrpcCallbackConnectorProvider::class.java) newMultibinder(HttpClientNetworkInterceptor::class) From cfd79dc2b25a84643eab0d5396e0cdffe522e3a7 Mon Sep 17 00:00:00 2001 From: David Grochowski Date: Thu, 29 Aug 2024 10:34:31 -0400 Subject: [PATCH 4/6] Remove retrofit code in grpc context --- .../app/cash/backfila/client/GrpcCallbackConnector.kt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt index d4ab5d556..546dc6313 100644 --- a/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt +++ b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnector.kt @@ -7,8 +7,6 @@ import app.cash.backfila.protos.clientservice.PrepareBackfillRequest import app.cash.backfila.protos.clientservice.PrepareBackfillResponse import app.cash.backfila.protos.clientservice.RunBatchRequest import app.cash.backfila.protos.clientservice.RunBatchResponse -import retrofit2.HttpException -import retrofit2.Response internal class GrpcCallbackConnector internal constructor( private val api: BackfilaClientServiceClient, @@ -29,12 +27,4 @@ internal class GrpcCallbackConnector internal constructor( } override fun connectionLogData() = connectionLogData - - private fun Response.getOrThrow(): T { - // I should test what happens in a non-200 - if (!this.isSuccessful) { - throw HttpException(this) - } - return this.body()!! - } } From 617a7dc3d5cf0f9582ed4d8e80384230aa36f52a Mon Sep 17 00:00:00 2001 From: David Grochowski Date: Thu, 29 Aug 2024 10:34:52 -0400 Subject: [PATCH 5/6] cleanup --- .../app/cash/backfila/client/GrpcCallbackConnectorProvider.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt index 7cd329e06..26c3fc122 100644 --- a/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt +++ b/service/src/main/kotlin/app/cash/backfila/client/GrpcCallbackConnectorProvider.kt @@ -28,7 +28,7 @@ class GrpcCallbackConnectorProvider @Inject constructor( checkNotNull(fromJson) { "Failed to parse GRPC connector extra data JSON" } checkNotNull(fromJson.url) { "GRPC connector extra data must contain a URL" } - if (!fromJson.headers.isNullOrEmpty()) { + if (fromJson.headers.isNotEmpty()) { check(headersSizeWithinLimit(fromJson.headers)) { "Headers too large" } for (header in fromJson.headers) { @@ -46,7 +46,7 @@ class GrpcCallbackConnectorProvider @Inject constructor( val extraData = connectorExtraData.let { adapter().fromJson(connectorExtraData) } val url = URL(extraData!!.url) // If client-specified HTTP headers are specified, honor them. - var headers: List? = extraData!!.headers + val headers: List? = extraData!!.headers val httpClientEndpointConfig = httpClientsConfig[url] var okHttpClient = httpClientFactory.create(httpClientEndpointConfig) From 46315406d0647e1d3b16614ea029da4ab4512872 Mon Sep 17 00:00:00 2001 From: David Grochowski Date: Thu, 29 Aug 2024 11:26:23 -0400 Subject: [PATCH 6/6] Don't generate server protos for now --- client/build.gradle.kts | 1 - client/src/main/proto/app/cash/backfila/service.proto | 7 ------- 2 files changed, 8 deletions(-) diff --git a/client/build.gradle.kts b/client/build.gradle.kts index 17178fc2b..a945b41bc 100644 --- a/client/build.gradle.kts +++ b/client/build.gradle.kts @@ -37,7 +37,6 @@ wire { kotlin { includes = listOf( "app.cash.backfila.protos.clientservice.BackfilaClientService", - "app.cash.backfila.protos.service.BackfilaService", ) rpcRole = "client" javaInterop = true diff --git a/client/src/main/proto/app/cash/backfila/service.proto b/client/src/main/proto/app/cash/backfila/service.proto index 0dd253339..ee43d3048 100644 --- a/client/src/main/proto/app/cash/backfila/service.proto +++ b/client/src/main/proto/app/cash/backfila/service.proto @@ -103,11 +103,4 @@ message CheckBackfillStatusResponse { RUNNING = 2; COMPLETE = 3; } -} - -service BackfilaService { - rpc ConfigureService(ConfigureServiceRequest) returns (ConfigureServiceResponse); - rpc CreateBackfill(CreateBackfillRequest) returns (CreateBackfillResponse); - rpc CreateAndStartBackfill(CreateAndStartBackfillRequest) returns (CreateAndStartBackfillResponse); - rpc CheckBackfillStatus(CheckBackfillStatusRequest) returns (CheckBackfillStatusResponse); } \ No newline at end of file