Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: support metadata in deferred calls execution #1724

Merged
merged 13 commits into from
Jul 11, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,10 @@ object ComponentsSourceGenerator {
Nil,
packageName,
otherImports = Seq(
"akka.grpc.javadsl.SingleResponseRequestBuilder",
"kalix.javasdk.DeferredCall",
"kalix.javasdk.Context",
"kalix.javasdk.Metadata",
"kalix.javasdk.impl.GrpcDeferredCall",
"kalix.javasdk.impl.MetadataImpl",
"kalix.javasdk.impl.InternalContext"))
Expand All @@ -134,14 +136,15 @@ object ComponentsSourceGenerator {
val paramName = lowerFirst(command.inputType.name)
val inputType = fullyQualifiedMessage(command.inputType)
val outputType = fullyQualifiedMessage(command.outputType)
val messageType = component.service.messageType
s"""@Override
|public DeferredCall<$inputType, $outputType> $commandMethod($inputType $paramName) {
| return new GrpcDeferredCall<>(
| ${lowerFirst(command.inputType.name)},
| MetadataImpl.Empty(),
| "${component.service.messageType.fullyQualifiedProtoName}",
| "${command.name}",
| () -> getGrpcClient(${component.service.messageType.fullyQualifiedGrpcServiceInterfaceName}.class).$commandMethod($paramName)
| (Metadata metadata) -> addHeaders(((${messageType.fullyQualifiedGrpcServiceInterfaceName}Client) getGrpcClient(${messageType.fullyQualifiedGrpcServiceInterfaceName}.class)).$commandMethod(), metadata).invoke($paramName)
| );
|}""".stripMargin
}
Expand Down Expand Up @@ -173,6 +176,16 @@ object ComponentsSourceGenerator {
| return context.getComponentGrpcClient(serviceClass);
| }
|
| private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
| SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
| for (Metadata.MetadataEntry entry: metadata){
| if (entry.isText()) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, maybe for grpc based sdk, I should support binary headers as well?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can skip those for now.

| updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
| }
| }
| return updatedBuilder;
| }
|
| ${Format.indent(componentGetters, 2)}
|
| ${Format.indent(componentCallImpls, 2)}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.MyServiceNamedActionCalls myServiceNamedAction() {
return new MyServiceNamedActionCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.service.ServiceOuterClass.MyRequest, com.google.
MetadataImpl.Empty(),
"org.example.service.MyService",
"simpleMethod",
() -> getGrpcClient(org.example.service.MyService.class).simpleMethod(myRequest)
(Metadata metadata) -> addHeaders(((org.example.service.MyServiceClient) getGrpcClient(org.example.service.MyService.class)).simpleMethod(), metadata).invoke(myRequest)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.MyServiceActionCalls myServiceAction() {
return new MyServiceActionCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.service.ServiceOuterClass.MyRequest, org.externa
MetadataImpl.Empty(),
"org.example.service.MyService",
"simpleMethod",
() -> getGrpcClient(org.example.service.MyService.class).simpleMethod(myRequest)
(Metadata metadata) -> addHeaders(((org.example.service.MyServiceClient) getGrpcClient(org.example.service.MyService.class)).simpleMethod(), metadata).invoke(myRequest)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.MyServiceActionCalls myServiceAction() {
return new MyServiceActionCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.service.ServiceOuterClass.MyRequest, org.externa
MetadataImpl.Empty(),
"org.example.service.MyService",
"simpleMethod",
() -> getGrpcClient(org.example.service.MyService.class).simpleMethod(myRequest)
(Metadata metadata) -> addHeaders(((org.example.service.MyServiceClient) getGrpcClient(org.example.service.MyService.class)).simpleMethod(), metadata).invoke(myRequest)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.MyServiceActionImplCalls myServiceActionImpl() {
return new MyServiceActionImplCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.service.ServiceOuterClass.MyRequest, com.google.
MetadataImpl.Empty(),
"org.example.service.MyServiceAction",
"simpleMethod",
() -> getGrpcClient(org.example.service.MyServiceAction.class).simpleMethod(myRequest)
(Metadata metadata) -> addHeaders(((org.example.service.MyServiceActionClient) getGrpcClient(org.example.service.MyServiceAction.class)).simpleMethod(), metadata).invoke(myRequest)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.CounterCalls counter() {
return new CounterCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.IncreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Increase",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).increase(increaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).increase(), metadata).invoke(increaseValue)
);
}
@Override
Expand All @@ -48,7 +60,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.DecreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Decrease",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).decrease(decreaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).decrease(), metadata).invoke(decreaseValue)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.CounterCalls counter() {
return new CounterCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.IncreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Increase",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).increase(increaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).increase(), metadata).invoke(increaseValue)
);
}
@Override
Expand All @@ -48,7 +60,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.DecreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Decrease",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).decrease(decreaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).decrease(), metadata).invoke(decreaseValue)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.CounterCalls counter() {
return new CounterCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.IncreaseValue, com
MetadataImpl.Empty(),
"example.eventsourcedentity.CounterService",
"Increase",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).increase(increaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).increase(), metadata).invoke(increaseValue)
);
}
@Override
Expand All @@ -48,7 +60,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.DecreaseValue, com
MetadataImpl.Empty(),
"example.eventsourcedentity.CounterService",
"Decrease",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).decrease(decreaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).decrease(), metadata).invoke(decreaseValue)
);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.example;

import akka.grpc.javadsl.SingleResponseRequestBuilder;
import kalix.javasdk.Context;
import kalix.javasdk.DeferredCall;
import kalix.javasdk.Metadata;
import kalix.javasdk.impl.GrpcDeferredCall;
import kalix.javasdk.impl.InternalContext;
import kalix.javasdk.impl.MetadataImpl;
Expand All @@ -25,6 +27,16 @@ private <T> T getGrpcClient(Class<T> serviceClass) {
return context.getComponentGrpcClient(serviceClass);
}

private <Req, Res> SingleResponseRequestBuilder<Req, Res> addHeaders(SingleResponseRequestBuilder<Req, Res> requestBuilder, Metadata metadata){
SingleResponseRequestBuilder<Req, Res> updatedBuilder = requestBuilder;
for (Metadata.MetadataEntry entry: metadata){
if (entry.isText()) {
updatedBuilder = updatedBuilder.addHeader(entry.getKey(), entry.getValue());
}
}
return updatedBuilder;
}

@Override
public Components.CounterCalls counter() {
return new CounterCallsImpl();
Expand All @@ -38,7 +50,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.IncreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Increase",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).increase(increaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).increase(), metadata).invoke(increaseValue)
);
}
@Override
Expand All @@ -48,7 +60,7 @@ public DeferredCall<org.example.eventsourcedentity.CounterApi.DecreaseValue, com
MetadataImpl.Empty(),
"org.example.eventsourcedentity.CounterService",
"Decrease",
() -> getGrpcClient(org.example.eventsourcedentity.CounterService.class).decrease(decreaseValue)
(Metadata metadata) -> addHeaders(((org.example.eventsourcedentity.CounterServiceClient) getGrpcClient(org.example.eventsourcedentity.CounterService.class)).decrease(), metadata).invoke(decreaseValue)
);
}
}
Expand Down
Loading
Loading