Parcourir la source

fix(channel_cache): 修复总权重小于等于0时的渠道选择逻辑

creamlike1024 il y a 4 mois
Parent
commit
90f1dafb55
1 fichiers modifiés avec 12 ajouts et 2 suppressions
  1. 12 2
      model/channel_cache.go

+ 12 - 2
model/channel_cache.go

@@ -167,9 +167,19 @@ func GetRandomSatisfiedChannel(group string, model string, retry int) (*Channel,
 	// Calculate the total weight of all channels up to endIdx
 	totalWeight := sumWeight * smoothingFactor
 
-	// totalWeight 小于等于0时,设置为1,选择第一个渠道
+	// totalWeight 小于等于0时,给每个渠道加100的权重,然后进行随机选择
 	if totalWeight <= 0 {
-		totalWeight = 1
+		if len(targetChannels) > 0 {
+			totalWeight = len(targetChannels) * 100
+			randomWeight := rand.Intn(totalWeight)
+			for _, channel := range targetChannels {
+				randomWeight -= 100
+				if randomWeight <= 0 {
+					return channel, nil
+				}
+			}
+		}
+		return nil, errors.New("no available channels")
 	}
 	// Generate a random value in the range [0, totalWeight)
 	randomWeight := rand.Intn(totalWeight)