Revamp plugin loading error management (#85939)

This commit is contained in:
Andres Martinez Gotor
2024-04-11 16:18:04 +02:00
committed by GitHub
parent bb56f4a605
commit ab5a065256
17 changed files with 298 additions and 161 deletions

View File

@ -20,7 +20,6 @@ import (
"github.com/grafana/grafana/pkg/plugins/manager/registry"
"github.com/grafana/grafana/pkg/plugins/manager/signature"
"github.com/grafana/grafana/pkg/plugins/pfs"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginerrs"
)
// ExternalServiceRegistration implements an InitializeFunc for registering external services.
@ -105,15 +104,12 @@ func ReportBuildMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin,
// SignatureValidation implements a ValidateFunc for validating plugin signatures.
type SignatureValidation struct {
signatureValidator signature.Validator
errs pluginerrs.SignatureErrorTracker
log log.Logger
}
// SignatureValidationStep returns a new ValidateFunc for validating plugin signatures.
func SignatureValidationStep(signatureValidator signature.Validator,
sigErr pluginerrs.SignatureErrorTracker) validation.ValidateFunc {
func SignatureValidationStep(signatureValidator signature.Validator) validation.ValidateFunc {
sv := &SignatureValidation{
errs: sigErr,
signatureValidator: signatureValidator,
log: log.New("plugins.signature.validation"),
}
@ -121,23 +117,19 @@ func SignatureValidationStep(signatureValidator signature.Validator,
}
// Validate validates the plugin signature. If a signature error is encountered, the error is recorded with the
// pluginerrs.SignatureErrorTracker.
// pluginerrs.ErrorTracker.
func (v *SignatureValidation) Validate(ctx context.Context, p *plugins.Plugin) error {
err := v.signatureValidator.ValidateSignature(p)
if err != nil {
var sigErr *plugins.SignatureError
var sigErr *plugins.Error
if errors.As(err, &sigErr) {
v.log.Warn("Skipping loading plugin due to problem with signature",
"pluginId", p.ID, "status", sigErr.SignatureStatus)
p.SignatureError = sigErr
v.errs.Record(ctx, sigErr)
p.Error = sigErr
}
return err
}
// clear plugin error if a pre-existing error has since been resolved
v.errs.Clear(ctx, p.ID)
return nil
}