flipped-aurora/gin-vue-admin · error
删除不存在的包记录失败!
Error message
删除不存在的包记录失败!
What it means
The final sync step deletes DB package records whose directories no longer exist on disk (deleteEntityIDs), then filters them out of the returned list. This error wraps a failed batch DELETE of those stale rows.
Source
Thrown at server/service/system/auto_code_package.go:261
existingPackageNames[server[i].PackageName] = true
}
for i := 0; i < len(plugin); i++ {
existingPackageNames[plugin[i].PackageName] = true
}
// 找出需要删除的数据库记录
deleteEntityIDs := []uint{}
for i := 0; i < len(entities); i++ {
if !existingPackageNames[entities[i].PackageName] {
deleteEntityIDs = append(deleteEntityIDs, entities[i].ID)
}
}
// 删除数据库中不存在文件的记录
if len(deleteEntityIDs) > 0 {
err = global.GVA_DB.WithContext(ctx).Delete(&model.SysAutoCodePackage{}, deleteEntityIDs).Error
if err != nil {
return nil, errors.Wrap(err, "删除不存在的包记录失败!")
}
// 从返回结果中移除已删除的记录
filteredEntities := []model.SysAutoCodePackage{}
for i := 0; i < len(entities); i++ {
if existingPackageNames[entities[i].PackageName] {
filteredEntities = append(filteredEntities, entities[i])
}
}
entities = filteredEntities
}
return entities, nil
}
// Templates 获取所有模版文件夹
// @author: [SliverHorn](https://github.com/SliverHorn)
func (s *autoCodePackage) Templates(ctx context.Context) ([]string, error) {
templates := make([]string, 0)View on GitHub (pinned to 3136500ef3)
Solutions
- Inspect the wrapped inner error for lock/FK/connectivity cause
- Restore DB connectivity and retry the sync
- Remove or relax FK constraints referencing sys_auto_code_packages, or delete dependents first
- Chunk deleteEntityIDs into smaller batches to reduce lock scope
Example fix
// before: one large delete can lock too long
err = global.GVA_DB.WithContext(ctx).Delete(&model.SysAutoCodePackage{}, deleteEntityIDs).Error
// after: chunked delete
for i := 0; i < len(deleteEntityIDs); i += 100 {
end := i + 100
if end > len(deleteEntityIDs) {
end = len(deleteEntityIDs)
}
if err = global.GVA_DB.WithContext(ctx).
Delete(&model.SysAutoCodePackage{}, deleteEntityIDs[i:end]).Error; err != nil {
return nil, errors.Wrap(err, "删除不存在的包记录失败!")
}
} Defensive patterns
Strategy: retry
Try / catch
err := global.GVA_DB.WithContext(ctx).Delete(&model.SysAutoCodePackage{}, deleteEntityIDs).Error
if err != nil {
var mysqlErr *mysql.MySQLError
if errors.As(err, &mysqlErr) && (mysqlErr.Number == 1213 || mysqlErr.Number == 1205) {
time.Sleep(2 * time.Second)
err = global.GVA_DB.WithContext(ctx).Delete(&model.SysAutoCodePackage{}, deleteEntityIDs).Error
}
if err != nil {
return nil, errors.Wrap(err, "删除不存在的包记录失败!")
}
} Prevention
- Delete stale records in small chunks to reduce lock contention
- Check for foreign keys referencing package IDs before bulk cleanup
- Retry transient lock/deadlock errors with backoff
- Run the sync endpoint during low-traffic windows
When it happens
Trigger: Calling autoCodePackage.All when directories were removed on disk and the batch delete of their DB rows fails — DB connection lost mid-sync, table missing, lock timeout, or foreign-key restriction from related auto-code records.
Common situations: Long-running sync hitting a lock timeout on many stale rows; DB restarted during reconciliation; FK constraint from another table referencing package IDs; read-only database.
Related errors
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/cced321a6b5d9a6c.
Report an issue: GitHub.