[BUG] Proxy selector deletes can leave TCP bootstrap servers running
- 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