Split Delete expired dashboard version store (#49610)
* Split Delete expired dashboard version store * Add method to fakes * Fix lint * Fix lint 2 * Use split store method in cleanup * Add tests * Remove DeleteExpiredVersions from sqlstore * Fix lint * Fix integration tests
This commit is contained in:
@@ -8,11 +8,16 @@ import (
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
)
|
||||
|
||||
const (
|
||||
maxVersionsToDeletePerBatch = 100
|
||||
maxVersionDeletionBatches = 50
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
store store
|
||||
}
|
||||
|
||||
func ProvideService(db db.DB, cfg *setting.Cfg) dashver.Service {
|
||||
func ProvideService(db db.DB) dashver.Service {
|
||||
return &Service{
|
||||
store: &sqlStore{
|
||||
db: db,
|
||||
@@ -28,3 +33,33 @@ func (s *Service) Get(ctx context.Context, query *dashver.GetDashboardVersionQue
|
||||
version.Data.Set("id", version.DashboardID)
|
||||
return version, nil
|
||||
}
|
||||
|
||||
func (s *Service) DeleteExpired(ctx context.Context, cmd *dashver.DeleteExpiredVersionsCommand) error {
|
||||
versionsToKeep := setting.DashboardVersionsToKeep
|
||||
if versionsToKeep < 1 {
|
||||
versionsToKeep = 1
|
||||
}
|
||||
|
||||
for batch := 0; batch < maxVersionDeletionBatches; batch++ {
|
||||
versionIdsToDelete, batchErr := s.store.GetBatch(ctx, cmd, maxVersionsToDeletePerBatch, versionsToKeep)
|
||||
if batchErr != nil {
|
||||
return batchErr
|
||||
}
|
||||
|
||||
if len(versionIdsToDelete) < 1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
deleted, err := s.store.DeleteBatch(ctx, cmd, versionIdsToDelete)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd.DeletedRows += deleted
|
||||
|
||||
if deleted < int64(maxVersionsToDeletePerBatch) {
|
||||
break
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user