diff --git a/pkg/cloudcommon/db/proxy/proxysetting.go b/pkg/cloudcommon/db/proxy/proxysetting.go index e466c4389b..912966e922 100644 --- a/pkg/cloudcommon/db/proxy/proxysetting.go +++ b/pkg/cloudcommon/db/proxy/proxysetting.go @@ -66,6 +66,23 @@ func (ps *SProxySetting) HttpTransportProxyFunc() httputils.TransportProxyFunc { } } +func (ps *SProxySetting) ValidateDeleteCondition(ctx context.Context) error { + for _, man := range referrersMen { + t := man.TableSpec().Instance() + n, err := t.Query(). + Equals("proxy_setting_id", ps.Id). + CountWithError() + if err != nil { + return httperrors.NewInternalServerError("get proxysetting refcount fail %s", err) + } + if n > 0 { + return httperrors.NewResourceBusyError("proxysetting %s is still referred to by %d %s", + ps.Id, n, man.KeywordPlural()) + } + } + return nil +} + func (man *SProxySettingManager) InitializeData() error { _, err := man.FetchById(proxyapi.ProxySettingId_DIRECT) if err == nil { @@ -88,3 +105,9 @@ func (man *SProxySettingManager) InitializeData() error { } return nil } + +var referrersMen []db.IModelManager + +func RegisterReferrer(man db.IModelManager) { + referrersMen = append(referrersMen, man) +}