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

  1. Inspect the wrapped inner error for lock/FK/connectivity cause
  2. Restore DB connectivity and retry the sync
  3. Remove or relax FK constraints referencing sys_auto_code_packages, or delete dependents first
  4. 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

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.