From cea2e444b3623dc88e2c0e2d1177e12a094449e1 Mon Sep 17 00:00:00 2001 From: Joost Rothweiler <=> Date: Thu, 2 Apr 2020 08:40:00 +0200 Subject: [PATCH 1/3] Create project if not exists on apply --- .../java/feast/core/service/SpecService.java | 11 ++-- .../feast/core/service/SpecServiceTest.java | 53 +++++++++++++++++++ 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/feast/core/service/SpecService.java b/core/src/main/java/feast/core/service/SpecService.java index 5b98d065977..fd582fccffd 100644 --- a/core/src/main/java/feast/core/service/SpecService.java +++ b/core/src/main/java/feast/core/service/SpecService.java @@ -293,14 +293,9 @@ public ApplyFeatureSetResponse applyFeatureSet(FeatureSetProto.FeatureSet newFea Project project = projectRepository .findById(newFeatureSet.getSpec().getProject()) - .orElseThrow( - () -> - new IllegalArgumentException( - String.format( - "Project name does not exist. Please create a project first: %s", - project_name))); - - // Ensure that the project is not archived + .orElse(new Project(project_name)); + + // Ensure that the project retrieved from repository is not archived if (project.isArchived()) { throw new IllegalArgumentException(String.format("Project is archived: %s", project_name)); } diff --git a/core/src/test/java/feast/core/service/SpecServiceTest.java b/core/src/test/java/feast/core/service/SpecServiceTest.java index 1eb56caac26..43a66135dce 100644 --- a/core/src/test/java/feast/core/service/SpecServiceTest.java +++ b/core/src/test/java/feast/core/service/SpecServiceTest.java @@ -170,6 +170,10 @@ public void setUp() { when(projectRepository.findAllByArchivedIsFalse()) .thenReturn(Collections.singletonList(new Project("project1"))); when(projectRepository.findById("project1")).thenReturn(Optional.of(new Project("project1"))); + Project archivedProject = new Project("archivedproject"); + archivedProject.setArchived(true); + when(projectRepository.findById(archivedProject.getName())) + .thenReturn(Optional.of(archivedProject)); Store store1 = newDummyStore("SERVING"); Store store2 = newDummyStore("WAREHOUSE"); @@ -706,6 +710,55 @@ public void applyFeatureSetShouldUpdateFeatureSetWhenConstraintsAreUpdated() } } + @Test + public void applyFeatureSetShouldCreateProjectWhenNotAlreadyExists() + throws InvalidProtocolBufferException { + Field f3f1 = new Field("f3f1", Enum.INT64); + Field f3f2 = new Field("f3f2", Enum.INT64); + Field f3e1 = new Field("f3e1", Enum.STRING); + FeatureSetProto.FeatureSet incomingFeatureSet = + (new FeatureSet( + "f3", + "newproject", + 5, + 100L, + Arrays.asList(f3e1), + Arrays.asList(f3f2, f3f1), + defaultSource, + FeatureSetStatus.STATUS_READY)) + .toProto(); + + ApplyFeatureSetResponse applyFeatureSetResponse = + specService.applyFeatureSet(incomingFeatureSet); + assertThat(applyFeatureSetResponse.getStatus(), equalTo(Status.CREATED)); + assertThat( + applyFeatureSetResponse.getFeatureSet().getSpec().getProject(), + equalTo(incomingFeatureSet.getSpec().getProject())); + } + + @Test + public void applyFeatureSetShouldFailWhenProjectIsArchived() + throws InvalidProtocolBufferException { + Field f3f1 = new Field("f3f1", Enum.INT64); + Field f3f2 = new Field("f3f2", Enum.INT64); + Field f3e1 = new Field("f3e1", Enum.STRING); + FeatureSetProto.FeatureSet incomingFeatureSet = + (new FeatureSet( + "f3", + "archivedproject", + 5, + 100L, + Arrays.asList(f3e1), + Arrays.asList(f3f2, f3f1), + defaultSource, + FeatureSetStatus.STATUS_READY)) + .toProto(); + + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("Project is archived"); + specService.applyFeatureSet(incomingFeatureSet); + } + @Test public void shouldUpdateStoreIfConfigChanges() throws InvalidProtocolBufferException { when(storeRepository.findById("SERVING")).thenReturn(Optional.of(stores.get(0))); From 469b0816345a1716dd98850dd93cddab97d40fe8 Mon Sep 17 00:00:00 2001 From: Joost Rothweiler <=> Date: Thu, 2 Apr 2020 19:54:18 +0200 Subject: [PATCH 2/3] Update comments to reflect new situation --- core/src/main/java/feast/core/service/SpecService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/feast/core/service/SpecService.java b/core/src/main/java/feast/core/service/SpecService.java index fd582fccffd..c823c436ef8 100644 --- a/core/src/main/java/feast/core/service/SpecService.java +++ b/core/src/main/java/feast/core/service/SpecService.java @@ -288,7 +288,7 @@ public ApplyFeatureSetResponse applyFeatureSet(FeatureSetProto.FeatureSet newFea // Validate incoming feature set FeatureSetValidator.validateSpec(newFeatureSet); - // Ensure that the project already exists + // Find project or create new one if not exists String project_name = newFeatureSet.getSpec().getProject(); Project project = projectRepository From 50b5e8a551783c45f550b5843049f05e63e43ca9 Mon Sep 17 00:00:00 2001 From: Willem Pienaar <6728866+woop@users.noreply.github.com> Date: Fri, 3 Apr 2020 08:31:54 +0800 Subject: [PATCH 3/3] Fixed typo in comment --- core/src/main/java/feast/core/service/SpecService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/feast/core/service/SpecService.java b/core/src/main/java/feast/core/service/SpecService.java index c823c436ef8..8fec6ac5112 100644 --- a/core/src/main/java/feast/core/service/SpecService.java +++ b/core/src/main/java/feast/core/service/SpecService.java @@ -288,7 +288,7 @@ public ApplyFeatureSetResponse applyFeatureSet(FeatureSetProto.FeatureSet newFea // Validate incoming feature set FeatureSetValidator.validateSpec(newFeatureSet); - // Find project or create new one if not exists + // Find project or create new one if it does not exist String project_name = newFeatureSet.getSpec().getProject(); Project project = projectRepository