Skip to content

Commit aba75eb

Browse files
authored
fix: deletion of references (#2213)
1 parent 42b9e4d commit aba75eb

File tree

6 files changed

+26
-6
lines changed

6 files changed

+26
-6
lines changed

pkg/apisix/cache/cache.go

+2
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,7 @@ type Cache interface {
9797
// DeletePluginConfig deletes the specified plugin_config in cache.
9898
DeletePluginConfig(*v1.PluginConfig) error
9999

100+
CheckUpstreamReference(*v1.Upstream) error
101+
CheckPluginConfigReference(*v1.PluginConfig) error
100102
DeleteUpstreamServiceRelation(*v1.UpstreamServiceRelation) error
101103
}

pkg/apisix/cache/memdb.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ func (c *dbCache) DeleteSSL(ssl *v1.Ssl) error {
311311
}
312312

313313
func (c *dbCache) DeleteUpstream(u *v1.Upstream) error {
314-
if err := c.checkUpstreamReference(u); err != nil {
314+
if err := c.CheckUpstreamReference(u); err != nil {
315315
return err
316316
}
317317
return c.delete("upstream", u)
@@ -334,7 +334,7 @@ func (c *dbCache) DeleteSchema(schema *v1.Schema) error {
334334
}
335335

336336
func (c *dbCache) DeletePluginConfig(pc *v1.PluginConfig) error {
337-
if err := c.checkPluginConfigReference(pc); err != nil {
337+
if err := c.CheckPluginConfigReference(pc); err != nil {
338338
return err
339339
}
340340
return c.delete("plugin_config", pc)
@@ -357,7 +357,7 @@ func (c *dbCache) delete(table string, obj interface{}) error {
357357
return nil
358358
}
359359

360-
func (c *dbCache) checkUpstreamReference(u *v1.Upstream) error {
360+
func (c *dbCache) CheckUpstreamReference(u *v1.Upstream) error {
361361
// Upstream is referenced by Route.
362362
txn := c.db.Txn(false)
363363
defer txn.Abort()
@@ -379,7 +379,7 @@ func (c *dbCache) checkUpstreamReference(u *v1.Upstream) error {
379379
return nil
380380
}
381381

382-
func (c *dbCache) checkPluginConfigReference(u *v1.PluginConfig) error {
382+
func (c *dbCache) CheckPluginConfigReference(u *v1.PluginConfig) error {
383383
// PluginConfig is referenced by Route.
384384
txn := c.db.Txn(false)
385385
defer txn.Abort()

pkg/apisix/cache/noop_db.go

+8
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,11 @@ func (c *noopCache) DeletePluginConfig(pc *v1.PluginConfig) error {
172172
func (c *noopCache) DeleteUpstreamServiceRelation(us *v1.UpstreamServiceRelation) error {
173173
return nil
174174
}
175+
176+
func (c *noopCache) CheckUpstreamReference(u *v1.Upstream) error {
177+
return nil
178+
}
179+
180+
func (c *noopCache) CheckPluginConfigReference(pc *v1.PluginConfig) error {
181+
return nil
182+
}

pkg/apisix/nonexistentclient.go

+2
Original file line numberDiff line numberDiff line change
@@ -400,3 +400,5 @@ func (c *dummyCache) DeleteConsumer(_ *v1.Consumer) error
400400
func (c *dummyCache) DeleteSchema(_ *v1.Schema) error { return nil }
401401
func (c *dummyCache) DeletePluginConfig(_ *v1.PluginConfig) error { return nil }
402402
func (c *dummyCache) DeleteUpstreamServiceRelation(_ *v1.UpstreamServiceRelation) error { return nil }
403+
func (c *dummyCache) CheckUpstreamReference(_ *v1.Upstream) error { return nil }
404+
func (c *dummyCache) CheckPluginConfigReference(_ *v1.PluginConfig) error { return nil }

pkg/apisix/pluginconfig.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ func (pc *pluginConfigClient) Delete(ctx context.Context, obj *v1.PluginConfig)
162162
zap.String("cluster", pc.cluster.name),
163163
zap.String("url", pc.url),
164164
)
165-
165+
err := pc.cluster.cache.CheckPluginConfigReference(obj)
166+
if err != nil {
167+
log.Warnw("deletion for plugin config: " + obj.Name + " aborted as it is still in use.")
168+
return err
169+
}
166170
if err := pc.cluster.HasSynced(ctx); err != nil {
167171
return err
168172
}

pkg/apisix/upstream.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,11 @@ func (u *upstreamClient) Delete(ctx context.Context, obj *v1.Upstream) error {
158158
zap.String("cluster", u.cluster.name),
159159
zap.String("url", u.url),
160160
)
161-
161+
err := u.cluster.cache.CheckUpstreamReference(obj)
162+
if err != nil {
163+
log.Warnw("deletion for upstream: " + obj.Name + " aborted as it is still in use.")
164+
return err
165+
}
162166
if err := u.cluster.HasSynced(ctx); err != nil {
163167
return err
164168
}

0 commit comments

Comments
 (0)