mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2026-11-11 13:10:49 +08:00
* feat(alias): support load balance * feat(alias): support storage match for load balance * feat(patch): add alias addition upgrade patch * fix bugs * fix(op/balance): optimize compatibility * chore: change default read conflict policy * feat(alias): refactor Alias initialization and enhance path handling * feat(alias): enhance object masking and add support for operation restrictions * feat(alias): enhance object masking * feat(fs): add permission checks * improve parsing * update object masks * feat(fs): enhance virtual file handling * feat(storage): enhance virtual file retrieval and path handling * refactor(alias): rename path handling functions for clarity and consistency * fix(alias): update path handling in Other method to use balanced path * fix bug * feat(alias): add file size validation * feat(alias): add hash consistency check * 移除哈希合并, * fix(alias): wrong behavior for all_strict/deterministic_or_all * Revert "fix(alias): wrong behavior for all_strict/deterministic_or_all" This reverts commit f001f2dcd76d5711d2b1f44d04edf646f32c75a7. * fix(alias): wrong behavior for all_strict/deterministic_or_all * feat(alias): support part-based read load balance * fix(alias): list panic when leak conflict path * fix(alias): remove Other load balance * fix(alias): 修复 Link 方法中 resultLink 的返回类型和内容复制问题 * fix(alias): 更好的下载并发? * chore(alias): all tips * fix(alias): moving paths mismatch --------- Co-authored-by: j2rong4cn <j2rong@qq.com> Co-authored-by: ShenLin <773933146@qq.com>
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/OpenListTeam/OpenList/v4/internal/bootstrap/patch"
|
|
"github.com/OpenListTeam/OpenList/v4/internal/conf"
|
|
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
|
|
)
|
|
|
|
var LastLaunchedVersion = ""
|
|
|
|
func safeCall(v string, i int, f func()) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
utils.Log.Errorf("Recovered from patch (version: %s, index: %d) panic: %v", v, i, r)
|
|
}
|
|
}()
|
|
|
|
f()
|
|
}
|
|
|
|
func getVersion(v string) (major, minor, patchNum int, err error) {
|
|
_, err = fmt.Sscanf(v, "v%d.%d.%d", &major, &minor, &patchNum)
|
|
return major, minor, patchNum, err
|
|
}
|
|
|
|
func compareVersion(majorA, minorA, patchNumA, majorB, minorB, patchNumB int) bool {
|
|
if majorA != majorB {
|
|
return majorA > majorB
|
|
}
|
|
if minorA != minorB {
|
|
return minorA > minorB
|
|
}
|
|
if patchNumA != patchNumB {
|
|
return patchNumA > patchNumB
|
|
}
|
|
return true
|
|
}
|
|
|
|
func InitUpgradePatch() {
|
|
if !strings.HasPrefix(conf.Version, "v") {
|
|
for _, vp := range patch.UpgradePatches {
|
|
for i, p := range vp.Patches {
|
|
safeCall(vp.Version, i, p)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
if LastLaunchedVersion == conf.Version {
|
|
return
|
|
}
|
|
if LastLaunchedVersion == "" {
|
|
LastLaunchedVersion = "v0.0.0"
|
|
}
|
|
major, minor, patchNum, err := getVersion(LastLaunchedVersion)
|
|
if err != nil {
|
|
utils.Log.Warnf("Failed to parse last launched version %s: %v, skipping all patches and rewrite last launched version", LastLaunchedVersion, err)
|
|
return
|
|
}
|
|
for _, vp := range patch.UpgradePatches {
|
|
ma, mi, pn, err := getVersion(vp.Version)
|
|
if err != nil {
|
|
utils.Log.Errorf("Skip invalid version %s patches: %v", vp.Version, err)
|
|
continue
|
|
}
|
|
if compareVersion(ma, mi, pn, major, minor, patchNum) {
|
|
for i, p := range vp.Patches {
|
|
safeCall(vp.Version, i, p)
|
|
}
|
|
}
|
|
}
|
|
}
|