mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-10 23:11:40 +08:00
@@ -282,6 +282,7 @@ const (
|
||||
driverModuleVersionInspectLimit = 30
|
||||
driverModuleVersionListMaxSize = 4 << 20
|
||||
driverRecentVersionLimit = 5
|
||||
driverModuleVersionFetchLimit = 64
|
||||
driverVersionWarmupMinInterval = 30 * time.Second
|
||||
driverBundleIndexMaxSize = 1 << 20
|
||||
driverManifestMaxSize = 2 << 20
|
||||
@@ -393,7 +394,8 @@ var driverGoModuleAliasPathMap = map[string][]string{
|
||||
}
|
||||
|
||||
var driverExtraHistoryLimitMap = map[string]int{
|
||||
"mongodb": 10,
|
||||
"mongodb": 10,
|
||||
"tdengine": 30,
|
||||
}
|
||||
|
||||
var fallbackRecentDriverVersionsMap = map[string][]goModuleVersionMeta{
|
||||
@@ -414,6 +416,35 @@ var fallbackRecentDriverVersionsMap = map[string][]goModuleVersionMeta{
|
||||
{Version: "1.17.0"},
|
||||
{Version: "1.16.1"},
|
||||
},
|
||||
"tdengine": {
|
||||
{Version: "3.8.0"},
|
||||
{Version: "3.7.8"},
|
||||
{Version: "3.7.7"},
|
||||
{Version: "3.7.6"},
|
||||
{Version: "3.7.5"},
|
||||
{Version: "3.7.4"},
|
||||
{Version: "3.7.3"},
|
||||
{Version: "3.7.2"},
|
||||
{Version: "3.7.1"},
|
||||
{Version: "3.7.0"},
|
||||
{Version: "3.6.0"},
|
||||
{Version: "3.5.8"},
|
||||
{Version: "3.5.7"},
|
||||
{Version: "3.5.6"},
|
||||
{Version: "3.5.5"},
|
||||
{Version: "3.5.4"},
|
||||
{Version: "3.5.3"},
|
||||
{Version: "3.5.2"},
|
||||
{Version: "3.5.1"},
|
||||
{Version: "3.5.0"},
|
||||
{Version: "3.3.1"},
|
||||
{Version: "3.1.0"},
|
||||
{Version: "3.0.4"},
|
||||
{Version: "3.0.3"},
|
||||
{Version: "3.0.2"},
|
||||
{Version: "3.0.1"},
|
||||
{Version: "3.0.0"},
|
||||
},
|
||||
}
|
||||
|
||||
func (a *App) SelectDriverDownloadDirectory(currentDir string) connection.QueryResult {
|
||||
@@ -1851,8 +1882,13 @@ func resolveRecentDriverVersionMetas(driverType string, limit int) []goModuleVer
|
||||
}
|
||||
modulePaths := resolveDriverGoModulePaths(normalized)
|
||||
if len(modulePaths) > 0 {
|
||||
result := make([]goModuleVersionMeta, 0, limit)
|
||||
seen := make(map[string]struct{}, limit)
|
||||
extraHistoryLimit := resolveDriverExtraHistoryLimit(normalized)
|
||||
primaryLimit := limit + extraHistoryLimit
|
||||
if primaryLimit <= 0 {
|
||||
primaryLimit = limit
|
||||
}
|
||||
result := make([]goModuleVersionMeta, 0, primaryLimit)
|
||||
seen := make(map[string]struct{}, primaryLimit)
|
||||
appendUnique := func(values []goModuleVersionMeta, maxAppend int) {
|
||||
if maxAppend <= 0 {
|
||||
return
|
||||
@@ -1877,9 +1913,9 @@ func resolveRecentDriverVersionMetas(driverType string, limit int) []goModuleVer
|
||||
}
|
||||
}
|
||||
|
||||
appendUnique(fetchGoModuleVersionMetasCached(modulePaths[0]), limit)
|
||||
appendUnique(fetchGoModuleVersionMetasCached(modulePaths[0]), primaryLimit)
|
||||
|
||||
extraLimit := resolveDriverExtraHistoryLimit(normalized)
|
||||
extraLimit := extraHistoryLimit
|
||||
for _, modulePath := range modulePaths[1:] {
|
||||
if extraLimit <= 0 {
|
||||
break
|
||||
@@ -2105,8 +2141,8 @@ func fetchGoModuleVersionMetas(modulePath string) ([]goModuleVersionMeta, error)
|
||||
right := "v" + versions[j]
|
||||
return semver.Compare(left, right) > 0
|
||||
})
|
||||
if len(versions) > driverRecentVersionLimit {
|
||||
versions = versions[:driverRecentVersionLimit]
|
||||
if len(versions) > driverModuleVersionFetchLimit {
|
||||
versions = versions[:driverModuleVersionFetchLimit]
|
||||
}
|
||||
|
||||
metas := make([]goModuleVersionMeta, 0, len(versions))
|
||||
|
||||
@@ -162,6 +162,76 @@ func TestDownloadDriverPackageRejectsUnsupportedMongoVersion(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveRecentDriverVersionMetasIncludesHistoricalTDengineVersionsFromCache(t *testing.T) {
|
||||
seedGoModuleVersionCache(t, "github.com/taosdata/driver-go/v3", []string{
|
||||
"3.8.0",
|
||||
"3.7.8",
|
||||
"3.7.7",
|
||||
"3.7.6",
|
||||
"3.7.5",
|
||||
"3.7.4",
|
||||
"3.7.3",
|
||||
"3.7.2",
|
||||
"3.7.1",
|
||||
"3.7.0",
|
||||
"3.6.0",
|
||||
"3.5.8",
|
||||
"3.5.7",
|
||||
"3.5.6",
|
||||
"3.5.5",
|
||||
"3.5.4",
|
||||
"3.5.3",
|
||||
"3.5.2",
|
||||
"3.5.1",
|
||||
"3.5.0",
|
||||
"3.3.1",
|
||||
"3.1.0",
|
||||
"3.0.4",
|
||||
"3.0.3",
|
||||
"3.0.2",
|
||||
"3.0.1",
|
||||
"3.0.0",
|
||||
})
|
||||
|
||||
metas := resolveRecentDriverVersionMetas("tdengine", driverRecentVersionLimit)
|
||||
versions := make([]string, 0, len(metas))
|
||||
for _, meta := range metas {
|
||||
versions = append(versions, meta.Version)
|
||||
}
|
||||
|
||||
if !containsVersion(versions, "3.5.8") {
|
||||
t.Fatalf("expected tdengine historical version 3.5.8 to remain selectable, got %v", versions)
|
||||
}
|
||||
if !containsVersion(versions, "3.3.1") {
|
||||
t.Fatalf("expected tdengine historical version 3.3.1 to remain selectable, got %v", versions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveRecentDriverVersionMetasFallsBackToHistoricalTDengineMatrix(t *testing.T) {
|
||||
driverModuleVersionMu.Lock()
|
||||
original := driverModuleVersionMap
|
||||
driverModuleVersionMap = map[string]goModuleVersionListCacheEntry{}
|
||||
driverModuleVersionMu.Unlock()
|
||||
t.Cleanup(func() {
|
||||
driverModuleVersionMu.Lock()
|
||||
driverModuleVersionMap = original
|
||||
driverModuleVersionMu.Unlock()
|
||||
})
|
||||
|
||||
metas := resolveRecentDriverVersionMetas("tdengine", driverRecentVersionLimit)
|
||||
versions := make([]string, 0, len(metas))
|
||||
for _, meta := range metas {
|
||||
versions = append(versions, meta.Version)
|
||||
}
|
||||
|
||||
if !containsVersion(versions, "3.5.8") {
|
||||
t.Fatalf("expected tdengine fallback list to include 3.5.8, got %v", versions)
|
||||
}
|
||||
if !containsVersion(versions, "3.3.1") {
|
||||
t.Fatalf("expected tdengine fallback list to include 3.3.1, got %v", versions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldForceSourceBuildForResolvedDownload(t *testing.T) {
|
||||
if !shouldForceSourceBuildForResolvedDownload("mongodb", "1.17.4", "builtin://activate/mongodb?channel=history&version=1.17.4") {
|
||||
t.Fatal("expected mongodb v1 builtin install to keep source build mode")
|
||||
@@ -308,6 +378,48 @@ func cloneInt64Map(src map[string]int64) map[string]int64 {
|
||||
return cloned
|
||||
}
|
||||
|
||||
func seedGoModuleVersionCache(t *testing.T, modulePath string, versions []string) {
|
||||
t.Helper()
|
||||
|
||||
driverModuleVersionMu.Lock()
|
||||
original := make(map[string]goModuleVersionListCacheEntry, len(driverModuleVersionMap))
|
||||
for key, value := range driverModuleVersionMap {
|
||||
original[key] = goModuleVersionListCacheEntry{
|
||||
LoadedAt: value.LoadedAt,
|
||||
Versions: append([]goModuleVersionMeta(nil), value.Versions...),
|
||||
Err: value.Err,
|
||||
}
|
||||
}
|
||||
driverModuleVersionMap[modulePath] = goModuleVersionListCacheEntry{
|
||||
LoadedAt: time.Now(),
|
||||
Versions: mapVersionsToMetas(versions),
|
||||
}
|
||||
driverModuleVersionMu.Unlock()
|
||||
|
||||
t.Cleanup(func() {
|
||||
driverModuleVersionMu.Lock()
|
||||
driverModuleVersionMap = original
|
||||
driverModuleVersionMu.Unlock()
|
||||
})
|
||||
}
|
||||
|
||||
func mapVersionsToMetas(versions []string) []goModuleVersionMeta {
|
||||
result := make([]goModuleVersionMeta, 0, len(versions))
|
||||
for _, version := range versions {
|
||||
result = append(result, goModuleVersionMeta{Version: version})
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func containsVersion(versions []string, target string) bool {
|
||||
for _, version := range versions {
|
||||
if version == target {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func chdirTemp(t *testing.T) {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user