mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-17 07:37:15 +00:00
fix(node): keep an adopted inbound alias across a remote id cache refresh
AdoptInboundAlias maps a central tag onto a node inbound that carries a different name, recording the pairing in both remoteIDByTag and adoptedAliases. refreshRemoteIDs then rebuilt remoteIDByTag from the tags the node reports and nothing else, so the central-tag entry was dropped on the next cache miss for any other tag. After that every op on the adopted inbound failed to resolve, and UpdateInbound falls back to AddInbound — creating a duplicate inbound on the node at the same port. cacheGetTag only recovers an n<id>- prefix flip, never an arbitrary alias, so the pairing could not be rediscovered until a master restart. The rebuild now re-applies adoptedAliases onto the fresh map, which keeps the map the single place a tag is resolved from.
This commit is contained in:
@@ -404,6 +404,13 @@ func (r *Remote) refreshRemoteIDs(ctx context.Context) error {
|
||||
next[ib.Tag] = ib.Id
|
||||
}
|
||||
r.mu.Lock()
|
||||
// A rebuild sees only node-reported tags, so the adopted aliases must be
|
||||
// re-applied or a later op on an adopted inbound re-creates it as a duplicate.
|
||||
for centralTag, nodeTag := range r.adoptedAliases {
|
||||
if id, ok := next[nodeTag]; ok {
|
||||
next[centralTag] = id
|
||||
}
|
||||
}
|
||||
r.remoteIDByTag = next
|
||||
r.mu.Unlock()
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user