fix: 删除group时内存数据一致
This commit is contained in:
@@ -447,31 +447,30 @@ func (s *Server) DeleteGroup(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := tx.Commit().Error; err != nil {
|
// Clean up memory store (Redis) within the transaction to ensure atomicity
|
||||||
tx.Rollback()
|
// If Redis cleanup fails, the entire transaction will be rolled back
|
||||||
response.Error(c, app_errors.ErrDatabase)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up memory store (Redis) - this is done after successful DB transaction
|
|
||||||
// to maintain consistency. If this fails, the keys will be cleaned up during
|
|
||||||
// the next key pool reload.
|
|
||||||
if len(keyIDs) > 0 {
|
if len(keyIDs) > 0 {
|
||||||
if err := s.KeyService.KeyProvider.RemoveKeysFromStore(uint(id), keyIDs); err != nil {
|
if err := s.KeyService.KeyProvider.RemoveKeysFromStore(uint(id), keyIDs); err != nil {
|
||||||
|
tx.Rollback()
|
||||||
logrus.WithFields(logrus.Fields{
|
logrus.WithFields(logrus.Fields{
|
||||||
"groupID": id,
|
"groupID": id,
|
||||||
"keyCount": len(keyIDs),
|
"keyCount": len(keyIDs),
|
||||||
"error": err,
|
"error": err,
|
||||||
}).Error("Failed to remove keys from memory store")
|
}).Error("Failed to remove keys from memory store, rolling back transaction")
|
||||||
|
|
||||||
response.Success(c, gin.H{
|
response.Error(c, app_errors.NewAPIError(app_errors.ErrDatabase,
|
||||||
"message": "Group and associated keys deleted successfully",
|
"Failed to delete group: unable to clean up cache"))
|
||||||
"warning": "Some keys may remain in memory cache and will be cleaned up during next restart",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Commit the transaction only if both DB and Redis operations succeed
|
||||||
|
if err := tx.Commit().Error; err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
response.Error(c, app_errors.ErrDatabase)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
response.Success(c, gin.H{"message": "Group and associated keys deleted successfully"})
|
response.Success(c, gin.H{"message": "Group and associated keys deleted successfully"})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -474,7 +474,7 @@ func (p *KeyProvider) RemoveKeysFromStore(groupID uint, keyIDs []uint) error {
|
|||||||
"groupID": groupID,
|
"groupID": groupID,
|
||||||
"error": err,
|
"error": err,
|
||||||
}).Error("Failed to delete active keys list")
|
}).Error("Failed to delete active keys list")
|
||||||
// 继续执行hash删除,因为即使列表删除失败,hash仍然需要清理
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第二步:批量删除所有相关的key hash
|
// 第二步:批量删除所有相关的key hash
|
||||||
@@ -485,7 +485,6 @@ func (p *KeyProvider) RemoveKeysFromStore(groupID uint, keyIDs []uint) error {
|
|||||||
"keyID": keyID,
|
"keyID": keyID,
|
||||||
"error": err,
|
"error": err,
|
||||||
}).Error("Failed to delete key hash")
|
}).Error("Failed to delete key hash")
|
||||||
// 继续删除其他keys,不因单个失败而中断
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user