Skip to content

Commit 92a0373

Browse files
committed
[HWORKS-987] model version id should be monotonically increasing (#1706)
1 parent b94f853 commit 92a0373

File tree

8 files changed

+39
-130
lines changed

8 files changed

+39
-130
lines changed

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

+4-5
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public ModelDTO uri(ModelDTO dto, UriInfo uriInfo, Project userProject, Project
8686
.path(ResourceRequest.Name.MODELREGISTRIES.toString().toLowerCase())
8787
.path(Integer.toString(modelRegistryProject.getId()))
8888
.path(ResourceRequest.Name.MODELS.toString().toLowerCase())
89-
.path(modelVersion.getModel().getName() + "_" + modelVersion.getModelVersionPK().getVersion())
89+
.path(modelVersion.getModel().getName() + "_" + modelVersion.getVersion())
9090
.build());
9191
return dto;
9292
}
@@ -145,9 +145,9 @@ public ModelDTO build(UriInfo uriInfo,
145145
ModelDTO modelDTO = new ModelDTO();
146146
uri(modelDTO, uriInfo, userProject, modelRegistryProject, modelVersion);
147147
if (expand(modelDTO, resourceRequest).isExpand()) {
148-
modelDTO.setId(modelVersion.getModel().getName() + "_" + modelVersion.getModelVersionPK().getVersion());
148+
modelDTO.setId(modelVersion.getModel().getName() + "_" + modelVersion.getVersion());
149149
modelDTO.setName(modelVersion.getModel().getName());
150-
modelDTO.setVersion(modelVersion.getModelVersionPK().getVersion());
150+
modelDTO.setVersion(modelVersion.getVersion());
151151
modelDTO.setUserFullName(modelVersion.getUserFullName());
152152
modelDTO.setCreated(modelVersion.getCreated().getTime());
153153
modelDTO.setMetrics(modelVersion.getMetrics().getAttributes());
@@ -162,8 +162,7 @@ public ModelDTO build(UriInfo uriInfo,
162162
modelDTO.setCreator(usersBuilder.build(uriInfo, resourceRequest, modelVersion.getCreator()));
163163

164164
DatasetPath modelDsPath = datasetHelper.getDatasetPath(userProject,
165-
modelUtils.getModelFullPath(modelRegistryProject, modelVersion.getModel().getName(),
166-
modelVersion.getModelVersionPK().getVersion()),
165+
modelUtils.getModelFullPath(modelRegistryProject, modelVersion.getModel().getName(), modelVersion.getVersion()),
167166
DatasetType.DATASET);
168167
ModelRegistryTagUri tagUri = new ModelRegistryTagUri(uriInfo, modelRegistryProject,
169168
ResourceRequest.Name.MODELS, modelDTO.getId());

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

+4-8
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import io.hops.hopsworks.persistence.entity.models.Model;
5252
import io.hops.hopsworks.persistence.entity.models.version.Metrics;
5353
import io.hops.hopsworks.persistence.entity.models.version.ModelVersion;
54-
import io.hops.hopsworks.persistence.entity.models.version.ModelVersionPK;
5554
import io.hops.hopsworks.persistence.entity.project.Project;
5655
import io.hops.hopsworks.persistence.entity.user.Users;
5756
import io.hops.hopsworks.restutils.RESTCodes;
@@ -123,10 +122,8 @@ public ModelVersion createModelVersion(ModelsController.Accessor accessor, Model
123122
modelVersion.setExperimentProjectName(modelDTO.getExperimentProjectName());
124123
modelVersion.setCreator(accessor.user);
125124

126-
ModelVersionPK modelVersionPK = new ModelVersionPK();
127-
modelVersionPK.setVersion(modelDTO.getVersion());
128-
modelVersionPK.setModelId(model.getId());
129-
modelVersion.setModelVersionPK(modelVersionPK);
125+
modelVersion.setVersion(modelDTO.getVersion());
126+
modelVersion.setModel(model);
130127

131128
//Only attach program and environment if exporting inside Hopsworks
132129
if (!Strings.isNullOrEmpty(jobName) || !Strings.isNullOrEmpty(kernelId)) {
@@ -164,7 +161,7 @@ public void delete(Users user, Project userProject, Project parentProject, Model
164161

165162
String modelPath = Utils.getProjectPath(userProject.getName())
166163
+ parentProject.getName() + "::" + Settings.HOPS_MODELS_DATASET + "/" + modelVersion.getModel().getName()
167-
+ "/" + modelVersion.getModelVersionPK().getVersion();
164+
+ "/" + modelVersion.getVersion();
168165
deleteInternal(user, userProject, modelPath, modelVersion);
169166
}
170167
}
@@ -174,8 +171,7 @@ public void delete(Users user, Project project, ModelVersion modelVersion) throw
174171
verifyNoModelDeployments(project, modelVersion);
175172

176173
String modelPath = Utils.getProjectPath(project.getName())
177-
+ Settings.HOPS_MODELS_DATASET + "/" + modelVersion.getModel().getName() + "/"
178-
+ modelVersion.getModelVersionPK().getVersion();
174+
+ Settings.HOPS_MODELS_DATASET + "/" + modelVersion.getModel().getName() + "/" + modelVersion.getVersion();
179175
deleteInternal(user, project, modelPath, modelVersion);
180176
}
181177

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public Response put(@PathParam("id") String id,
231231
ModelVersion modelVersion = modelsController.createModelVersion(accessor, modelDTO, jobName, kernelId);
232232
ModelDTO dto = modelsBuilder.build(uriInfo, new ResourceRequest(ResourceRequest.Name.MODELS), user, userProject,
233233
modelRegistryProject, modelVersion, modelUtils.getModelFullPath(modelProject, modelVersion.getModel().getName(),
234-
modelVersion.getModelVersionPK().getVersion()));
234+
modelVersion.getVersion()));
235235
UriBuilder builder = uriInfo.getAbsolutePathBuilder().path(id);
236236
return Response.created(builder.build()).entity(dto).build();
237237
} finally {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void setModel(ModelVersion modelVersion) {
5252
@Override
5353
protected DatasetPath getDatasetPath() throws DatasetException {
5454
return datasetHelper.getDatasetPath(project, modelUtils.getModelFullPath(modelRegistry,
55-
modelVersion.getModel().getName(), modelVersion.getModelVersionPK().getVersion()), DatasetType.DATASET);
55+
modelVersion.getModel().getName(), modelVersion.getVersion()), DatasetType.DATASET);
5656
}
5757

5858
@Override

hopsworks-common/src/main/java/io/hops/hopsworks/common/featurestore/featuregroup/EmbeddingFeatureDTO.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public EmbeddingFeatureDTO(EmbeddingFeature feature) {
4646
// model registry id is same as project id
4747
feature.getModelVersion().getModel().getProject().getId(),
4848
feature.getModelVersion().getModel().getName(),
49-
feature.getModelVersion().getModelVersionPK().getVersion());
49+
feature.getModelVersion().getVersion());
5050
}
5151
}
5252
}

hopsworks-persistence/src/main/java/io/hops/hopsworks/persistence/entity/featurestore/featuregroup/EmbeddingFeature.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import javax.persistence.GenerationType;
2626
import javax.persistence.Id;
2727
import javax.persistence.JoinColumn;
28-
import javax.persistence.JoinColumns;
2928
import javax.persistence.OneToOne;
3029
import javax.persistence.Table;
3130
import javax.xml.bind.annotation.XmlRootElement;
@@ -47,9 +46,7 @@ public class EmbeddingFeature {
4746
private Integer dimension;
4847
@Column(name = "similarity_function_type")
4948
private String similarityFunctionType;
50-
@JoinColumns({
51-
@JoinColumn(name = "hsml_model_version", referencedColumnName = "version"),
52-
@JoinColumn(name = "hsml_model_id", referencedColumnName = "model_id")})
49+
@JoinColumn(name = "model_version_id", referencedColumnName = "id")
5350
@OneToOne
5451
private ModelVersion modelVersion;
5552

hopsworks-persistence/src/main/java/io/hops/hopsworks/persistence/entity/models/version/ModelVersion.java

+27-22
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import javax.persistence.Basic;
2323
import javax.persistence.Column;
2424
import javax.persistence.Convert;
25-
import javax.persistence.EmbeddedId;
2625
import javax.persistence.Entity;
26+
import javax.persistence.GeneratedValue;
27+
import javax.persistence.GenerationType;
28+
import javax.persistence.Id;
2729
import javax.persistence.JoinColumn;
2830
import javax.persistence.ManyToOne;
2931
import javax.persistence.NamedQueries;
@@ -36,6 +38,7 @@
3638
import javax.xml.bind.annotation.XmlRootElement;
3739
import java.io.Serializable;
3840
import java.util.Date;
41+
import java.util.Objects;
3942

4043
/**
4144
* A ModelVersion is an instance of a Model.
@@ -48,22 +51,27 @@
4851
query = "SELECT mv FROM ModelVersion mv"),
4952
@NamedQuery(name = "ModelVersion.findByProjectAndMlId",
5053
query
51-
= "SELECT mv FROM ModelVersion mv WHERE mv.modelVersionPK.version = :version" +
52-
" AND mv.modelVersionPK.modelId = :modelId")
54+
= "SELECT mv FROM ModelVersion mv WHERE mv.version = :version" +
55+
" AND mv.model.id = :modelId")
5356
}
5457
)
5558
public class ModelVersion implements Serializable {
5659

5760
private static final long serialVersionUID = 1L;
5861

59-
@EmbeddedId
60-
private ModelVersionPK modelVersionPK;
62+
@Id
63+
@GeneratedValue(strategy = GenerationType.IDENTITY)
64+
@Basic(optional = false)
65+
@Column(name = "id")
66+
private Integer id;
67+
68+
@Basic(optional = false)
69+
@Column(name = "version")
70+
private Integer version;
6171

6272
@ManyToOne(optional = false)
6373
@JoinColumn(name = "model_id",
64-
referencedColumnName = "id",
65-
insertable = false,
66-
updatable = false)
74+
referencedColumnName = "id")
6775
private Model model;
6876

6977
@JoinColumn(name = "user_id",
@@ -108,6 +116,14 @@ public class ModelVersion implements Serializable {
108116
public ModelVersion() {
109117
}
110118

119+
public Integer getVersion() {
120+
return version;
121+
}
122+
123+
public void setVersion(Integer version) {
124+
this.version = version;
125+
}
126+
111127
public Metrics getMetrics() {
112128
return metrics;
113129
}
@@ -176,14 +192,6 @@ public void setExperimentProjectName(String experimentProjectName) {
176192
this.experimentProjectName = experimentProjectName;
177193
}
178194

179-
public ModelVersionPK getModelVersionPK() {
180-
return modelVersionPK;
181-
}
182-
183-
public void setModelVersionPK(ModelVersionPK modelVersionPK) {
184-
this.modelVersionPK = modelVersionPK;
185-
}
186-
187195
public Model getModel() {
188196
return model;
189197
}
@@ -193,7 +201,7 @@ public void setModel(Model model) {
193201
}
194202

195203
public String getMlId() {
196-
return model.getName() + "_" + modelVersionPK.getVersion();
204+
return model.getName() + "_" + version;
197205
}
198206

199207
public Users getCreator() {
@@ -206,9 +214,7 @@ public void setCreator(Users creator) {
206214

207215
@Override
208216
public int hashCode() {
209-
int hash = 0;
210-
hash += (getModelVersionPK() != null ? getModelVersionPK().hashCode() : 0);
211-
return hash;
217+
return Objects.hash(id);
212218
}
213219

214220
@Override
@@ -218,8 +224,7 @@ public boolean equals(Object object) {
218224
return false;
219225
}
220226
ModelVersion other = (ModelVersion) object;
221-
if ((this.getModelVersionPK() == null && other.getModelVersionPK() != null) ||
222-
(this.getModelVersionPK() != null && !this.getModelVersionPK().equals(other.getModelVersionPK()))) {
227+
if ((this.id == null && other.id != null) || (this.id != null && !Objects.equals(id, other.id))) {
223228
return false;
224229
}
225230
return true;

hopsworks-persistence/src/main/java/io/hops/hopsworks/persistence/entity/models/version/ModelVersionPK.java

-88
This file was deleted.

0 commit comments

Comments
 (0)