Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: release change failed if metadata.json not exists #93

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions client/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,17 +123,17 @@ type Function func() error
// compareRelease 对比当前服务版本
// 返回值: 是否跳过本次版本变更事件(本地版本和事件版本一致), 错误信息
func (r *Release) compareRelease() (bool, error) {
lastMetadata, err := eventmeta.GetLatestMetadataFromFile(r.AppDir)
lastMetadata, exist, err := eventmeta.GetLatestMetadataFromFile(r.AppDir)
if err != nil {
// 如果 metadata 文件不存在,说明没有执行过 pull 操作
if os.IsNotExist(err) {
logger.Warn("can not find metadata file, maybe you should exec pull command first", logger.ErrAttr(err))
return false, nil
}
logger.Error("get metadata file failed", logger.ErrAttr(err))
return false, err

} else if lastMetadata.ReleaseID == r.ReleaseID {
}
// 如果 metadata 文件不存在,说明没有执行过 pull 操作
if !exist {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 这里直接使用error判断是否就可以, 不需要单独翻译一个exist.
  • 不存在是很正常的行为, 感觉不需要打印或者debug就好

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

提供 Unwrap 接口, 上层可以通过Error判断最近, 可后面优化

logger.Warn("can not find metadata file, maybe you should exec pull command first")
return false, nil
}
if lastMetadata.ReleaseID == r.ReleaseID {
r.AppMate.CurrentReleaseID = r.ReleaseID
logger.Info("current release is consistent with the received release, skip", slog.Any("releaseID", r.ReleaseID))
return true, nil
Expand Down Expand Up @@ -352,7 +352,7 @@ func (r *Release) Execute(steps ...Function) error {
// 一定要在该位置
// 不然会导致current_release_id是0的问题
var skip bool
if r.ClientMode != sfs.Pull {
if r.ClientMode == sfs.Watch {
skip, err = r.compareRelease()
if err != nil {
return err
Expand Down
16 changes: 10 additions & 6 deletions internal/util/eventmeta/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,10 @@ func AppendMetadataToFile(tempDir string, metadata *EventMeta) error {
}

// GetLatestMetadataFromFile get latest metadata from file.
func GetLatestMetadataFromFile(tempDir string) (*EventMeta, error) {
// Return metadata, exists, error
func GetLatestMetadataFromFile(tempDir string) (*EventMeta, bool, error) {
if tempDir == "" {
return nil, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
return nil, false, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
sfs.SecondaryError{SpecificFailedReason: sfs.DataEmpty,
Err: errors.New("metadata file path can not be empty")})
}
Expand All @@ -106,7 +107,10 @@ func GetLatestMetadataFromFile(tempDir string) (*EventMeta, error) {

metaFile, err := os.Open(metaFilePath)
if err != nil {
return nil, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
if os.IsNotExist(err) {
return nil, false, nil
}
return nil, false, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
sfs.SecondaryError{SpecificFailedReason: sfs.OpenFileFailed,
Err: err})
}
Expand All @@ -117,17 +121,17 @@ func GetLatestMetadataFromFile(tempDir string) (*EventMeta, error) {
lastLine = scanner.Text()
}
if err := scanner.Err(); err != nil {
return nil, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
return nil, false, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
sfs.SecondaryError{SpecificFailedReason: sfs.ReadFileFailed,
Err: err})
}

metadata := &EventMeta{}
if err := json.Unmarshal([]byte(lastLine), metadata); err != nil {
return nil, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
return nil, false, sfs.WrapPrimaryError(sfs.UpdateMetadataFailed,
sfs.SecondaryError{SpecificFailedReason: sfs.SerializationFailed,
Err: fmt.Errorf("unmarshal metadata failed, err: %s", err.Error())})
}

return metadata, nil
return metadata, true, nil
}
Loading