Skip to content

Commit b3174c9

Browse files
authored
Tests for transformation service integration in java feature server (feast-dev#2236)
* IT for transformation service interop Signed-off-by: pyalex <moskalenko.alexey@gmail.com> * remove unnecessary concat Signed-off-by: pyalex <moskalenko.alexey@gmail.com>
1 parent 3dcec6d commit b3174c9

19 files changed

+405
-250
lines changed

java/serving/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@
9292
<version>${project.version}</version>
9393
</dependency>
9494

95+
<dependency>
96+
<groupId>dev.feast</groupId>
97+
<artifactId>feast-common</artifactId>
98+
<version>${project.version}</version>
99+
</dependency>
95100

96101
<dependency>
97102
<groupId>dev.feast</groupId>
@@ -141,6 +146,11 @@
141146
<artifactId>grpc-stub</artifactId>
142147
<version>${grpc.version}</version>
143148
</dependency>
149+
<dependency>
150+
<groupId>io.grpc</groupId>
151+
<artifactId>grpc-netty-shaded</artifactId>
152+
<version>${grpc.version}</version>
153+
</dependency>
144154
<!--compile "com.google.protobuf:protobuf-java-util:${protobuf.version}"-->
145155
<dependency>
146156
<groupId>com.google.protobuf</groupId>

java/serving/src/main/java/feast/serving/config/ApplicationProperties.java

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -147,38 +147,46 @@ public TracingProperties getTracing() {
147147
public LoggingProperties getLogging() {
148148
return logging;
149149
}
150-
}
151150

152-
private FeastProperties feast;
151+
private String gcpProject;
153152

154-
public void setFeast(FeastProperties feast) {
155-
this.feast = feast;
156-
}
153+
public String getGcpProject() {
154+
return gcpProject;
155+
}
157156

158-
public FeastProperties getFeast() {
159-
return feast;
160-
}
157+
public void setGcpProject(String gcpProject) {
158+
this.gcpProject = gcpProject;
159+
}
161160

162-
private String gcpProject;
161+
public void setAwsRegion(String awsRegion) {
162+
this.awsRegion = awsRegion;
163+
}
163164

164-
public String getGcpProject() {
165-
return gcpProject;
166-
}
165+
private String awsRegion;
167166

168-
public void setAwsRegion(String awsRegion) {
169-
this.awsRegion = awsRegion;
170-
}
167+
public String getAwsRegion() {
168+
return awsRegion;
169+
}
170+
171+
private String transformationServiceEndpoint;
171172

172-
private String awsRegion;
173+
public String getTransformationServiceEndpoint() {
174+
return transformationServiceEndpoint;
175+
}
173176

174-
public String getAwsRegion() {
175-
return awsRegion;
177+
public void setTransformationServiceEndpoint(String transformationServiceEndpoint) {
178+
this.transformationServiceEndpoint = transformationServiceEndpoint;
179+
}
176180
}
177181

178-
private String transformationServiceEndpoint;
182+
private FeastProperties feast;
179183

180-
public String getTransformationServiceEndpoint() {
181-
return transformationServiceEndpoint;
184+
public void setFeast(FeastProperties feast) {
185+
this.feast = feast;
186+
}
187+
188+
public FeastProperties getFeast() {
189+
return feast;
182190
}
183191

184192
/** Store configuration class for database that this Feast Serving uses. */
@@ -263,6 +271,10 @@ public static class Server {
263271
public int getPort() {
264272
return port;
265273
}
274+
275+
public void setPort(int port) {
276+
this.port = port;
277+
}
266278
}
267279

268280
public static class GrpcServer {
@@ -271,6 +283,10 @@ public static class GrpcServer {
271283
public Server getServer() {
272284
return server;
273285
}
286+
287+
public void setServer(Server server) {
288+
this.server = server;
289+
}
274290
}
275291

276292
public static class RestServer {
@@ -279,6 +295,10 @@ public static class RestServer {
279295
public Server getServer() {
280296
return server;
281297
}
298+
299+
public void setServer(Server server) {
300+
this.server = server;
301+
}
282302
}
283303

284304
private GrpcServer grpc;
@@ -288,10 +308,18 @@ public GrpcServer getGrpc() {
288308
return grpc;
289309
}
290310

311+
public void setGrpc(GrpcServer grpc) {
312+
this.grpc = grpc;
313+
}
314+
291315
public RestServer getRest() {
292316
return rest;
293317
}
294318

319+
public void setRest(RestServer rest) {
320+
this.rest = rest;
321+
}
322+
295323
public enum StoreType {
296324
REDIS,
297325
REDIS_CLUSTER;

java/serving/src/main/java/feast/serving/config/RegistryConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ public class RegistryConfig extends AbstractModule {
3131
@Provides
3232
Storage googleStorage(ApplicationProperties applicationProperties) {
3333
return StorageOptions.newBuilder()
34-
.setProjectId(applicationProperties.getGcpProject())
34+
.setProjectId(applicationProperties.getFeast().getGcpProject())
3535
.build()
3636
.getService();
3737
}
3838

3939
@Provides
4040
public AmazonS3 awsStorage(ApplicationProperties applicationProperties) {
4141
return AmazonS3ClientBuilder.standard()
42-
.withRegion(applicationProperties.getAwsRegion())
42+
.withRegion(applicationProperties.getFeast().getAwsRegion())
4343
.build();
4444
}
4545

java/serving/src/main/java/feast/serving/config/ServingServiceConfigV2.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ public ServingServiceV2 registryBasedServingServiceV2(
6868

6969
log.info("Working Directory = " + System.getProperty("user.dir"));
7070

71-
final String transformationServiceEndpoint =
72-
applicationProperties.getTransformationServiceEndpoint();
7371
final OnlineTransformationService onlineTransformationService =
74-
new OnlineTransformationService(transformationServiceEndpoint, registryRepository);
72+
new OnlineTransformationService(
73+
applicationProperties.getFeast().getTransformationServiceEndpoint(),
74+
registryRepository);
7575

7676
servingService =
7777
new OnlineServingServiceV2(

java/serving/src/main/java/feast/serving/grpc/OnlineServingGrpcServiceV2.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@
1919
import feast.proto.serving.ServingAPIProto;
2020
import feast.proto.serving.ServingServiceGrpc;
2121
import feast.serving.service.ServingServiceV2;
22+
import io.grpc.Status;
2223
import io.grpc.stub.StreamObserver;
2324
import javax.inject.Inject;
25+
import org.slf4j.Logger;
2426

2527
public class OnlineServingGrpcServiceV2 extends ServingServiceGrpc.ServingServiceImplBase {
2628
private final ServingServiceV2 servingServiceV2;
29+
private static final Logger log =
30+
org.slf4j.LoggerFactory.getLogger(OnlineServingGrpcServiceV2.class);
2731

2832
@Inject
2933
OnlineServingGrpcServiceV2(ServingServiceV2 servingServiceV2) {
@@ -34,15 +38,27 @@ public class OnlineServingGrpcServiceV2 extends ServingServiceGrpc.ServingServic
3438
public void getFeastServingInfo(
3539
ServingAPIProto.GetFeastServingInfoRequest request,
3640
StreamObserver<ServingAPIProto.GetFeastServingInfoResponse> responseObserver) {
37-
responseObserver.onNext(this.servingServiceV2.getFeastServingInfo(request));
38-
responseObserver.onCompleted();
41+
try {
42+
responseObserver.onNext(this.servingServiceV2.getFeastServingInfo(request));
43+
responseObserver.onCompleted();
44+
} catch (RuntimeException e) {
45+
log.warn("Failed to get Serving Info", e);
46+
responseObserver.onError(
47+
Status.INTERNAL.withDescription(e.getMessage()).withCause(e).asRuntimeException());
48+
}
3949
}
4050

4151
@Override
4252
public void getOnlineFeatures(
4353
ServingAPIProto.GetOnlineFeaturesRequest request,
4454
StreamObserver<ServingAPIProto.GetOnlineFeaturesResponse> responseObserver) {
45-
responseObserver.onNext(this.servingServiceV2.getOnlineFeatures(request));
46-
responseObserver.onCompleted();
55+
try {
56+
responseObserver.onNext(this.servingServiceV2.getOnlineFeatures(request));
57+
responseObserver.onCompleted();
58+
} catch (RuntimeException e) {
59+
log.warn("Failed to get Online Features", e);
60+
responseObserver.onError(
61+
Status.INTERNAL.withDescription(e.getMessage()).withCause(e).asRuntimeException());
62+
}
4763
}
4864
}

java/serving/src/main/java/feast/serving/modules/ServerModule.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

java/serving/src/main/java/feast/serving/service/OnlineServingServiceV2.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,8 @@ public ServingAPIProto.GetOnlineFeaturesResponse getOnlineFeatures(
9191
// Pair from extractRequestDataFeatureNamesAndOnDemandFeatureInputs.
9292
// Currently, we can retrieve context variables directly from GetOnlineFeaturesRequest.
9393
List<FeatureReferenceV2> onDemandFeatureInputs =
94-
this.onlineTransformationService
95-
.extractRequestDataFeatureNamesAndOnDemandFeatureInputs(onDemandFeatureReferences)
96-
.getRight();
94+
this.onlineTransformationService.extractOnDemandFeaturesDependencies(
95+
onDemandFeatureReferences);
9796

9897
// Add on demand feature inputs to list of feature references to retrieve.
9998
for (FeatureReferenceV2 onDemandFeatureInput : onDemandFeatureInputs) {
@@ -284,7 +283,12 @@ private void populateOnDemandFeatures(
284283
valueList.add(features.get(rowIdx).get(featureIdx).getFeatureValue(valueType));
285284
}
286285

287-
onDemandContext.add(Pair.of(Feature.getFeatureReference(featureReference), valueList));
286+
onDemandContext.add(
287+
Pair.of(
288+
String.format(
289+
"%s__%s",
290+
featureReference.getFeatureViewName(), featureReference.getFeatureName()),
291+
valueList));
288292
}
289293
// Serialize the augmented values.
290294
ValueType transformationInput =

0 commit comments

Comments
 (0)