apache / apache/shenyu

[BUG] Proxy selector deletes can leave TCP bootstrap servers running

Open
#6,480 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
8.8k
Forks
3.1k
Avg merge
7d 1h
Merged PRs (30d)
85

Description

### Current Behavior

Proxy selector delete events publish the selector id, but gateway-side removal treats that value as the selector name.

Admin path/node listeners write proxy selector keys using `ProxySelectorData.getId()`:

```java
DefaultPathConstants.buildProxySelectorPath(data.getNamespaceId(), data.getPluginName(), data.getId())
```

On delete, sync consumers reconstruct `ProxySelectorData` with that leaf value placed into `name`:

```java
proxySelectorData.setName(proxySelectorName);
```

`CommonProxySelectorDataSubscriber` then removes by `proxySelectorData.getName()`. The TCP handler caches bootstrap servers by the real selector name from live selector data, so if `id != name`, the delete event cannot remove the cached TCP server.

### Expected Behavior

Proxy selector delete events should use the same identity that plugin handlers use for cache registration, or should carry both id and name so the correct cached resource can be removed.

### Impact

Deleting a TCP proxy selector can leave the old `BootstrapServer` cached and running when the selector id differs from the selector name.

### Code Location

- `shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractPathDataChangedListener.java`
- `shenyu-admin-listener/shenyu-admin-listener-api/src/main/java/org/apache/shenyu/admin/listener/AbstractNodeDataChangedListener.java`
- proxy selector delete keys are based on selector id.
- `shenyu-sync-data-center/shenyu-sync-data-api/src/main/java/org/apache/shenyu/sync/data/core/AbstractPathDataSyncService.java`
- `shenyu-sync-data-center/shenyu-sync-data-api/src/main/java/org/apache/shenyu/sync/data/core/AbstractNodeDataSyncService.java`
- delete consumers put the key leaf into `name`.
- `shenyu-plugin/shenyu-plugin-base/src/main/java/org/apache/shenyu/plugin/base/cache/CommonProxySelectorDataSubscriber.java`
- `shenyu-plugin/shenyu-plugin-proxy/shenyu-plugin-tcp/src/main/java/org/apache/shenyu/plugin/tcp/handler/TcpProxySelectorDataHandler.java`
- TCP removal is by selector name.

Contributor guide

No contributing guide indexed for this repository

Research direction

Trace proxy selector delete handling through AbstractPathDataChangedListener.java, AbstractNodeDataChangedListener.java, AbstractPathDataSyncService.java, and AbstractNodeDataSyncService.java. Then inspect CommonProxySelectorDataSubscriber.java and TcpProxySelectorDataHandler.java to compare delete identity with TCP cache registration. Done means deleting a selector whose id differs from its name removes the cached, running BootstrapServer.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.