Skip to content

fix: improve rollback handling logic#192

Merged
mhduiy merged 1 commit into
linuxdeepin:masterfrom
mhduiy:reboot
Jul 9, 2025
Merged

fix: improve rollback handling logic#192
mhduiy merged 1 commit into
linuxdeepin:masterfrom
mhduiy:reboot

Conversation

@mhduiy
Copy link
Copy Markdown
Contributor

@mhduiy mhduiy commented Jul 9, 2025

  1. Modified ConfirmRollback to handle rollback synchronously instead of in goroutine
  2. Added Reboot field to ostreeRollbackData struct to track reboot requirement
  3. Implemented osTreeNeedRebootAfterRollback to properly determine reboot need
  4. Updated osTreeParseRollbackData to return additional field information
  5. Added slices package import for field checking

The changes improve rollback reliability by:

  1. Making rollback operations synchronous to properly handle errors
  2. Adding explicit reboot tracking instead of relying on auto-rollback status
  3. Maintaining backward compatibility with older ostree versions
  4. Providing better field-level data access from ostree responses

fix: 改进回滚处理逻辑

  1. 修改 ConfirmRollback 以同步方式处理回滚而非使用 goroutine
  2. 在 ostreeRollbackData 结构体中添加 Reboot 字段以跟踪重启需求
  3. 实现 osTreeNeedRebootAfterRollback 来正确判断是否需要重启
  4. 更新 osTreeParseRollbackData 以返回额外的字段信息
  5. 添加 slices 包导入用于字段检查

这些改进通过以下方式提高了回滚可靠性:

  1. 同步执行回滚操作以正确处理错误
  2. 添加显式的重启跟踪而非依赖自动回滚状态
  3. 保持与旧版 ostree 的兼容性
  4. 提供更好的字段级数据访问能力

@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

代码审查意见:

  1. 错误处理

    • osTreeRollback函数中,如果osTreeNeedRebootAfterRollback()返回错误,应该立即返回,而不是继续执行后续代码。这可能会导致未定义的行为。
    • osTreeParseRollbackData函数中,如果json.Unmarshal失败,应该记录错误并返回,而不是继续执行。
  2. 并发问题

    • ConfirmRollback函数中,go关键字用于启动一个goroutine来执行回滚操作。如果这个goroutine在执行过程中发生错误,错误信息不会被捕获和处理。应该使用defer语句来确保错误被正确处理。
  3. 代码重复

    • osTreeNeedRebootAfterRollback函数和osTreeIsAutoRollback函数中存在重复的代码,可以将这部分代码提取到一个单独的函数中,以减少代码重复。
  4. 日志记录

    • osTreeRollback函数中,如果osTreeNeedRebootAfterRollback()返回错误,应该记录错误信息。但是,如果osTreeNeedRebootAfterRollback()成功执行,但没有返回错误,那么osTreeRollback函数中的错误处理逻辑就不会被执行。应该确保在所有可能的路径上都有错误处理。
  5. 类型转换

    • osTreeCanRollbackosTreeNeedRebootAfterRollback函数中,将map[string]interface{}转换为ostreeRollbackData结构体时,应该检查转换后的结构体是否为空,以避免潜在的空指针引用。
  6. 代码可读性

    • osTreeNeedRebootAfterRollback函数中,添加注释来解释为什么需要将map[string]interface{}转换为ostreeRollbackData结构体,以及如何处理旧版本的情况。
  7. 性能优化

    • osTreeParseRollbackData函数中,json.Marshaljson.Unmarshal操作可能会影响性能。如果这些操作在性能敏感的路径上频繁调用,应该考虑优化这些操作。
  8. 安全性

    • 没有明显的安全问题,但是应该确保所有外部输入都经过适当的验证和清理,以防止注入攻击。

总体来说,代码的改进主要集中在错误处理、并发问题、代码重复、日志记录、类型转换、代码可读性、性能优化和安全性等方面。这些改进可以提高代码的健壮性、可维护性和性能。

1. Modified ConfirmRollback to handle rollback synchronously instead of
in goroutine
2. Added Reboot field to ostreeRollbackData struct to track reboot
requirement
3. Implemented osTreeNeedRebootAfterRollback to properly determine
reboot need
4. Updated osTreeParseRollbackData to return additional field
information
5. Added slices package import for field checking

The changes improve rollback reliability by:
1. Making rollback operations synchronous to properly handle errors
2. Adding explicit reboot tracking instead of relying on auto-rollback
status
3. Maintaining backward compatibility with older ostree versions
4. Providing better field-level data access from ostree responses

fix: 改进回滚处理逻辑

1. 修改 ConfirmRollback 以同步方式处理回滚而非使用 goroutine
2. 在 ostreeRollbackData 结构体中添加 Reboot 字段以跟踪重启需求
3. 实现 osTreeNeedRebootAfterRollback 来正确判断是否需要重启
4. 更新 osTreeParseRollbackData 以返回额外的字段信息
5. 添加 slices 包导入用于字段检查

这些改进通过以下方式提高了回滚可靠性:
1. 同步执行回滚操作以正确处理错误
2. 添加显式的重启跟踪而非依赖自动回滚状态
3. 保持与旧版 ostree 的兼容性
4. 提供更好的字段级数据访问能力
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: fly602, mhduiy

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@mhduiy mhduiy merged commit f5d69ef into linuxdeepin:master Jul 9, 2025
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants