Skip to content

Commit 041083a

Browse files
committed
fix: apply feature set should authorize default project if project is not set.
1 parent 3590339 commit 041083a

4 files changed

Lines changed: 26 additions & 19 deletions

File tree

core/src/main/java/feast/core/grpc/CoreServiceImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import feast.core.service.StatsService;
3131
import feast.proto.core.CoreServiceGrpc.CoreServiceImplBase;
3232
import feast.proto.core.CoreServiceProto.*;
33+
import feast.proto.core.FeatureSetProto.FeatureSet;
3334
import io.grpc.Status;
3435
import io.grpc.StatusRuntimeException;
3536
import io.grpc.stub.StreamObserver;
@@ -187,9 +188,10 @@ public void applyFeatureSet(
187188
String projectId = null;
188189

189190
try {
190-
projectId = request.getFeatureSet().getSpec().getProject();
191+
FeatureSet featureSet = specService.imputeProjectName(request.getFeatureSet());
192+
projectId = featureSet.getSpec().getProject();
191193
authorizationService.authorizeRequest(SecurityContextHolder.getContext(), projectId);
192-
ApplyFeatureSetResponse response = specService.applyFeatureSet(request.getFeatureSet());
194+
ApplyFeatureSetResponse response = specService.applyFeatureSet(featureSet);
193195
responseObserver.onNext(response);
194196
responseObserver.onCompleted();
195197
} catch (org.hibernate.exception.ConstraintViolationException e) {

core/src/main/java/feast/core/service/SpecService.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,6 @@ public ListStoresResponse listStores(ListStoresRequest.Filter filter) {
312312
@Transactional
313313
public ApplyFeatureSetResponse applyFeatureSet(FeatureSetProto.FeatureSet newFeatureSet)
314314
throws InvalidProtocolBufferException {
315-
// Autofill default project if not specified
316-
if (newFeatureSet.getSpec().getProject().isEmpty()) {
317-
newFeatureSet =
318-
newFeatureSet
319-
.toBuilder()
320-
.setSpec(newFeatureSet.getSpec().toBuilder().setProject(Project.DEFAULT_NAME).build())
321-
.build();
322-
}
323-
324315
// Validate incoming feature set
325316
FeatureSetValidator.validateSpec(newFeatureSet);
326317

@@ -383,6 +374,21 @@ public ApplyFeatureSetResponse applyFeatureSet(FeatureSetProto.FeatureSet newFea
383374
.build();
384375
}
385376

377+
/**
378+
* sets project to 'default' if project is not specified in featureSet
379+
*
380+
* @param featureSet Feature set which needs to be imputed with default project.
381+
*/
382+
public FeatureSetProto.FeatureSet imputeProjectName(FeatureSetProto.FeatureSet featureSet) {
383+
if (featureSet.getSpec().getProject().isEmpty()) {
384+
return featureSet
385+
.toBuilder()
386+
.setSpec(featureSet.getSpec().toBuilder().setProject(Project.DEFAULT_NAME).build())
387+
.build();
388+
}
389+
return featureSet;
390+
}
391+
386392
/**
387393
* UpdateStore updates the repository with the new given store.
388394
*

core/src/test/java/feast/core/auth/CoreServiceAuthTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ public void shouldNotApplyFeatureSetIfNotProjectMember() throws InvalidProtocolB
102102

103103
StreamRecorder<ApplyFeatureSetResponse> responseObserver = StreamRecorder.create();
104104
FeatureSetProto.FeatureSet incomingFeatureSet = newDummyFeatureSet("f2", 1, project).toProto();
105+
doReturn(incomingFeatureSet)
106+
.when(specService)
107+
.imputeProjectName(any(FeatureSetProto.FeatureSet.class));
105108
FeatureSetProto.FeatureSetSpec incomingFeatureSetSpec =
106109
incomingFeatureSet.getSpec().toBuilder().build();
107110
FeatureSetProto.FeatureSet spec =

core/src/test/java/feast/core/service/SpecServiceTest.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ public void applyFeatureSetShouldCreateProjectWhenNotAlreadyExists()
606606
}
607607

608608
@Test
609-
public void applyFeatureSetShouldUsedDefaultProjectIfUnspecified()
609+
public void imputeProjectNameShouldSetDefaultProjectIfUnspecified()
610610
throws InvalidProtocolBufferException {
611611
Feature f3f1 = TestUtil.CreateFeature("f3f1", Enum.INT64);
612612
Feature f3f2 = TestUtil.CreateFeature("f3f2", Enum.INT64);
@@ -616,13 +616,9 @@ public void applyFeatureSetShouldUsedDefaultProjectIfUnspecified()
616616
FeatureSetProto.FeatureSet incomingFeatureSet =
617617
TestUtil.CreateFeatureSet("f3", "", Arrays.asList(f3e1), Arrays.asList(f3f2, f3f1))
618618
.toProto();
619-
ApplyFeatureSetResponse applyFeatureSetResponse =
620-
specService.applyFeatureSet(incomingFeatureSet);
621-
assertThat(applyFeatureSetResponse.getStatus(), equalTo(Status.CREATED));
622-
623-
assertThat(
624-
applyFeatureSetResponse.getFeatureSet().getSpec().getProject(),
625-
equalTo(Project.DEFAULT_NAME));
619+
FeatureSetProto.FeatureSet imputedFeatureSet =
620+
specService.imputeProjectName(incomingFeatureSet);
621+
assertThat(imputedFeatureSet.getSpec().getProject(), equalTo(Project.DEFAULT_NAME));
626622
}
627623

628624
@Test

0 commit comments

Comments
 (0)