Skip to content

Commit

Permalink
fix: release change failed if metadata.json not exists (#93)
Browse files Browse the repository at this point in the history
* fix: release change failed if metadata.json not exists

* fix: release change failed if metadata.json not exists
  • Loading branch information
AlkaidChan committed Apr 25, 2024
1 parent 2722af6 commit 94cea1a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
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 {
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
}

0 comments on commit 94cea1a

Please sign in to comment.