Skip to content

Commit

Permalink
chore(controller): show the latest alias (#2545)
Browse files Browse the repository at this point in the history
  • Loading branch information
jialeicui authored Jul 24, 2023
1 parent 355cdb8 commit bde12bb
Show file tree
Hide file tree
Showing 31 changed files with 118 additions and 76 deletions.
6 changes: 6 additions & 0 deletions console/src/domain/base/schemas/resource.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@ export interface IResourceSchema extends IBaseSchema {
id: string
name: string
}

export interface IHasTagSchema {
tag: string
alias: string
latest: boolean
}
9 changes: 9 additions & 0 deletions console/src/domain/base/utils/alias.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { IHasTagSchema } from '@base/schemas/resource'

export function getAlias({ tag, alias, latest }: IHasTagSchema): string[] {
return [tag, alias, latest ? 'latest' : ''].filter(Boolean) as string[]
}

export function getAliasStr(resource: IHasTagSchema, separator = ','): string {
return getAlias(resource).join(separator)
}
3 changes: 2 additions & 1 deletion console/src/domain/dataset/components/DatasetLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { themedStyled } from '@starwhale/ui/theme/styletron'
import React from 'react'
import { IDatasetTreeSchema } from '../schemas/dataset'
import { IDatasetTreeVersionSchema } from '../schemas/datasetVersion'
import { getAliasStr } from '@base/utils/alias'

export const DatasetLabelContainer = themedStyled('div', () => ({
display: 'inline-flex',
Expand Down Expand Up @@ -46,7 +47,7 @@ export function DatasetLabel({
style?: React.CSSProperties
}) {
const share = <Shared shared={version.shared} isTextShow={false} />
const alias = <Alias alias={version.alias} />
const alias = <Alias alias={getAliasStr(version)} />
const p = dataset ? [dataset.ownerName, dataset.projectName, dataset.datasetName].join('/') : ''
const name = version?.versionName ?? version?.name
const v = (name ?? '').substring(0, 8)
Expand Down
6 changes: 2 additions & 4 deletions console/src/domain/dataset/schemas/datasetVersion.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { IResourceSchema } from '@/domain/base/schemas/resource'
import { IHasTagSchema, IResourceSchema } from '@/domain/base/schemas/resource'
import { IUserSchema } from '@user/schemas/user'

export interface IDatasetFileSchema {
name: string
size: string
}
export interface IDatasetVersionSchema extends IResourceSchema {
tag: string
export interface IDatasetVersionSchema extends IResourceSchema, IHasTagSchema {
meta: string
owner?: IUserSchema
alias: string
shared?: number
}

Expand Down
3 changes: 2 additions & 1 deletion console/src/domain/model/components/ModelLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import React from 'react'
import { IModelTreeVersionSchema, IModelVersionSchema } from '../schemas/modelVersion'
import { IModelTreeSchema } from '../schemas/model'
import Shared from '@/components/Shared'
import { getAliasStr } from '@base/utils/alias'

export const ModelLabelContainer = themedStyled('div', () => ({
display: 'inline-flex',
Expand Down Expand Up @@ -46,7 +47,7 @@ export function ModelLabel({
style?: React.CSSProperties
}) {
const share = <Shared shared={version.shared} isTextShow={false} />
const alias = <Alias alias={version.alias} />
const alias = <Alias alias={getAliasStr(version)} />
const p = model ? [model.ownerName, model.projectName, model.modelName].join('/') : ''
const name = version?.versionName ?? version?.name
const v = (name ?? '').substring(0, 8)
Expand Down
6 changes: 2 additions & 4 deletions console/src/domain/model/schemas/modelVersion.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { IFileSchema } from '@/domain/base/schemas/file'
import { IResourceSchema } from '@/domain/base/schemas/resource'
import { IHasTagSchema, IResourceSchema } from '@/domain/base/schemas/resource'
import { IUserSchema } from '@user/schemas/user'

export interface IModelVersionSchema extends IResourceSchema {
export interface IModelVersionSchema extends IResourceSchema, IHasTagSchema {
name: string
tag: string
alias: string
size: string
owner?: IUserSchema
stepSpecs: StepSpec[]
Expand Down
3 changes: 2 additions & 1 deletion console/src/domain/runtime/components/RuntimeLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { themedStyled } from '@starwhale/ui/theme/styletron'
import React from 'react'
import { IRuntimeTreeSchema } from '../schemas/runtime'
import { IRuntimeTreeVersionSchema } from '../schemas/runtimeVersion'
import { getAliasStr } from '@base/utils/alias'

export const RuntimeLabelContainer = themedStyled('div', () => ({
display: 'inline-flex',
Expand Down Expand Up @@ -45,7 +46,7 @@ export function RuntimeLabel({
style?: React.CSSProperties
}) {
const share = <Shared shared={version.shared} isTextShow={false} />
const alias = <Alias alias={version.alias} />
const alias = <Alias alias={getAliasStr(version)} />
const p = runtime ? [runtime.ownerName, runtime.projectName, runtime.runtimeName].join('/') : ''
const name = version?.versionName ?? version?.name
const v = (name ?? '').substring(0, 8)
Expand Down
8 changes: 3 additions & 5 deletions console/src/domain/runtime/schemas/runtimeVersion.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { IResourceSchema } from '@/domain/base/schemas/resource'
import { IHasTagSchema, IResourceSchema } from '@/domain/base/schemas/resource'
import { IUserSchema } from '@user/schemas/user'
import { IListQuerySchema } from '../../base/schemas/list'
import { IListQuerySchema } from '@base/schemas/list'

export interface IRuntimeVersionSchema extends IResourceSchema {
export interface IRuntimeVersionSchema extends IResourceSchema, IHasTagSchema {
name: string
tag: string
owner?: IUserSchema
alias: string
image: string
builtImage: string
runtimeId: string
Expand Down
5 changes: 3 additions & 2 deletions console/src/pages/Dataset/DatasetVersionListCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ import { TextLink } from '@/components/Link'
import { WithCurrentAuth } from '@/api/WithAuth'
import CopyToClipboard from '@/components/CopyToClipboard/CopyToClipboard'
import Button from '@starwhale/ui/Button'
import { Shared } from '../../components/Shared'
import { Shared } from '@/components/Shared'
import { Alias } from '@/components/Alias'
import useCliMate from '@/hooks/useCliMate'
import { getAliasStr } from '@base/utils/alias'

export default function DatasetVersionListCard() {
const [page] = usePage()
Expand Down Expand Up @@ -62,7 +63,7 @@ export default function DatasetVersionListCard() {
>
{datasetVersion.name}
</TextLink>,
<Alias key='alias' alias={datasetVersion.alias} />,
<Alias key='alias' alias={getAliasStr(datasetVersion)} />,
<Shared key='shared' shared={datasetVersion.shared} isTextShow />,
datasetVersion.createdTime && formatTimestampDateTime(datasetVersion.createdTime),
datasetVersion.owner && <User user={datasetVersion.owner} />,
Expand Down
3 changes: 2 additions & 1 deletion console/src/pages/Model/ModelVersionListCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import useCliMate from '@/hooks/useCliMate'
import { getReadableStorageQuantityStr } from '@starwhale/ui/utils'
import Alias from '@/components/Alias'
import Shared from '@/components/Shared'
import { getAliasStr } from '@base/utils/alias'

export default function ModelVersionListCard() {
const [page] = usePage()
Expand Down Expand Up @@ -62,7 +63,7 @@ export default function ModelVersionListCard() {
>
<MonoText>{model.name}</MonoText>
</TextLink>,
<Alias key='alias' alias={model.alias} />,
<Alias key='alias' alias={getAliasStr(model)} />,
<Shared key='shared' shared={model.shared} isTextShow />,
model.size && getReadableStorageQuantityStr(Number(model.size)),
model.createdTime && formatTimestampDateTime(model.createdTime),
Expand Down
3 changes: 2 additions & 1 deletion console/src/pages/Runtime/RuntimeVersionListCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import Alias from '@/components/Alias'
import Shared from '@/components/Shared'
import { MonoText } from '@/components/Text'
import useCliMate from '@/hooks/useCliMate'
import { getAliasStr } from '@base/utils/alias'

export default function RuntimeVersionListCard() {
const [page] = usePage()
Expand Down Expand Up @@ -72,7 +73,7 @@ export default function RuntimeVersionListCard() {
>
<MonoText>{runtime.name}</MonoText>
</TextLink>,
<Alias key='alias' alias={runtime.alias} />,
<Alias key='alias' alias={getAliasStr(runtime)} />,
<Shared key='shared' shared={runtime.shared} isTextShow />,
runtime.createdTime && formatTimestampDateTime(runtime.createdTime),
runtime.owner && <User user={runtime.owner} />,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public class DatasetVersionViewVo {

private String alias;

private Boolean latest;

private Integer shared;

private Long createdTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public class DatasetVersionVo implements Serializable {
@JsonProperty("alias")
private String alias;

private Boolean latest;

@JsonProperty("meta")
private Object meta;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ public class ModelVersionViewVo {

private String alias;

private Boolean latest;

private Integer shared;

private List<StepSpec> stepSpecs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public class ModelVersionVo implements Serializable {
@JsonProperty("alias")
private String alias;

private Boolean latest;

@JsonProperty("tag")
private String tag;

Expand All @@ -62,6 +64,6 @@ public class ModelVersionVo implements Serializable {
private List<StepSpec> stepSpecs;

public static ModelVersionVo empty() {
return new ModelVersionVo("", "", "", "", 0L, -1L, UserVo.empty(), 0, "", List.of());
return new ModelVersionVo("", "", "", false, "", 0L, -1L, UserVo.empty(), 0, "", List.of());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public class RuntimeVersionViewVo {

private String alias;

private Boolean latest;

private Integer shared;

private Long createdTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ public class RuntimeVersionVo implements Serializable {
@JsonProperty("alias")
private String alias;

private Boolean latest;

@JsonProperty("meta")
private Object meta;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,14 @@

package ai.starwhale.mlops.common;

import ai.starwhale.mlops.domain.bundle.base.HasId;
import ai.starwhale.mlops.exception.ConvertException;
import java.util.Objects;
import java.util.regex.Pattern;
import org.springframework.stereotype.Component;

@Component
public class VersionAliasConverter implements Converter<Long, String> {

public static final String LATEST = "latest";
public static final String BUILTIN = "built-in";

@Override
public String convert(Long order) throws ConvertException {
Expand All @@ -36,14 +33,6 @@ public String convert(Long order) throws ConvertException {
return "v" + order;
}

public String convert(Long order, HasId latest, HasId entity) {
if (latest != null && Objects.equals(entity.getId(), latest.getId())) {
return VersionAliasConverter.LATEST;
} else {
return convert(order);
}
}

@Override
public Long revert(String alias) throws ConvertException {
if (!isVersionAlias(alias)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,8 @@ private Collection<DatasetViewVo> viewEntityToVo(List<DatasetVersionViewEntity>
.add(DatasetVersionViewVo.builder()
.id(idConvertor.convert(entity.getId()))
.versionName(entity.getVersionName())
.alias(versionAliasConvertor.convert(entity.getVersionOrder(), latest, entity))
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && entity.getId().equals(latest.getId()))
.createdTime(entity.getCreatedTime().getTime())
.shared(toInt(entity.getShared()))
.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,15 @@ public DatasetVersionVoConverter(IdConverter idConvertor,
this.versionAliasConvertor = versionAliasConvertor;
}

public DatasetVersionVo convert(DatasetVersionEntity entity) throws ConvertException {
return convert(entity, null);
}

public DatasetVersionVo convert(DatasetVersionEntity entity, DatasetVersionEntity latest)
throws ConvertException {
if (entity == null) {
return null;
}
return DatasetVersionVo.builder()
.id(idConvertor.convert(entity.getId()))
.alias(versionAliasConvertor.convert(entity.getVersionOrder(), latest, entity))
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && entity.getId().equals(latest.getId()))
.name(entity.getVersionName())
.tag(entity.getVersionTag())
.meta(entity.getVersionMeta())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
Expand Down Expand Up @@ -345,13 +344,7 @@ public PageInfo<ModelVersionVo> listModelVersionHistory(ModelVersionQuery query,
List<ModelVersionEntity> entities = modelVersionMapper.list(
modelId, query.getVersionName(), query.getVersionTag());
ModelVersionEntity latest = modelVersionMapper.findByLatest(modelId);
return PageUtil.toPageInfo(entities, entity -> {
ModelVersionVo vo = versionConvertor.convert(entity);
if (latest != null && Objects.equals(entity.getId(), latest.getId())) {
vo.setAlias(VersionAliasConverter.LATEST);
}
return vo;
});
return PageUtil.toPageInfo(entities, entity -> versionConvertor.convert(entity, latest));
}

public void shareModelVersion(String projectUrl, String modelUrl, String versionUrl, Boolean shared) {
Expand Down Expand Up @@ -395,7 +388,8 @@ private Collection<ModelViewVo> viewEntityToVo(List<ModelVersionViewEntity> list
.add(ModelVersionViewVo.builder()
.id(idConvertor.convert(entity.getId()))
.versionName(entity.getVersionName())
.alias(versionAliasConvertor.convert(entity.getVersionOrder(), latest, entity))
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && entity.getId().equals(latest.getId()))
.createdTime(entity.getCreatedTime().getTime())
.shared(toInt(entity.getShared()))
.builtInRuntime(entity.getBuiltInRuntime())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,14 @@ public ModelVersionVoConverter(IdConverter idConvertor,
this.jobSpecParser = jobSpecParser;
}

public ModelVersionVo convert(ModelVersionEntity entity)
public ModelVersionVo convert(ModelVersionEntity entity, ModelVersionEntity latest)
throws ConvertException {
try {
return ModelVersionVo.builder()
.id(idConvertor.convert(entity.getId()))
.name(entity.getVersionName())
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && entity.getId().equals(latest.getId()))
.tag(entity.getVersionTag())
.builtInRuntime(entity.getBuiltInRuntime())
.createdTime(entity.getCreatedTime().getTime())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,8 @@ private Collection<RuntimeViewVo> viewEntityToVo(List<RuntimeVersionViewEntity>
.add(RuntimeVersionViewVo.builder()
.id(idConvertor.convert(entity.getId()))
.versionName(entity.getVersionName())
.alias(versionAliasConvertor.convert(entity.getVersionOrder(), latest, entity))
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && entity.getId().equals(latest.getId()))
.createdTime(entity.getCreatedTime().getTime())
.shared(toInt(entity.getShared()))
.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ public RuntimeVersionVo convert(RuntimeVersionEntity entity, RuntimeVersionEntit
return RuntimeVersionVo.builder()
.id(idConvertor.convert(entity.getId()))
.name(entity.getVersionName())
.alias(versionAliasConvertor.convert(entity.getVersionOrder(), latest, entity))
.alias(versionAliasConvertor.convert(entity.getVersionOrder()))
.latest(entity.getId() != null && latest != null && entity.getId().equals(latest.getId()))
.tag(entity.getVersionTag())
.meta(entity.getVersionMeta())
.image(entity.getImage(dockerSetting.getRegistryForPull()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,6 @@ public void testConvert() {

res = versionAliasConvertor.convert(100L);
assertThat(res, is("v100"));

res = versionAliasConvertor.convert(2L, () -> 3L, () -> 3L);
assertThat(res, is("latest"));

res = versionAliasConvertor.convert(2L, () -> 3L, () -> 4L);
assertThat(res, is("v2"));
}

@Test
Expand Down
Loading

0 comments on commit bde12bb

Please sign in to comment.