Просмотр исходного кода

fix: 修复渠道一致性问题

CaIon 2 лет назад
Родитель
Сommit
e2a1caba4c
3 измененных файлов с 5 добавлено и 2 удалено
  1. 2 0
      middleware/distributor.go
  2. 1 0
      model/ability.go
  3. 2 2
      model/cache.go

+ 2 - 0
middleware/distributor.go

@@ -101,10 +101,12 @@ func Distribute() func(c *gin.Context) {
 			channel, err = model.CacheGetRandomSatisfiedChannel(userGroup, modelRequest.Model)
 			if err != nil {
 				message := fmt.Sprintf("当前分组 %s 下对于模型 %s 无可用渠道", userGroup, modelRequest.Model)
+				// 如果错误,但是渠道不为空,说明是数据库一致性问题
 				if channel != nil {
 					common.SysError(fmt.Sprintf("渠道不存在:%d", channel.Id))
 					message = "数据库一致性已被破坏,请联系管理员"
 				}
+				// 如果错误,而且渠道为空,说明是没有可用渠道
 				abortWithMessage(c, http.StatusServiceUnavailable, message)
 				return
 			}

+ 1 - 0
model/ability.go

@@ -159,5 +159,6 @@ func FixAbility() (int, error) {
 			count++
 		}
 	}
+	InitChannelCache()
 	return count, nil
 }

+ 2 - 2
model/cache.go

@@ -258,8 +258,8 @@ func CacheGetRandomSatisfiedChannel(group string, model string) (*Channel, error
 			return channel, nil
 		}
 	}
-	// return the last channel if no channel is found
-	return channels[endIdx-1], nil
+	// return null if no channel is not found
+	return nil, errors.New("channel not found")
 }
 
 func CacheGetChannel(id int) (*Channel, error) {