Provisioning: Prevent provisioning folder errors from failing startup (#92560)

* Prevent provisioning folder errors from failing startup
* Refactor setting of dashboard provisioner
This commit is contained in:
Arati R.
2024-08-28 14:49:00 +02:00
committed by GitHub
parent 68751ed310
commit 34149c86d0
3 changed files with 69 additions and 21 deletions
+18 -17
View File
@@ -2,6 +2,7 @@ package provisioning
import (
"context"
"errors"
"fmt"
"path/filepath"
"sync"
@@ -77,9 +78,8 @@ func ProvideService(
folderService: folderService,
}
err := s.setDashboardProvisioner()
if err != nil {
return nil, fmt.Errorf("%v: %w", "Failed to create provisioner", err)
if err := s.setDashboardProvisioner(); err != nil {
return nil, err
}
return s, nil
@@ -106,30 +106,27 @@ type ProvisioningService interface {
GetAllowUIUpdatesFromConfig(name string) bool
}
// Add a public constructor for overriding service to be able to instantiate OSS as fallback
func NewProvisioningServiceImpl() *ProvisioningServiceImpl {
logger := log.New("provisioning")
return &ProvisioningServiceImpl{
log: logger,
newDashboardProvisioner: dashboards.New,
provisionDatasources: datasources.Provision,
provisionPlugins: plugins.Provision,
}
}
// Used for testing purposes
func newProvisioningServiceImpl(
newDashboardProvisioner dashboards.DashboardProvisionerFactory,
provisionDatasources func(context.Context, string, datasources.BaseDataSourceService, datasources.CorrelationsStore, org.Service) error,
provisionPlugins func(context.Context, string, pluginstore.Store, pluginsettings.Service, org.Service) error,
) *ProvisioningServiceImpl {
return &ProvisioningServiceImpl{
searchService searchV2.SearchService,
) (*ProvisioningServiceImpl, error) {
s := &ProvisioningServiceImpl{
log: log.New("provisioning"),
newDashboardProvisioner: newDashboardProvisioner,
provisionDatasources: provisionDatasources,
provisionPlugins: provisionPlugins,
Cfg: setting.NewCfg(),
searchService: searchService,
}
if err := s.setDashboardProvisioner(); err != nil {
return nil, err
}
return s, nil
}
type ProvisioningServiceImpl struct {
@@ -185,7 +182,11 @@ func (ps *ProvisioningServiceImpl) Run(ctx context.Context) error {
err := ps.ProvisionDashboards(ctx)
if err != nil {
ps.log.Error("Failed to provision dashboard", "error", err)
return err
// Consider the allow list of errors for which running the provisioning service should not
// fail. For now this includes only dashboards.ErrGetOrCreateFolder.
if !errors.Is(err, dashboards.ErrGetOrCreateFolder) {
return err
}
}
if ps.dashboardProvisioner.HasDashboardSources() {
ps.searchService.TriggerReIndex()