MCPcopy Create free account
hub / github.com/tbphp/gpt-load / handleSuccess

Method handleSuccess

internal/keypool/provider.go:142–186  ·  view source on GitHub ↗
(keyID uint, keyHashKey, activeKeysListKey string)

Source from the content-addressed store, hash-verified

140}
141
142func (p *KeyProvider) handleSuccess(keyID uint, keyHashKey, activeKeysListKey string) error {
143 keyDetails, err := p.store.HGetAll(keyHashKey)
144 if err != nil {
145 return fmt.Errorf("failed to get key details from store: %w", err)
146 }
147
148 failureCount, _ := strconv.ParseInt(keyDetails["failure_count"], 10, 64)
149 isActive := keyDetails["status"] == models.KeyStatusActive
150
151 if failureCount == 0 && isActive {
152 return nil
153 }
154
155 return p.executeTransactionWithRetry(func(tx *gorm.DB) error {
156 var key models.APIKey
157 if err := tx.Set("gorm:query_option", "FOR UPDATE").First(&key, keyID).Error; err != nil {
158 return fmt.Errorf("failed to lock key %d for update: %w", keyID, err)
159 }
160
161 updates := map[string]any{"failure_count": 0}
162 if !isActive {
163 updates["status"] = models.KeyStatusActive
164 }
165
166 if err := tx.Model(&key).Updates(updates).Error; err != nil {
167 return fmt.Errorf("failed to update key in DB: %w", err)
168 }
169
170 if err := p.store.HSet(keyHashKey, updates); err != nil {
171 return fmt.Errorf("failed to update key details in store: %w", err)
172 }
173
174 if !isActive {
175 logrus.WithField("keyID", keyID).Debug("Key has recovered and is being restored to active pool.")
176 if err := p.store.LRem(activeKeysListKey, 0, keyID); err != nil {
177 return fmt.Errorf("failed to LRem key before LPush on recovery: %w", err)
178 }
179 if err := p.store.LPush(activeKeysListKey, keyID); err != nil {
180 return fmt.Errorf("failed to LPush key back to active list: %w", err)
181 }
182 }
183
184 return nil
185 })
186}
187
188func (p *KeyProvider) handleFailure(apiKey *models.APIKey, group *models.Group, keyHashKey, activeKeysListKey string) error {
189 keyDetails, err := p.store.HGetAll(keyHashKey)

Callers 1

UpdateStatusMethod · 0.95

Calls 6

HGetAllMethod · 0.65
SetMethod · 0.65
HSetMethod · 0.65
LRemMethod · 0.65
LPushMethod · 0.65

Tested by

no test coverage detected