Skip to content

Commit 9e5daab

Browse files
authored
[HWORKS-135] Models backend should store metadata in tables instead of opensearch (#1516) (#1473)
1 parent d4d9904 commit 9e5daab

File tree

18 files changed

+1232
-441
lines changed

18 files changed

+1232
-441
lines changed

hopsworks-api/src/main/java/io/hops/hopsworks/api/modelregistry/models/FilterBy.java

+21-11
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,45 @@
1616
package io.hops.hopsworks.api.modelregistry.models;
1717

1818
import io.hops.hopsworks.common.dao.AbstractFacade;
19+
import io.hops.hopsworks.common.models.version.ModelVersionFacade;
1920

2021
public class FilterBy implements AbstractFacade.FilterBy {
2122

22-
private String param = null;
23-
private String value = null;
23+
private final ModelVersionFacade.Filters filter;
24+
private final String param;
2425

2526
public FilterBy(String param) {
26-
if(param.contains(":")) {
27-
String[] paramSplit = param.split(":");
28-
this.param = paramSplit[0];
29-
this.value = paramSplit[1];
27+
if (param.contains(":")) {
28+
this.filter = ModelVersionFacade.Filters.valueOf(param.substring(0, param.indexOf(':')).toUpperCase());
29+
this.param = param.substring(param.indexOf(':') + 1);
30+
} else {
31+
this.filter = ModelVersionFacade.Filters.valueOf(param);
32+
this.param = this.filter.getDefaultParam();
3033
}
3134
}
3235

36+
@Override
3337
public String getParam() {
3438
return param;
3539
}
3640

41+
@Override
42+
public String getValue() {
43+
return this.filter.getValue();
44+
}
45+
3746
@Override
3847
public String getSql() {
39-
return null;
48+
return this.filter.getSql();
4049
}
4150

4251
@Override
4352
public String getField() {
44-
return null;
53+
return this.filter.getField();
4554
}
4655

47-
public String getValue() {
48-
return value;
56+
@Override
57+
public String toString() {
58+
return filter.toString();
4959
}
50-
}
60+
}

hopsworks-api/src/main/java/io/hops/hopsworks/api/modelregistry/models/ModelExpansions.java

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.hops.hopsworks.api.modelregistry.models;
1818

1919
import io.hops.hopsworks.api.modelregistry.models.provenance.ModelTrainingDatasetResourceRequest;
20+
import io.hops.hopsworks.api.user.UserResourceRequest;
2021
import io.hops.hopsworks.common.api.Expansions;
2122
import io.hops.hopsworks.common.api.ResourceRequest;
2223

@@ -35,6 +36,9 @@ public ModelExpansions(String queryParam) {
3536
case TRAININGDATASETS:
3637
resourceRequest = new ModelTrainingDatasetResourceRequest(name, queryParam);
3738
break;
39+
case USERS:
40+
resourceRequest = new UserResourceRequest(name, queryParam);
41+
break;
3842
case MODELSCHEMA:
3943
resourceRequest = new ModelSchemaResourceRequest(name, queryParam);
4044
break;

hopsworks-api/src/main/java/io/hops/hopsworks/api/modelregistry/models/ModelUtils.java

+1-47
Original file line numberDiff line numberDiff line change
@@ -15,39 +15,28 @@
1515
*/
1616
package io.hops.hopsworks.api.modelregistry.models;
1717

18-
import com.google.common.base.Strings;
1918
import io.hops.hopsworks.api.modelregistry.models.dto.ModelDTO;
2019
import io.hops.hopsworks.common.dao.project.ProjectFacade;
2120
import io.hops.hopsworks.common.dataset.DatasetController;
2221
import io.hops.hopsworks.common.hdfs.DistributedFileSystemOps;
2322
import io.hops.hopsworks.common.hdfs.DistributedFsService;
2423
import io.hops.hopsworks.common.hdfs.HdfsUsersController;
2524
import io.hops.hopsworks.common.hdfs.Utils;
26-
import io.hops.hopsworks.common.provenance.state.dto.ProvStateDTO;
27-
import io.hops.hopsworks.common.python.environment.EnvironmentController;
2825
import io.hops.hopsworks.common.util.AccessController;
2926
import io.hops.hopsworks.common.util.Settings;
3027
import io.hops.hopsworks.exceptions.DatasetException;
3128
import io.hops.hopsworks.exceptions.GenericException;
32-
import io.hops.hopsworks.exceptions.JobException;
33-
import io.hops.hopsworks.exceptions.MetadataException;
34-
import io.hops.hopsworks.exceptions.ModelRegistryException;
29+
3530
import io.hops.hopsworks.exceptions.ProjectException;
36-
import io.hops.hopsworks.exceptions.PythonException;
37-
import io.hops.hopsworks.exceptions.ServiceException;
3831
import io.hops.hopsworks.persistence.entity.dataset.Dataset;
3932
import io.hops.hopsworks.persistence.entity.project.Project;
4033
import io.hops.hopsworks.persistence.entity.user.Users;
4134
import io.hops.hopsworks.restutils.RESTCodes;
42-
import org.json.JSONObject;
4335

4436
import javax.ejb.EJB;
4537
import javax.ejb.Stateless;
4638
import javax.ejb.TransactionAttribute;
4739
import javax.ejb.TransactionAttributeType;
48-
import javax.ws.rs.core.Response;
49-
import javax.ws.rs.core.UriBuilder;
50-
import javax.ws.rs.core.UriInfo;
5140
import java.util.logging.Level;
5241

5342
@Stateless
@@ -64,12 +53,6 @@ public class ModelUtils {
6453
private HdfsUsersController hdfsUsersController;
6554
@EJB
6655
private DistributedFsService dfs;
67-
@EJB
68-
private ModelsController modelsController;
69-
@EJB
70-
private EnvironmentController environmentController;
71-
@EJB
72-
private ModelConverter modelConverter;
7356

7457
public String getModelsDatasetPath(Project userProject, Project modelRegistryProject) {
7558
String modelsPath = Utils.getProjectPath(userProject.getName()) + Settings.HOPS_MODELS_DATASET + "/";
@@ -139,39 +122,10 @@ public ModelsController.Accessor getModelsAccessor(Users user, Project userProje
139122
}
140123
}
141124

142-
public Response createModel(UriInfo uriInfo, ModelsController.Accessor accessor, String mlId, ModelDTO modelDTO,
143-
String jobName, String kernelId)
144-
throws DatasetException, MetadataException, JobException, ServiceException, PythonException,
145-
ModelRegistryException {
146-
String realName = accessor.user.getFname() + " " + accessor.user.getLname();
147-
//Only attach program and environment if exporting inside Hopsworks
148-
if (!Strings.isNullOrEmpty(jobName) || !Strings.isNullOrEmpty(kernelId)) {
149-
150-
modelDTO.setProgram(modelsController.versionProgram(accessor, jobName, kernelId,
151-
modelDTO.getName(), modelDTO.getVersion()));
152-
//Export environment to correct path here
153-
modelDTO.setEnvironment(environmentController.exportEnv(accessor.experimentProject, accessor.user,
154-
getModelFullPath(accessor.modelProject, modelDTO.getName(), modelDTO.getVersion()) +
155-
"/" + Settings.ENVIRONMENT_FILE
156-
));
157-
}
158-
159-
modelDTO.setModelRegistryId(accessor.modelProject.getId());
160-
161-
modelsController.attachModel(accessor.udfso, accessor.modelProject, realName, modelDTO);
162-
UriBuilder builder = uriInfo.getAbsolutePathBuilder().path(mlId);
163-
return Response.created(builder.build()).entity(modelDTO).build();
164-
}
165-
166125
public String getModelFullPath(Project modelRegistryProject, String modelName, Integer modelVersion) {
167126
return Utils.getProjectPath(modelRegistryProject.getName()) +
168127
Settings.HOPS_MODELS_DATASET + "/" + modelName + "/" + modelVersion;
169128
}
170-
171-
public ModelDTO convertProvenanceHitToModel(ProvStateDTO model) throws ModelRegistryException {
172-
JSONObject summary = new JSONObject(model.getXattrs().get(ModelsBuilder.MODEL_SUMMARY_XATTR_NAME));
173-
return modelConverter.unmarshalDescription(summary.toString());
174-
}
175129

176130
public String[] getModelNameAndVersion(String mlId) {
177131
int splitIndex = mlId.lastIndexOf("_");

hopsworks-api/src/main/java/io/hops/hopsworks/api/modelregistry/models/ModelsBeanParam.java

+13-12
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ public class ModelsBeanParam {
3737
@BeanParam
3838
private ModelExpansionBeanParam expansions;
3939

40+
public ModelsBeanParam(
41+
@QueryParam("sort_by") String sortBy,
42+
@QueryParam("filter_by") Set<FilterBy> filter) {
43+
this.sortBy = sortBy;
44+
this.sortBySet = getSortBy(sortBy);
45+
this.filter = filter;
46+
}
47+
4048
private Set<SortBy> getSortBy(String param) {
4149
if (param == null || param.isEmpty()) {
4250
return new LinkedHashSet<>();
@@ -52,10 +60,12 @@ private Set<SortBy> getSortBy(String param) {
5260
return sortBys;
5361
}
5462

55-
public ModelsBeanParam(@QueryParam("filter_by") Set<FilterBy> filter, @QueryParam("sort_by") String sortBy) {
56-
this.filter = filter;
63+
public String getSortBy() {
64+
return sortBy;
65+
}
66+
67+
public void setSortBy(String sortBy) {
5768
this.sortBy = sortBy;
58-
sortBySet = getSortBy(sortBy);
5969
}
6070

6171
public Set<FilterBy> getFilter() {
@@ -66,15 +76,6 @@ public void setFilter(Set<FilterBy> filter) {
6676
this.filter = filter;
6777
}
6878

69-
70-
public String getSortBy() {
71-
return sortBy;
72-
}
73-
74-
public void setSortBy(String sortBy) {
75-
this.sortBy = sortBy;
76-
}
77-
7879
public Set<SortBy> getSortBySet() {
7980
return sortBySet;
8081
}

0 commit comments

Comments
 (0)